nandi/frqpublic Fork 0
438b247afa2e97c6a6954709771915e2e72203f6
Commits
Clone
git clone https://git.rickub.com/nandi/frq.git
git clone ssh://git@rickub.com/nandi/frq.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

build.yml · 97 lines · 4.0 KBYAML Blame HistoryRaw
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago1# The build, on rickub. GitLab CI next door reads source and no more —
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago2# check-common on every push — and deliberately builds nothing. This is the
3# other half: the web bundle, actually compiled.
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago4#
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago5# It is not compiled *here*. The job hands the work to Modal exactly as a
6# person at a terminal would, and the Sandbox does it against the `devshell`
7# volume. What a runner contributes is a checkout, a python, and somewhere to
8# put the result afterwards. The reason it goes to Modal is the volume the
9# toolchain is cached on, not the size of the build.
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago10#
11# Lives in .rickub/workflows/ rather than .github/workflows/ because rickub
12# reads one or the other and never both: with this directory present, a
13# .github/workflows/ added later would be silently ignored. There is none
14# today, so nothing is being shadowed — see
15# https://rickub.com/docs/actions and https://rickub.com/docs/migrating-from-github
16name: build
17
18on:
19 push:
20 workflow_dispatch:
21
22jobs:
23 # The same read-only check GitLab runs, for the same reason: common/ compiles
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago24 # for two targets, so a host-specific call in shared code breaks one of them
25 # at a namespace nobody touched. Seconds, no toolchain. Worth having on both
26 # hosts rather than depending on which one a given push reaches.
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago27 check-common:
28 runs-on: ubuntu-latest
29 steps:
30 - uses: actions/checkout@v4
31 - run: python3 tools/check-common.py common
32
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago33 # The Nim core's tests. No Flutter, no Dart, no Android SDK — which is the
34 # reason the logic is moving there: a rule about the IRC wire format gets
35 # checked in seconds rather than behind a toolchain.
36 nim-test:
37 runs-on: ubuntu-latest
38 container: nimlang/nim:2.2.0-alpine
39 steps:
40 - uses: actions/checkout@v4
41 - run: cd nim && for t in tests/t*.nim; do nim c -r --hints:off --path:src "$t"; done
42
43 web:
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago44 runs-on: ubuntu-latest
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago45 needs: [check-common, nim-test]
46 # What it spends its time on is the ClojureDart compile and, on a cold
47 # toolchain, fetching the pinned Flutter/JDK/Clojure tarballs.
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 16h ago48 timeout-minutes: 30
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago49 steps:
50 # The container copies `.` — the whole working tree, uncommitted edits
51 # included. On a runner that is whatever the checkout left, so it wants
52 # to be the commit and not a shallow surprise.
53 - uses: actions/checkout@v4
54
55 - uses: actions/setup-python@v5
56 with:
57 python-version: "3.12"
58
59 - run: pip install --disable-pip-version-check modal
60
61 # Two secrets, set under Settings -> Secrets and variables. A Modal
62 # token is the whole of this job's configuration: no nix, no builder,
63 # no cache of its own.
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago64 - name: Build the web bundle, on Modal
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago65 env:
66 MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
67 MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
68 # Unpiped on purpose. The image build streams to this client and
69 # nowhere else, and `modal app logs` cannot reach an ephemeral run —
70 # so this terminal is the only place the build is visible. tee, not
71 # tail: a run killed mid-pipe through tail takes its output with it.
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago72 run: modal run .modal/flutter-web/container.py 2>&1 | tee /tmp/frq-build.log
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago73
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago74 # The Sandbox leaves the bundle on the devshell volume rather than
75 # anywhere a runner can see, so fetch it back out.
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 16h ago76 - name: Fetch the bundle out of the volume
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago77 env:
78 MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
79 MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 16h ago80 run: |
81 modal volume get --force devshell \
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago82 frq-flutter-web/flutter/build/web web
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago83
84 - uses: actions/upload-artifact@v4
85 with:
One frontend where there were three, and a core that is not Clojure 438b247 nandi 14h ago86 name: frq-web-${{ github.sha }}
87 path: web
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi 17h ago88 if-no-files-found: error
89
90 # Kept whether or not the build succeeded: a failed run's log is the
91 # one most worth reading, and it is gone with the runner otherwise.
92 - uses: actions/upload-artifact@v4
93 if: always()
94 with:
95 name: build-log
96 path: /tmp/frq-build.log
97 if-no-files-found: ignore