@@ -2,13 +2,17 @@ name: Prepare Viash Release
22
33on :
44 workflow_dispatch :
5-
5+
66jobs :
7- build-and-release :
7+ build-jar :
88 runs-on : ubuntu-latest
99
1010 permissions :
11- contents : write
11+ contents : read
12+
13+ outputs :
14+ viash_version : ${{ steps.get_version.outputs.viash_version }}
15+ changelog_section : ${{ steps.get_version.outputs.changelog_section }}
1216
1317 steps :
1418 - name : Checkout code
@@ -43,26 +47,141 @@ jobs:
4347 echo "Detected Viash version: $viash_version"
4448 echo "Detected Viash minor version: $viash_minor_version"
4549 echo "viash_version=$viash_version" >> "$GITHUB_OUTPUT"
46-
50+
4751 # fetch relevant changelog section
4852 changelog_section=$(awk "/# Viash ${viash_version}.*/{flag=1;print;next}/^# /{flag=0}flag" CHANGELOGS/CHANGELOG_${viash_minor_version}.md)
49-
53+
5054 echo "changelog_section<<GITHUB_EOF" >> "$GITHUB_OUTPUT"
5155 echo "$changelog_section" >> "$GITHUB_OUTPUT"
5256 echo "GITHUB_EOF" >> "$GITHUB_OUTPUT"
5357
58+ - name : Extract fat JAR
59+ run : |
60+ cp target/viash.jar viash.jar
61+
62+ - name : Upload JAR artifact
63+ uses : actions/upload-artifact@v4
64+ with :
65+ name : fat-jar
66+ path : viash.jar
67+ retention-days : 1
68+
69+ - name : Upload release assets
70+ uses : actions/upload-artifact@v4
71+ with :
72+ name : release-assets
73+ path : |
74+ bin/viash
75+ bin/schema.json
76+ bin/viash_install
77+ retention-days : 1
78+
79+ build-native :
80+ needs : build-jar
81+ strategy :
82+ fail-fast : false
83+ matrix :
84+ include :
85+ - os : macos-13
86+ label : macos-x86_64
87+ - os : macos-14
88+ label : macos-aarch64
89+ - os : ubuntu-latest
90+ label : linux-x86_64
91+ - os : ubuntu-24.04-arm
92+ label : linux-aarch64
93+
94+ runs-on : ${{ matrix.os }}
95+
96+ permissions :
97+ contents : read
98+
99+ steps :
100+ - name : Download JAR
101+ uses : actions/download-artifact@v4
102+ with :
103+ name : fat-jar
104+
105+ - name : Set up GraalVM
106+ uses : graalvm/setup-graalvm@v1
107+ with :
108+ java-version : ' 21'
109+ distribution : ' graalvm'
110+
111+ - name : Build native image
112+ run : |
113+ native-image -jar viash.jar \
114+ --no-fallback \
115+ -H:+ReportExceptionStackTraces \
116+ --initialize-at-build-time=scala,org.rogach.scallop \
117+ --enable-url-protocols=https \
118+ -o viash
119+
120+ - name : Smoke test
121+ run : |
122+ ./viash --version
123+
124+ - name : Upload native binary
125+ uses : actions/upload-artifact@v4
126+ with :
127+ name : viash-${{ matrix.label }}
128+ path : viash
129+ retention-days : 1
130+
131+ create-release :
132+ needs : [build-jar, build-native]
133+ runs-on : ubuntu-latest
134+
135+ permissions :
136+ contents : write
137+
138+ steps :
139+ - name : Download release assets
140+ uses : actions/download-artifact@v4
141+ with :
142+ name : release-assets
143+ path : release-assets
144+
145+ - name : Download native binaries
146+ uses : actions/download-artifact@v4
147+ with :
148+ pattern : viash-*
149+ path : native-binaries
150+ merge-multiple : false
151+
152+ - name : Prepare release files
153+ run : |
154+ mkdir -p release
155+
156+ # JAR-based executable (backward compatible)
157+ cp release-assets/bin/viash release/viash
158+ cp release-assets/bin/schema.json release/schema.json
159+ cp release-assets/bin/viash_install release/viash_install
160+
161+ # Native binaries with platform suffixes
162+ cp native-binaries/viash-linux-x86_64/viash release/viash-linux-x86_64
163+ cp native-binaries/viash-linux-aarch64/viash release/viash-linux-aarch64
164+ cp native-binaries/viash-macos-x86_64/viash release/viash-macos-x86_64
165+ cp native-binaries/viash-macos-aarch64/viash release/viash-macos-aarch64
166+
167+ chmod +x release/viash-*
168+
54169 - name : Create release
55170 uses : softprops/action-gh-release@v2
56171 env :
57172 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
58173 with :
59- tag_name : ${{ steps.get_version .outputs.viash_version }}
174+ tag_name : ${{ needs.build-jar .outputs.viash_version }}
60175 target_commitish : ${{ github.sha }}
61- name : Viash ${{ steps.get_version .outputs.viash_version }}
62- body : ${{ steps.get_version .outputs.changelog_section }}
176+ name : Viash ${{ needs.build-jar .outputs.viash_version }}
177+ body : ${{ needs.build-jar .outputs.changelog_section }}
63178 draft : true
64179 fail_on_unmatched_files : true
65180 files : |
66- bin/viash
67- bin/schema.json
68- bin/viash_install
181+ release/viash
182+ release/schema.json
183+ release/viash_install
184+ release/viash-linux-x86_64
185+ release/viash-linux-aarch64
186+ release/viash-macos-x86_64
187+ release/viash-macos-aarch64
0 commit comments