nandi/frqpublic Fork 0
1403956859648c3d39892e3994df8fee863ec653
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.

CI that can actually build the Nim core 1403956 · on 1403956859648c3d39892e3994df8fee863ec653 · nandi · 11h ago
.gitlab-ci.yml · 68 lines · 3.0 KBYAML Blame HistoryRaw
 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
# One job: a check on what common/ is allowed to contain, on every push.
#
# Nothing is built here. The check reads source and no more, so this file needs
# no toolchain at all, which is what keeps it honest about running on every
# push. There used to be a second, scheduled job that re-resolved the
# jolt-native flake input; there is no jolt half any more and no input to
# follow, so there is nothing for a schedule to do.
stages: [check]

# Two toolchains and one artifact between them.
#
# The library is built once, in the image that has Nim, and the Dart job takes
# it rather than installing a second toolchain to rebuild it. That is not only
# tidier: `libfrqcore.so` links OpenSSL and is glibc, so it has to be built
# somewhere its runtime can load it — which is why the Nim job is the Debian
# image and not the Alpine one it used to be. A musl build would not load in
# `dart:*` at all.

# common/ is compiled by ClojureDart for two targets — the APK and the Linux
# desktop — and shared code reaching for the JVM or a `dart:` library breaks
# one of them at a namespace nobody touched. `Math/ceil` in the compose bar was
# the third time. Reading the source is enough to catch it, which is why this
# needs no toolchain and no builder: python and a checkout, a few seconds, on
# every push.
check-common:
  stage: check
  image: python:3-alpine
  script:
    - python3 tools/check-common.py common

# The Nim core's tests. A second job rather than a step in the first, because
# it wants a compiler where check-common wants nothing: one can fail without
# hiding the other, and the pair of them is still seconds.
# The Nim core: its own suite, and the library the Dart job needs.
#
# `libssl-dev` because `nim/nim.cfg` sets `-d:ssl` — std/net links -lssl and
# -lcrypto for the TLS on :6697, and `frq.atproto` uses httpclient over the
# same. Without it the compile fails on a missing -lcrypto, which reads as
# nothing to do with TLS.
nim-test:
  stage: check
  image: nimlang/nim:2.2.10
  before_script:
    - apt-get update -qq && apt-get install -y -qq libssl-dev
  script:
    - cd nim && for t in tests/t*.nim; do nim c -r --hints:off --path:src "$t"; done
    - nim c --app:lib --mm:orc -d:release --hints:off --path:src
        --out:../build/nim/libfrqcore.so src/frq_core.nim
    # Diagnostic, not a gate: prints what the .so will want at runtime, so a
    # missing libssl in the Dart job is obvious from this log rather than from
    # a StateError in that one.
    - objdump -p ../build/nim/libfrqcore.so | grep NEEDED || true
  artifacts:
    paths: [build/nim/libfrqcore.so]
    expire_in: 1 hour

# The Dart side of the same boundary, on the plain VM — no Flutter, no
# emulator. It dlopens the library the job above built, so `libssl3` has to be
# there: the Dart SDK carries its own BoringSSL and does not bring OpenSSL
# with it.
dart-test:
  stage: check
  image: dart:3.13
  needs: [nim-test]
  before_script:
    - apt-get update -qq && apt-get install -y -qq libssl3
  script:
    - cd dart/frq_core && dart pub get && dart test -r expanded