@@ -18,4 +18,4 @@ jobs:
|
||||
go-version: "1.21"
|
||||
|
||||
- name: Run validator
|
||||
run: make validate
|
||||
run: make -C gobooks validate
|
||||
|
||||
@@ -7,12 +7,13 @@ Add books with this format :
|
||||
```
|
||||
### DATE - [BOOK NAME](BOOK URL)
|
||||
|
||||
<img src="BOOK COVER IMAGE ADDRESS" width="120px"/>
|
||||
<img src="gobooks/covers/COVER_FILENAME" width="120px"/>
|
||||
|
||||
BOOK DESCRIPTION
|
||||
|
||||
```
|
||||
|
||||
* Place cover images in `gobooks/covers/` with a slug filename (e.g. `book-name.jpg`).
|
||||
* If book is free, add it after free books of that category and also add `*Free*` after book url.
|
||||
* Add other books in ascending date order (newest last). Books without date go at the end of the list in that category.
|
||||
* To keep track of the huge table of contents you can use a plugin like [Markdown VSCode plugin](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
.PHONY: validate
|
||||
validate:
|
||||
cd validator && go run . ../README.md
|
||||
@@ -0,0 +1,3 @@
|
||||
.PHONY: validate
|
||||
validate:
|
||||
cd validator && go run . ../../README.md
|
||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 228 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 263 KiB After Width: | Height: | Size: 263 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 371 KiB After Width: | Height: | Size: 371 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 178 KiB |
|
Before Width: | Height: | Size: 376 KiB After Width: | Height: | Size: 376 KiB |
|
Before Width: | Height: | Size: 309 KiB After Width: | Height: | Size: 309 KiB |
|
Before Width: | Height: | Size: 293 KiB After Width: | Height: | Size: 293 KiB |
|
Before Width: | Height: | Size: 415 KiB After Width: | Height: | Size: 415 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 368 KiB After Width: | Height: | Size: 368 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 394 KiB After Width: | Height: | Size: 394 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 381 KiB After Width: | Height: | Size: 381 KiB |
|
Before Width: | Height: | Size: 428 KiB After Width: | Height: | Size: 428 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 225 KiB After Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@@ -4,7 +4,7 @@
|
||||
// book metadata (*Last published*, *Authors*), cover images exist, covers linked.
|
||||
//
|
||||
// Usage: go run . [path/to/README.md]
|
||||
// go run . # uses README.md in parent dir (../README.md)
|
||||
// go run . # uses README.md at repo root (../../README.md)
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
readmePath := filepath.Join("..", "README.md")
|
||||
readmePath := filepath.Join("..", "..", "README.md")
|
||||
if len(os.Args) > 1 {
|
||||
readmePath = os.Args[1]
|
||||
}
|
||||
@@ -236,14 +236,14 @@ func extractBookBlocks(lines []string) map[string]string {
|
||||
|
||||
func extractCoverRefs(lines []string) []string {
|
||||
var refs []string
|
||||
r := regexp.MustCompile(`src="(covers/[^"]+)"`)
|
||||
r := regexp.MustCompile(`src="(gobooks/covers/[^"]+)"`)
|
||||
for _, line := range lines {
|
||||
if match := r.FindStringSubmatch(line); match != nil {
|
||||
refs = append(refs, match[1])
|
||||
}
|
||||
}
|
||||
// Also check cover/ path
|
||||
r2 := regexp.MustCompile(`src="(cover/[^"]+)"`)
|
||||
// Also check gobooks/cover/ path (typo)
|
||||
r2 := regexp.MustCompile(`src="(gobooks/cover/[^"]+)"`)
|
||||
for _, line := range lines {
|
||||
if match := r2.FindStringSubmatch(line); match != nil {
|
||||
refs = append(refs, match[1])
|
||||
@@ -254,7 +254,7 @@ func extractCoverRefs(lines []string) []string {
|
||||
|
||||
func findUnlinkedCovers(lines []string) []string {
|
||||
var unlinked []string
|
||||
r := regexp.MustCompile(`<img\s+src="(covers/[^"]+)"`)
|
||||
r := regexp.MustCompile(`<img\s+src="(gobooks/covers/[^"]+)"`)
|
||||
for _, line := range lines {
|
||||
// Skip if img is inside <a href> or markdown link [<img...>](url)
|
||||
if (strings.Contains(line, "<a href=") || strings.Contains(line, "](http")) && strings.Contains(line, "<img") {
|
||||