Skip to content

Commit b916ef9

Browse files
committed
Refactor build workflow to matrix.
This splits the building process in multiple jobs, avoiding running out of diskspace because of installing all the different target toolchains for the different architectures.
1 parent 2e7a8bb commit b916ef9

File tree

2 files changed

+88
-48
lines changed

2 files changed

+88
-48
lines changed

.github/workflows/main.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ jobs:
1616
uses: actions/checkout@v2
1717
-
1818
name: Install Nix
19-
uses: cachix/install-nix-action@v20
19+
uses: cachix/install-nix-action@v22
2020
with:
21-
nix_path: nixpkgs=channel:nixos-22.11
21+
nix_path: nixpkgs=channel:nixos-23.05
2222
-
2323
name: Cargo cache
2424
uses: actions/cache@v3
@@ -41,15 +41,23 @@ jobs:
4141
needs: tests
4242
runs-on: ubuntu-latest
4343
if: startsWith(github.ref, 'refs/tags/v')
44+
strategy:
45+
matrix:
46+
target:
47+
- aarch64-unknown-linux-musl
48+
- armv5te-unknown-linux-musleabi
49+
- armv7-unknown-linux-musleabihf
50+
- mips-unknown-linux-musl
51+
- mipsel-unknown-linux-musl
4452
steps:
4553
-
4654
name: Checkout
4755
uses: actions/checkout@v2
4856
-
4957
name: Install Nix
50-
uses: cachix/install-nix-action@v20
58+
uses: cachix/install-nix-action@v22
5159
with:
52-
nix_path: nixpkgs=channel:nixos-22.11
60+
nix_path: nixpkgs=channel:nixos-23.05
5361
-
5462
name: Cargo cache
5563
uses: actions/cache@v3
@@ -60,10 +68,10 @@ jobs:
6068
~/.cargo/registry/cache/
6169
~/.cargo/git/db/
6270
target/
63-
key: ${{ runner.os }}-cargo-dist-${{ hashFiles('**/Cargo.lock') }}
71+
key: ${{ runner.os }}-cargo-dist-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
6472
-
6573
name: Build distributables
66-
run: nix-shell --command "make dist"
74+
run: nix-shell --command "make dist-${{ matrix.target }}"
6775
-
6876
name: Configure AWS credentials
6977
uses: aws-actions/configure-aws-credentials@v1

Makefile

Lines changed: 74 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,74 @@
11
.PHONY: dist
22

33
# Compile the binaries for all targets.
4-
build:
4+
build: build-aarch64-unknown-linux-musl \
5+
build-armv5te-unknown-linux-musleabi \
6+
build-armv7-unknown-linux-musleabihf \
7+
build-mips-unknown-linux-musl \
8+
build-mipsel-unknown-linux-musl
9+
10+
build-aarch64-unknown-linux-musl:
511
cross build --target aarch64-unknown-linux-musl --release
12+
13+
build-armv5te-unknown-linux-musleabi:
614
cross build --target armv5te-unknown-linux-musleabi --release
15+
16+
build-armv7-unknown-linux-musleabihf:
717
cross build --target armv7-unknown-linux-musleabihf --release
18+
19+
build-mips-unknown-linux-musl:
820
cross build --target mips-unknown-linux-musl --release --no-default-features --features semtech_udp
21+
22+
build-mipsel-unknown-linux-musl:
923
cross build --target mipsel-unknown-linux-musl --release --no-default-features --features semtech_udp
1024

11-
# Build distributable binaries.
12-
dist: build package
25+
# Build distributable binaries for all targets.
26+
dist: dist-aarch64-unknown-linux-musl \
27+
dist-armv5te-unknown-linux-musleabi \
28+
dist-armv7-unknown-linux-musleabihf \
29+
dist-mips-unknown-linux-musl \
30+
dist-mipsel-unknown-linux-musl
1331

14-
# Update the version.
15-
version:
16-
test -n "$(VERSION)"
17-
sed -i 's/^version.*/version = "$(VERSION)"/g' ./Cargo.toml
18-
make test
19-
git add .
20-
git commit -v -m "Bump version to $(VERSION)"
21-
git tag -a v$(VERSION) -m "v$(VERSION)"
32+
dist-aarch64-unknown-linux-musl: build-aarch64-unknown-linux-musl package-aarch64-unknown-linux-musl
2233

23-
# Cleanup dist.
24-
clean:
25-
cargo clean
26-
rm -rf dist
34+
dist-armv5te-unknown-linux-musleabi: build-armv5te-unknown-linux-musleabi package-armv5te-unknown-linux-musleabi
2735

