Overview
Comment: | Flesh out makefile and build workflow (closes [aca89051]) |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
61bc0732b0b7319b916f9b79f15315eb |
User & Date: | joel on 2019-04-27 19:06:48 |
Other Links: | manifest | tags |
References
2019-04-27
| ||
19:09 | • Closed ticket [aca89051]: Add makefile plus 4 other changes artifact: 87190c55 user: joel | |
Context
2019-04-27
| ||
19:08 | Utility scripts use (main) check-in: 1e45b119 user: joel tags: trunk | |
19:06 | Flesh out makefile and build workflow (closes [aca89051]) check-in: 61bc0732 user: joel tags: trunk | |
03:31 | Fix cache watchlist check-in: ce114f72 user: joel tags: trunk | |
Changes
Modified .fossil-settings/ignore-glob from [9123c029] to [2a3c277b].
︙ | |||
11 12 13 14 15 16 17 | 11 12 13 14 15 16 17 18 | - + | *.html *.out *.ltx *.aux *.log *.xml *.toc |
Modified blog.rkt from [ca9ab776] to [44d9d7ad].
︙ | |||
24 25 26 27 28 29 30 31 32 | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | + + - + - - - - + + + + - + - + - + - + - - + + - + + - - + + | ;; Builds the paginated “blog” HTML files (blog-pg1.html ...) from the SQLite cache ;; The files will be written out every time this module is evaluated! (see end) (require "crystalize.rkt" "snippets-html.rkt" racket/file sugar/list) (provide main) ;; How many items per blog page |
Modified dust.rkt from [4a46ea1e] to [62b90e17].
︙ | |||
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | + + | pollen/pagetree pollen/setup pollen/file net/uri-codec gregor txexpr racket/list racket/system racket/string) ;; Provides common helper functions used throughout the project (provide maybe-meta ; Select from (current-metas) or default value ("") if not available maybe-attr ; Return an attribute’s value or a default ("") if not available here-output-path series-noun ; Retrieve noun-singular from current 'series meta, or "" series-title ; Retrieve title of series in current 'series meta, or "" series-pagenode invalidate-series make-tag-predicate tx-strs ymd->english ymd->dateformat default-authorname default-title articles-folder |
︙ | |||
57 58 59 60 61 62 63 64 65 | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | + - + + | (define default-authorname "Joel Dueck") (define series-folder "series") (define articles-folder "articles") (define (default-title body-txprs) (format "“~a…”" (first-words body-txprs 5))) (define (maybe-meta m [missing ""]) |
︙ | |||
92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | + + + + + + + + + + + + + | [else (or (select-from-metas 'noun-singular series-pnode) "")])) (define (series-title) (define series-pnode (series-pagenode)) (case series-pnode ['|| ""] ; no series specified [else (or (select-from-metas 'title series-pnode) "")])) ;; “Touches” the last-modified date on the current article’s series, if there is one (define (invalidate-series) (define series-name (maybe-meta 'series #f)) (when series-name (define series-file (build-path (current-project-root) series-folder (format "~a.poly.pm" series-name))) (when (file-exists? series-file) (case (system-type 'os) ['windows (system (format "type nul >> ~a" series-file))] [else (system (format "touch ~a" series-file))])))) ;; ~~~ Project-wide Pagetrees ~~~ (define (include-in-pagetree folder extension) (define (matching-file? f) (string-suffix? f extension)) (define (file->output-pagenode f) |
︙ |
Modified makefile from [3dd8fa71] to [604071f7].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + | # Copyright 2019 Joel Dueck # This file is part of The Local Yarn # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # SHELL = /bin/bash # ~~~ Variables used by rules ~~~ # core-files := pollen.rkt dust.rkt html-deps := snippets-html.rkt tags-html.rkt article-sources := $(wildcard articles/*.poly.pm) articles-html := $(patsubst %.poly.pm, %.html, $(article-sources)) articles-pdf := $(patsubst %.poly.pm, %.pdf, $(article-sources)) series-sources := $(wildcard series/*.poly.pm) series-html := $(patsubst %.poly.pm, %.html, $(series-sources)) # ~~~ Rules ~~ # # The order of these dependencies is important. They will be processed left to right. web: _article_htmls.mark $(articles-html) $(series-html) blog-pg1.html web: ## Rebuild all web content (not PDFs) # The file article_htmls.mark is a zero-byte file that serves only as a marker. If it is older than # any of its dependencies (or missing) all of the articles will be rebuilt. Its dependencies are # also on the Pollen cache watchlist (see pollen.rkt) _article_htmls.mark: $(core-files) $(html-deps) template.html.p raco pollen setup articles/ raco pollen render -p -t html articles/*.poly.p raco pollen setup series/ raco pollen render -p -t html series/*.poly.pm touch article_htmls.mark # If the rule for article_htmls.mark was triggered, all the article HTML files will already have # been re-rendered. (That rule comes before this one in the list of dependencies for "all") But if # not, any individual files that have been edited will get re-rendered. $(articles-html): %.html: %.poly.pm raco pollen render $@ # Note that if any article is part of a series, it will touch its series .poly.pm file during its # render, triggering this rule for that series. $(series-html): %.html: %.poly.pm raco pollen render $@ # This target will also rebuild pg2, pg3, etc. blog-pg1.html: $(core-files) $(html-deps) $(articles-html) blog.rkt rm -f blog*.html racket -tm blog.rkt spritz: ## Clear Pollen and Scribble cache rm -rf compiled code-docs/compiled articles/compiled series/compiled fossil clean code-docs/ publish: check-env publish: ## Sync all HTML and PDF stuff to the public web server (does not rebuild any files) raco pollen publish rsync -av ~/Desktop/publish/ -e 'ssh -p $(WEB_SRV_PORT)' $(LOCALYARN_SRV) \ --delete \ --exclude=drafts \ --exclude=code-docs \ --exclude=util \ --exclude=x-mockup \ --exclude=repo-www \ --exclude=scribbled \ --exclude='*.sqlite' \ --exclude='*.fossil' \ --exclude=.fossil-settings \ --exclude=.fslckout \ --exclude='*.ltx' \ --exclude='*.swp' \ --exclude='*.mark' \ --exclude=.DS_Store \ --exclude='template*.*' \ --exclude=makefile rm -rf ~/Desktop/publish scribble: ## Rebuild code documentation and update Fossil repo scribble --htmls +m --redirect https://docs.racket-lang.org/local-redirect/ code-docs/main.scrbl fossil uv rm scribbled/* rm -rf scribbled/* mv main/* scribbled/ cp code-docs/scribble-iframe.html scribbled/scribble.html rm -rf main fossil uv add scribbled/* fossil uv sync # Self-documenting makefile (http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html) help: ## Displays this help screen @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' article: ## Start a new article from a template racket util/newpost.rkt |
Modified tags-html.rkt from [392bb161] to [a9c3097d].
︙ | |||
93 94 95 96 97 98 99 100 101 102 103 104 105 106 | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | + | (define html-center (default-tag-function 'div #:style "text-align: center")) (define html-dialogue (default-tag-function 'dl #:class "dialogue")) (define (html-block . elements) `(section [[class "content-block"]] (div [[class "content-block-main"]] ,@elements))) (define (html-root . elements) (invalidate-series) (define first-pass (decode-elements (append elements (list (html-footnote-block))) #:txexpr-elements-proc decode-hardwrapped-paragraphs #:exclude-tags '(script style figure table pre))) (define second-pass (decode-elements first-pass #:block-txexpr-proc detect-newthoughts |
︙ |