1+ # inspried by https://github.com/mbhall88/lrge/blob/main/.github/workflows/release.yml
2+ name : Release
3+
4+ on :
5+ push :
6+ tags :
7+ - " [0-9]+.[0-9]+.[0-9]+"
8+
9+ env :
10+ CICD_INTERMEDIATES_DIR : " _release-intermediates"
11+
12+ jobs :
13+ upload :
14+ name : ${{ matrix.job.os }} (${{ matrix.job.target }})
15+ permissions :
16+ contents : write
17+ runs-on : ${{ matrix.job.os }}
18+ strategy :
19+ fail-fast : false
20+ matrix :
21+ job :
22+ - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu, use-cross: true }
23+ - { os: ubuntu-latest, target: aarch64-unknown-linux-gnu, use-cross: true }
24+ - { os: macos-13, target: x86_64-apple-darwin, use-cross: true }
25+ - { os: macos-latest, target: aarch64-apple-darwin, use-cross: true }
26+ steps :
27+ - name : Checkout source code
28+ uses : actions/checkout@v4
29+
30+ - name : Extract crate information
31+ shell : bash
32+ run : |
33+ echo "PROJECT_NAME=hashfasta" >> $GITHUB_ENV
34+ echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' lrge/Cargo.toml | head -n1)" >> $GITHUB_ENV
35+ echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV
36+ echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV
37+
38+ - name : Install toolchain
39+ uses : dtolnay/rust-toolchain@stable
40+ with :
41+ targets : ${{ matrix.job.target }}
42+
43+ - name : Show version information (Rust, cargo, GCC)
44+ shell : bash
45+ run : |
46+ gcc --version || true
47+ rustup -V
48+ rustup toolchain list
49+ rustup default
50+ cargo -V
51+ rustc -V
52+
53+ - name : Install cross
54+ uses : taiki-e/install-action@v2
55+ with :
56+ tool : cross@0.2.5
57+
58+ - name : Build with cross
59+ run : cross build --release --target=${{ matrix.job.target }}
60+
61+ - name : Set binary name & path
62+ id : bin
63+ shell : bash
64+ run : |
65+ # Figure out suffix of binary
66+ EXE_suffix=""
67+ case ${{ matrix.job.target }} in
68+ *-pc-windows-*) EXE_suffix=".exe" ;;
69+ esac;
70+
71+ # Setup paths
72+ BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}"
73+ BIN_PATH="target/${{ matrix.job.target }}/release/${BIN_NAME}"
74+
75+ # Let subsequent steps know where to find the binary
76+ echo "BIN_PATH=${BIN_PATH}" >> $GITHUB_OUTPUT
77+ echo "BIN_NAME=${BIN_NAME}" >> $GITHUB_OUTPUT
78+
79+ - name : Create tarball
80+ id : package
81+ shell : bash
82+ run : |
83+ PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
84+ PKG_BASENAME=${PROJECT_NAME}-${PROJECT_VERSION}-${{ matrix.job.target }}
85+ PKG_NAME=${PKG_BASENAME}${PKG_suffix}
86+ echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT
87+ PKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/package"
88+ ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"
89+ mkdir -p "${ARCHIVE_DIR}"
90+
91+ # Binary
92+ cp "${{ steps.bin.outputs.BIN_PATH }}" "$ARCHIVE_DIR"
93+
94+ # README, LICENSE and CHANGELOG files
95+ cp "README.md" "LICENSE" "CHANGELOG.md" "$ARCHIVE_DIR"
96+
97+ # base compressed package
98+ pushd "${PKG_STAGING}/" >/dev/null
99+ case ${{ matrix.job.target }} in
100+ *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;;
101+ *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;;
102+ esac;
103+ popd >/dev/null
104+
105+ # Let subsequent steps know where to find the compressed package
106+ echo "PKG_PATH=${PKG_STAGING}/${PKG_NAME}" >> $GITHUB_OUTPUT
107+
108+ - name : " Artifact upload: tarball"
109+ uses : actions/upload-artifact@master
110+ with :
111+ name : ${{ steps.package.outputs.PKG_NAME }}
112+ path : ${{ steps.package.outputs.PKG_PATH }}
113+
114+ - name : Check for release
115+ id : is-release
116+ shell : bash
117+ run : |
118+ unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/[0-9].* ]]; then IS_RELEASE='true' ; fi
119+ echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT
120+
121+ - name : Publish archives and packages
122+ uses : softprops/action-gh-release@v2
123+ if : steps.is-release.outputs.IS_RELEASE
124+ with :
125+ files : |
126+ ${{ steps.package.outputs.PKG_PATH }}
127+ env :
128+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments