nandi/frqpublic Fork 0
b4172e953d70d5164f0837f6a88b0b92448c32f6
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 · 99 lines · 4.3 KBYAML Blame HistoryRaw
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday1# The build, on rickub. GitLab CI next door reads source and no more —
2# check-common on every push, the flake.lock nightly — and deliberately builds
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 23h ago3# nothing. This is the other half: the desktop bundle, actually assembled.
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday4#
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 23h ago5# It is not assembled *here*, though it nearly could be now. The job hands the
6# work to Modal exactly as a person at a terminal would, and the Sandbox does
7# it against the `devshell` volume. What a runner contributes is a checkout, a
8# python, and somewhere to put the result afterwards.
9#
10# It used to be `nix build .#appimage`, which a rickub runner could not have
11# done at all — a container against libjoltcosmic's dependency tree is the
12# laptop-shaped death CLAUDE.md warns about. That is no longer what the
13# container runs: jolt, the backends and libmoq_ffi all arrive pinned and
14# prebuilt, so the Modal side fetches and copies rather than compiling. The
15# reason it still goes to Modal is the volume the toolchain is cached on, not
16# the size of the build.
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday17#
18# Lives in .rickub/workflows/ rather than .github/workflows/ because rickub
19# reads one or the other and never both: with this directory present, a
20# .github/workflows/ added later would be silently ignored. There is none
21# today, so nothing is being shadowed — see
22# https://rickub.com/docs/actions and https://rickub.com/docs/migrating-from-github
23name: build
24
25on:
26 push:
27 workflow_dispatch:
28
29jobs:
30 # The same read-only check GitLab runs, for the same reason: common/ compiles
31 # twice and only the jolt half is on the way to anything anyone runs, so a
32 # JVM call in shared code breaks the phone at a namespace nobody touched.
33 # Seconds, no toolchain. Worth having on both hosts rather than depending on
34 # which one a given push reaches.
35 check-common:
36 runs-on: ubuntu-latest
37 steps:
38 - uses: actions/checkout@v4
39 - run: python3 tools/check-common.py common
40
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 23h ago41 desktop:
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday42 runs-on: ubuntu-latest
43 needs: check-common
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 23h ago44 # Minutes now, not an hour. The Modal side compiles one .c file; what it
45 # spends its time on is fetching the pinned pieces on a cold toolchain and
46 # the upload of the tree from here.
47 timeout-minutes: 30
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday48 steps:
49 # The container copies `.` — the whole working tree, uncommitted edits
50 # included. On a runner that is whatever the checkout left, so it wants
51 # to be the commit and not a shallow surprise.
52 - uses: actions/checkout@v4
53
54 - uses: actions/setup-python@v5
55 with:
56 python-version: "3.12"
57
58 - run: pip install --disable-pip-version-check modal
59
60 # Two secrets, set under Settings -> Secrets and variables. A Modal
61 # token is the whole of this job's configuration: no nix, no builder,
62 # no cache of its own.
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 23h ago63 - name: Assemble the desktop bundle, on Modal
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday64 env:
65 MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
66 MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
67 # Unpiped on purpose. The image build streams to this client and
68 # nowhere else, and `modal app logs` cannot reach an ephemeral run —
69 # so this terminal is the only place the build is visible. tee, not
70 # tail: a run killed mid-pipe through tail takes its output with it.
71 run: modal run .modal/frq/container.py 2>&1 | tee /tmp/frq-build.log
72
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 23h ago73 # The Sandbox leaves the tarball on the devshell volume rather than
74 # anywhere a runner can see, so fetch it back out. One file, already a
75 # squashed tree — nothing to import on the other end, and nothing to
76 # unpack before it can be uploaded.
77 - name: Fetch the bundle out of the volume
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday78 env:
79 MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
80 MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 23h ago81 run: |
82 modal volume get --force devshell \
83 artifacts/frq-desktop-x86_64-linux.tar.gz \
84 frq-desktop-x86_64-linux.tar.gz
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday85
86 - uses: actions/upload-artifact@v4
87 with:
A Mesa nobody needed, and the AppImage that carried it 9db383c nandi 23h ago88 name: frq-desktop-${{ github.sha }}
89 path: frq-desktop-x86_64-linux.tar.gz
A runner that builds nothing, and an AppImage anyway 41bcb21 nandi yesterday90 if-no-files-found: error
91
92 # Kept whether or not the build succeeded: a failed run's log is the
93 # one most worth reading, and it is gone with the runner otherwise.
94 - uses: actions/upload-artifact@v4
95 if: always()
96 with:
97 name: build-log
98 path: /tmp/frq-build.log
99 if-no-files-found: ignore