1+ name : Release
2+
3+ on :
4+ push :
5+ tags :
6+ - v*
7+
8+ jobs :
9+ build-and-test :
10+ strategy :
11+ matrix :
12+ settings :
13+ - os : ubuntu-latest
14+ platform : x86_64-linux
15+ - os : ubuntu-24.04-arm
16+ platform : aarch64-linux
17+ - os : macos-13
18+ platform : x86_64-macos
19+ - os : macos-latest
20+ platform : aarch64-macos
21+
22+ runs-on : ${{ matrix.settings.os }}
23+ steps :
24+ - name : Checkout Repository
25+ uses : actions/checkout@v3
26+ with :
27+ submodules : recursive # Ensures submodules are cloned
28+ fetch-depth : 0 # Fetches the entire history for all branches
29+
30+ - name : Install Zig
31+ uses : mlugg/setup-zig@v1
32+ with :
33+ version : " 0.13.0" # Set the required Zig version
34+
35+ - name : Test state-transition-z
36+ run : |
37+ zig build test
38+
39+ - name : Build state-transition-z on ${{ matrix.settings.platform }}
40+ run : |
41+ zig build -Doptimize=ReleaseSafe
42+
43+ - name : Upload static library artifact for ${{ matrix.settings.platform }}
44+ uses : actions/upload-artifact@v4
45+ with :
46+ name : libstate-transition-${{ matrix.settings.platform }}.a
47+ path : zig-out/lib/libstate-transition.a
48+ compression-level : 0 # No compression
49+
50+ - name : Set shared library extension
51+ id : set_extension
52+ run : |
53+ case "${{ matrix.settings.platform }}" in
54+ x86_64-linux|aarch64-linux) echo "EXT=so" >> $GITHUB_ENV ;;
55+ *) echo "EXT=dylib" >> $GITHUB_ENV ;;
56+ esac
57+
58+ - name : Upload shared library artifact for ${{ matrix.settings.platform }}
59+ uses : actions/upload-artifact@v4
60+ with :
61+ name : libstate-transition-utils-${{ matrix.settings.platform }}.${{ env.EXT }}
62+ path : zig-out/lib/libstate-transition-utils.${{ env.EXT }}
63+ compression-level : 0 # No compression
64+
65+ create-release :
66+ needs : build-and-test
67+ runs-on : ubuntu-latest
68+ permissions :
69+ contents : write
70+
71+ steps :
72+ - name : Download all artifacts
73+ uses : actions/download-artifact@v4
74+ if : startsWith(github.ref, 'refs/tags/')
75+ with :
76+ path : release_tmp
77+ pattern : libstate-transition*
78+
79+ - name : List folders in release_tmp directory
80+ run : ls -la ${{ github.workspace }}/release_tmp
81+
82+ - name : Organize Release Artifacts
83+ run : |
84+ mkdir -p release
85+ mv release_tmp/libstate-transition-x86_64-linux.a/libstate-transition.a release/libstate-transition-x86_64-linux.a
86+ mv release_tmp/libstate-transition-aarch64-linux.a/libstate-transition.a release/libstate-transition-aarch64-linux.a
87+ mv release_tmp/libstate-transition-x86_64-macos.a/libstate-transition.a release/libstate-transition-x86_64-macos.a
88+ mv release_tmp/libstate-transition-aarch64-macos.a/libstate-transition.a release/libstate-transition-aarch64-macos.a
89+ mv release_tmp/libstate-transition-utils-x86_64-linux.so/libstate-transition-utils.so release/libstate-transition-utils-x86_64-linux.so
90+ mv release_tmp/libstate-transition-utils-aarch64-linux.so/libstate-transition-utils.so release/libstate-transition-utils-aarch64-linux.so
91+ mv release_tmp/libstate-transition-utils-x86_64-macos.dylib/libstate-transition-utils.dylib release/libstate-transition-utils-x86_64-macos.dylib
92+ mv release_tmp/libstate-transition-utils-pk_aarch64-macos.dylib/libstate-transition-utils.dylib release/libstate-transition-utils-aarch64-macos.dylib
93+
94+ - name : List files in release directory
95+ run : ls -la ${{ github.workspace }}/release
96+
97+ - name : Create Release
98+ uses : softprops/action-gh-release@v2
99+ with :
100+ files : |
101+ ${{ github.workspace }}/release/*
102+ tag_name : ${{ github.ref_name }}
103+ name : Release ${{ github.ref_name }}
104+ fail_on_unmatched_files : true
105+ draft : false
106+ prerelease : false
107+ env :
108+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments