on master help sign in
Add GitHub Actions CI to build static binaries for Linux and macOS
294c1f7iko
.github/workflows/build.ymlnew file+110
@@ -0,0 +1,110 @@
1+name: Build
2+
3+on:
4+ push:
5+ branches: [master]
6+ pull_request:
7+
8+env:
9+ CARGO_TERM_COLOR: always
10+
11+jobs:
12+ build:
13+ strategy:
14+ fail-fast: false
15+ matrix:
16+ include:
17+ - runner: ubuntu-latest
18+ name: linux-x86_64
19+ - runner: macos-latest
20+ name: macos-arm64
21+ - runner: macos-13
22+ name: macos-x86_64
23+ runs-on: ${{ matrix.runner }}
24+ steps:
25+ - uses: actions/checkout@v4
26+
27+ - uses: actions/checkout@v4
28+ with:
29+ repository: ilyakooo0/knot
30+ path: knot
31+
32+ - uses: dtolnay/rust-toolchain@stable
33+
34+ - name: Install musl toolchain
35+ if: runner.os == 'Linux'
36+ run: |
37+ sudo apt-get update
38+ sudo apt-get install -y musl-tools
39+ rustup target add x86_64-unknown-linux-musl
40+
41+ - uses: actions/cache@v4
42+ with:
43+ path: |
44+ ~/.cargo/registry
45+ ~/.cargo/git
46+ knot/target
47+ key: ${{ matrix.name }}-cargo-${{ hashFiles('knot/Cargo.lock') }}
48+
49+ - name: Build knotc
50+ working-directory: knot
51+ run: cargo build --release -p knot-compiler
52+
53+ - name: Build musl runtime
54+ if: runner.os == 'Linux'
55+ working-directory: knot
56+ run: cargo build --release -p knot-runtime --target x86_64-unknown-linux-musl
57+
58+ - name: Compile server (Linux static)
59+ if: runner.os == 'Linux'
60+ run: |
61+ printf '#!/bin/sh\nexec musl-gcc -static "$@"\n' > /tmp/static-cc
62+ chmod +x /tmp/static-cc
63+ CC=/tmp/static-cc \
64+ KNOT_RUNTIME_LIB=${{ github.workspace }}/knot/target/x86_64-unknown-linux-musl/release/libknot_runtime.a \
65+ ./knot/target/release/knotc build server.knot
66+
67+ - name: Compile server (macOS)
68+ if: runner.os == 'macOS'
69+ run: ./knot/target/release/knotc build server.knot
70+
71+ - name: Verify binary
72+ run: file server
73+
74+ - uses: actions/upload-artifact@v4
75+ with:
76+ name: server-${{ matrix.name }}
77+ path: server
78+
79+ release:
80+ needs: build
81+ if: github.ref == 'refs/heads/master' && github.event_name == 'push'
82+ runs-on: ubuntu-latest
83+ permissions:
84+ contents: write
85+ steps:
86+ - uses: actions/download-artifact@v4
87+
88+ - uses: actions/checkout@v4
89+ with:
90+ path: repo
91+
92+ - name: Generate version
93+ id: version
94+ run: echo "tag=$(git -C repo log -1 --format='%cd' --date='format:%Y.%m.%d.%H%M')" >> "$GITHUB_OUTPUT"
95+
96+ - name: Prepare release assets
97+ run: |
98+ for dir in server-*/; do
99+ name="${dir%/}"
100+ mv "${dir}server" "${name}.tmp"
101+ rm -rf "$dir"
102+ mv "${name}.tmp" "$name"
103+ done
104+ chmod +x server-*
105+
106+ - uses: softprops/action-gh-release@v2
107+ with:
108+ tag_name: ${{ steps.version.outputs.tag }}
109+ name: ${{ steps.version.outputs.tag }}
110+ files: server-*
client/elm-stuff/0.19.1/Main.elmideleted

Binary file not shown.

client/elm-stuff/0.19.1/Main.elmodeleted

Binary file not shown.

client/elm-stuff/0.19.1/d.datdeleted

Binary file not shown.

client/elm-stuff/0.19.1/i.datdeleted

Binary file not shown.

client/elm-stuff/0.19.1/o.datdeleted

Binary file not shown.

client/src/Main.elm+27−1
@@ -1432,6 +1432,7 @@ processEvents xPriv myEdHex events seenIds =
1432 )
1432 )
1433 ( [], seenIds, [] )
1433 ( [], seenIds, [] )
1434 events
1434 events
1435+ |> (\( msgs, seen, acks ) -> ( List.reverse msgs, seen, acks ))
1435
1436
1436
1437
1437
1438
@@ -1632,7 +1633,7 @@ charToHexBytes c =
1632 , nibbleToHex (modBy 16 b2)
1633 , nibbleToHex (modBy 16 b2)
1633 ]
1634 ]
1634
1635
1635− else
1636+ else if code < 65536 then
1636 -- 3-byte UTF-8
1637 -- 3-byte UTF-8
1637 let
1638 let
1638 b1 =
1639 b1 =
@@ -1652,6 +1653,31 @@ charToHexBytes c =
1652 , nibbleToHex (modBy 16 b3)
1653 , nibbleToHex (modBy 16 b3)
1653 ]
1654 ]
1654
1655
1656+ else
1657+ -- 4-byte UTF-8 (U+10000 and above: emoji, supplementary planes)
1658+ let
1659+ b1 =
1660+ 0xF0 + (code // 262144)
1661+
1662+ b2 =
1663+ 0x80 + modBy 64 (code // 4096)
1664+
1665+ b3 =
1666+ 0x80 + modBy 64 (code // 64)
1667+
1668+ b4 =
1669+ 0x80 + modBy 64 code
1670+ in
1671+ [ nibbleToHex (b1 // 16)
1672+ , nibbleToHex (modBy 16 b1)
1673+ , nibbleToHex (b2 // 16)
1674+ , nibbleToHex (modBy 16 b2)
1675+ , nibbleToHex (b3 // 16)
1676+ , nibbleToHex (modBy 16 b3)
1677+ , nibbleToHex (b4 // 16)
1678+ , nibbleToHex (modBy 16 b4)
1679+ ]
1680+
1655
1681
1656nibbleToHex : Int -> Char
1682nibbleToHex : Int -> Char
1657nibbleToHex n =
1683nibbleToHex n =