@@ -10,7 +10,14 @@ permissions:
1010
1111jobs :
1212 build :
13- runs-on : ubuntu-latest
13+ runs-on : ${{ matrix.runner }}
14+ strategy :
15+ matrix :
16+ include :
17+ - arch : x86_64
18+ runner : ubuntu-latest
19+ - arch : arm64
20+ runner : ubuntu-24.04-arm
1421 steps :
1522 - name : start service container
1623 run : |
@@ -33,11 +40,11 @@ jobs:
3340 cache-name : cache-stack
3441 with :
3542 path : ~/.stack
36- key : ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/stack.yaml') }}
43+ key : ${{ runner.os }}-${{ matrix.arch }}- build-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/stack.yaml') }}
3744 restore-keys : |
38- ${{ runner.os }}-build-${{ env.cache-name }}-
39- ${{ runner.os }}-build-
40- ${{ runner.os }}-
45+ ${{ runner.os }}-${{ matrix.arch }}- build-${{ env.cache-name }}-
46+ ${{ runner.os }}-${{ matrix.arch }}- build-
47+ ${{ runner.os }}-${{ matrix.arch }}-
4148 - name : Build dependencies
4249 run : |
4350 stack --no-terminal build --test --only-dependencies
@@ -52,10 +59,35 @@ jobs:
5259 export TASKRUNNER_TEST_S3_SECRET_KEY=minioadmin
5360
5461 stack --no-terminal build --test
55- - name : Zip
62+ - name : Package
5663 run : |
5764 cd dist
58- tar czvf taskrunner-linux.tar.gz taskrunner
65+ # Create architecture-specific archive
66+ tar czvf taskrunner-linux-${{ matrix.arch }}.tar.gz taskrunner
67+ # For x86_64, also create legacy name for backward compatibility
68+ if [ "${{ matrix.arch }}" == "x86_64" ]; then
69+ cp taskrunner-linux-${{ matrix.arch }}.tar.gz taskrunner-linux.tar.gz
70+ fi
71+ # Upload artifacts from both architecture builds
72+ - name : Upload artifacts
73+ uses : actions/upload-artifact@v4
74+ with :
75+ name : taskrunner-linux-${{ matrix.arch }}
76+ path : |
77+ dist/*.tar.gz
78+
79+ release :
80+ needs : build
81+ runs-on : ubuntu-latest
82+ steps :
83+ - name : Download all artifacts
84+ uses : actions/download-artifact@v4
85+ with :
86+ path : artifacts
87+
88+ - name : List artifacts
89+ run : ls -laR artifacts/
90+
5991 - name : Create Release
6092 id : create_release
6193 uses : actions/create-release@v1
@@ -66,13 +98,36 @@ jobs:
6698 release_name : Release ${{ github.ref_name }}
6799 draft : false
68100 prerelease : false
69- - name : Upload Release Asset
70- id : upload-release-asset
101+
102+ # Upload x86_64 with legacy name (backward compatibility)
103+ - name : Upload Release Asset (Linux - Legacy)
71104 uses : actions/upload-release-asset@v1
72105 env :
73106 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
74107 with :
75- upload_url : ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
76- asset_path : ./dist/taskrunner-linux.tar.gz
108+ upload_url : ${{ steps.create_release.outputs.upload_url }}
109+ asset_path : ./artifacts/taskrunner-linux-x86_64/ dist/taskrunner-linux.tar.gz
77110 asset_name : taskrunner-linux.tar.gz
78111 asset_content_type : application/x-tar
112+
113+ # Upload x86_64 with explicit architecture
114+ - name : Upload Release Asset (Linux x86_64)
115+ uses : actions/upload-release-asset@v1
116+ env :
117+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
118+ with :
119+ upload_url : ${{ steps.create_release.outputs.upload_url }}
120+ asset_path : ./artifacts/taskrunner-linux-x86_64/dist/taskrunner-linux-x86_64.tar.gz
121+ asset_name : taskrunner-linux-x86_64.tar.gz
122+ asset_content_type : application/x-tar
123+
124+ # Upload ARM64
125+ - name : Upload Release Asset (Linux ARM64)
126+ uses : actions/upload-release-asset@v1
127+ env :
128+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
129+ with :
130+ upload_url : ${{ steps.create_release.outputs.upload_url }}
131+ asset_path : ./artifacts/taskrunner-linux-arm64/dist/taskrunner-linux-arm64.tar.gz
132+ asset_name : taskrunner-linux-arm64.tar.gz
133+ asset_content_type : application/x-tar
0 commit comments