28-
# Run tests
29-
test:
30-
cargo clippy --no-deps
31-
cargo test
36+
dist-armv7-unknown-linux-musleabihf: build-armv7-unknown-linux-musleabihf package-armv7-unknown-linux-musleabihf
3237

33-
# Enter the devshell.
34-
devshell:
35-
nix-shell
38+
dist-mips-unknown-linux-musl: build-mips-unknown-linux-musl package-mips-unknown-linux-musl
3639

37-
# Enter the Docker based devshell.
38-
docker-devshell:
39-
docker-compose run --rm chirpstack-mqtt-forwarder
40+
dist-mipsel-unknown-linux-musl: build-mipsel-unknown-linux-musl package-mipsel-unknown-linux-musl
4041

41-
# Package the compiled binaries.
42-
package: package-targz-armv7hf package-targz-arm64 package-deb \
43-
package-dragino \
44-
package-multitech-conduit \
45-
package-multitech-conduit-ap \
46-
package-tektelic-kona \
47-
package-kerlink-klkgw \
48-
package-rak-ramips-24kec
49-
50-
package-targz-armv7hf:
42+
# Package the compiled binaries
43+
package-aarch64-unknown-linux-musl:
5144
$(eval PKG_VERSION := $(shell cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version'))
5245
mkdir -p dist
53-
tar -czvf dist/chirpstack-mqtt-forwarder_$(PKG_VERSION)_armv7hf.tar.gz -C target/armv7-unknown-linux-musleabihf/release chirpstack-mqtt-forwarder
5446

55-
package-targz-arm64:
56-
$(eval PKG_VERSION := $(shell cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version'))
57-
mkdir -p dist
47+
# .tar.gz
5848
tar -czvf dist/chirpstack-mqtt-forwarder_$(PKG_VERSION)_arm64.tar.gz -C target/aarch64-unknown-linux-musl/release chirpstack-mqtt-forwarder
5949

60-
package-deb:
50+
# .deb
6151
cargo deb --target aarch64-unknown-linux-musl --no-build --no-strip
62-
cargo deb --target armv7-unknown-linux-musleabihf --no-build --no-strip
52+
cp target/aarch64-unknown-linux-musl/debian/*.deb ../dist
53+
54+
package-armv7-unknown-linux-musleabihf: package-tektelic-kona package-kerlink-klkgw
55+
$(eval PKG_VERSION := $(shell cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version'))
6356
mkdir -p dist
57+
58+
# .tar.gz
59+
tar -czvf dist/chirpstack-mqtt-forwarder_$(PKG_VERSION)_armv7hf.tar.gz -C target/armv7-unknown-linux-musleabihf/release chirpstack-mqtt-forwarder
60+
61+
# .deb
62+
cargo deb --target armv7-unknown-linux-musleabihf --no-build --no-strip
6463
cp target/armv7-unknown-linux-musleabihf/debian/*.deb ../dist
65-
cp target/aarch64-unknown-linux-musl/debian/*.deb ../dist
6664

65+
package-armv5te-unknown-linux-musleabi: package-multitech-conduit package-multitech-conduit-ap
66+
67+
package-mips-unknown-linux-musl: package-dragino
68+
69+
package-mipsel-unknown-linux-musl: package-rak-ramips-24kec
70+
71+
# Gateway specific packaging.
6772
package-dragino:
6873
cd packaging/vendor/dragino/mips_24kc && ./package.sh
6974
mkdir -p dist/vendor/dragino/mips_24kc
@@ -93,3 +98,30 @@ package-kerlink-klkgw:
9398
cd packaging/vendor/kerlink/klkgw && ./package.sh
9499
mkdir -p dist/vendor/kerlink/klkgw
95100
cp packaging/vendor/kerlink/klkgw/*.ipk dist/vendor/kerlink/klkgw
101+
102+
# Update the version.
103+
version:
104+
test -n "$(VERSION)"
105+
sed -i 's/^version.*/version = "$(VERSION)"/g' ./Cargo.toml
106+
make test
107+
git add .
108+
git commit -v -m "Bump version to $(VERSION)"
109+
git tag -a v$(VERSION) -m "v$(VERSION)"
110+
111+
# Cleanup dist.
112+
clean:
113+
cargo clean
114+
rm -rf dist
115+
116+
# Run tests
117+
test:
118+
cargo clippy --no-deps
119+
cargo test
120+
121+
# Enter the devshell.
122+
devshell:
123+
nix-shell
124+
125+
# Enter the Docker based devshell.
126+
docker-devshell:
127+
docker-compose run --rm chirpstack-mqtt-forwarder

0 commit comments

Comments
 (0)