Release #107
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
permissions: | |
contents: write | |
on: | |
push: | |
tags: | |
# Regex for a version number such as 0.1.0 | |
- "[0-9]+.[0-9]+.[0-9]+" | |
# Regex for a prerelease such as 0.1.1rc1 | |
- '[0-9]+.[0-9]+.[0-9]+rc[0-9]+' | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
lint-and-test: | |
name: Lint, audit and test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Get the release version from the tag | |
shell: bash | |
run: | | |
set +e | |
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
if echo "${GITHUB_REF#refs/tags/}" | grep -q "rc"; then | |
echo "PRERELEASE=true" >> $GITHUB_ENV | |
else | |
echo "PRERELEASE=false" >> $GITHUB_ENV | |
fi | |
- name: Check release version | |
shell: bash | |
run: | | |
set +e | |
if ${{ env.PRERELEASE }}; then | |
exit 0 | |
fi | |
grep -q ${{ env.VERSION }} .github/ISSUE_TEMPLATE/BUG_REPORT.yaml | |
if [ $? -ne 0 ]; then | |
echo "BUG_REPORT.yaml should contain a new release version in goral_version dropdown" | |
exit 1 | |
fi | |
grep -q ${{ env.VERSION }} .github/site/src/install.sh | |
if [ $? -ne 0 ]; then | |
echo "install.sh should contain a new release version" | |
exit 1 | |
fi | |
grep -q ${{ env.VERSION }} Cargo.toml | |
if [ $? -ne 0 ]; then | |
echo "Cargo.toml should contain a new release version" | |
exit 1 | |
fi | |
grep -q ${{ env.VERSION }} CHANGELOG.md | |
if [ $? -ne 0 ]; then | |
echo "CHANGELOG.md should contain a new release version" | |
exit 1 | |
fi | |
grep -q ${{ env.VERSION }} .github/site/src/installation.md | |
if [ $? -ne 0 ]; then | |
echo "installation.md should contain a new release version" | |
exit 1 | |
fi | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: x86_64-unknown-linux-gnu | |
- name: Check fmt | |
shell: bash | |
run: | | |
cargo fmt --all -- --check | |
- name: Run clippy | |
shell: bash | |
run: | | |
cargo clippy -- -D warnings | |
- name: Install audit | |
shell: bash | |
run: | | |
cargo install cargo-deny | |
- name: Security audit, licenses | |
shell: bash | |
run: | | |
cargo deny check licenses advisories sources | |
- name: Test | |
shell: bash | |
run: | | |
cargo test -- --nocapture | |
build-and-upload: | |
name: Build and upload | |
runs-on: ${{ matrix.os }} | |
needs: lint-and-test | |
strategy: | |
matrix: | |
include: | |
- build: linux | |
os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
- build: linux-aarch64 | |
os: ubuntu-latest | |
target: aarch64-unknown-linux-gnu | |
- build: windows-gnu | |
os: windows-latest | |
target: x86_64-pc-windows-gnu | |
- build: mac-m1 | |
os: macos-14 | |
target: aarch64-apple-darwin | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Get the release version from the tag | |
shell: bash | |
run: | | |
set +e | |
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
if echo "${GITHUB_REF#refs/tags/}" | grep -q "rc"; then | |
echo "PRERELEASE=true" >> $GITHUB_ENV | |
else | |
echo "PRERELEASE=false" >> $GITHUB_ENV | |
fi | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install additional deps | |
shell: bash | |
run: | | |
if [ "${{ matrix.target }}" = "aarch64-unknown-linux-gnu" ]; then | |
sudo apt-get update | |
sudo apt-get install --no-install-recommends -y libc6-dev-arm64-cross gcc-aarch64-linux-gnu | |
fi | |
- name: Install target | |
shell: bash | |
run: | | |
if [ "${{ matrix.target }}" = "x86_64-unknown-linux-gnu" ]; then | |
exit 0 | |
fi | |
rustup target add ${{ matrix.target }} | |
- name: Build | |
shell: bash | |
run: | | |
if [ "${{ matrix.target }}" = "aarch64-unknown-linux-gnu" ]; then | |
CC=aarch64-linux-gnu-gcc RUSTFLAGS="-C target-feature=+crt-static -C linker=aarch64-linux-gnu-gcc" cargo build --verbose --release --target ${{ matrix.target }} | |
else | |
RUSTFLAGS="-C target-feature=+crt-static" cargo build --verbose --release --target ${{ matrix.target }} | |
fi | |
- name: Build archive | |
shell: bash | |
run: | | |
if [ "${{ matrix.target }}" = "x86_64-pc-windows-gnu" ]; then | |
binary_name="goral.exe" | |
else | |
binary_name="goral" | |
fi | |
dirname="$binary_name-${{ env.VERSION }}-${{ matrix.target }}" | |
mkdir "$dirname" | |
mv "target/${{ matrix.target }}/release/$binary_name" "$dirname" | |
if [ "${{ matrix.target }}" = "x86_64-pc-windows-gnu" ]; then | |
certutil -hashfile "$dirname/$binary_name" SHA256 > sha256_checksum.txt | |
else | |
shasum -a 256 "$dirname/$binary_name" > sha256_checksum.txt | |
fi | |
mv sha256_checksum.txt "$dirname" | |
tar -czf "$dirname.tar.gz" "$dirname" | |
echo "ASSET=$dirname.tar.gz" >> $GITHUB_ENV | |
- name: Save Release URL File for publish | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.ASSET }} | |
path: ${{ env.ASSET }} | |
retention-days: 1 | |
prepare-release: | |
name: Release | |
runs-on: ubuntu-latest | |
needs: build-and-upload | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Get the release version from the tag | |
shell: bash | |
run: | | |
set +e | |
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
if echo "${GITHUB_REF#refs/tags/}" | grep -q "rc"; then | |
echo "PRERELEASE=true" >> $GITHUB_ENV | |
else | |
echo "PRERELEASE=false" >> $GITHUB_ENV | |
fi | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: ./artifacts | |
merge-multiple: true | |
- name: Generate Changelog | |
shell: bash | |
run: | | |
if ${{ env.PRERELEASE }}; then | |
echo "This is a prerelease for testing purposes. For production please use the latest stable release." > ${{ env.VERSION }}-CHANGELOG.txt | |
else | |
echo "$(grep -A10000 ${{ env.VERSION }} CHANGELOG.md | grep -B10000 -m2 -P "[0-9]+\.[0-9]+\.[0-9]+" CHANGELOG.md | grep "\S" | grep -v -E "[0-9]+\.[0-9]+\.[0-9]+")" > ${{ env.VERSION }}-CHANGELOG.txt | |
echo '' >> ${{ env.VERSION }}-CHANGELOG.txt | |
echo -E 'To update `curl --proto '=https' --tlsv1.2 -sSf https://maksimryndin.github.io/goral/install.sh | sh`' >> ${{ env.VERSION }}-CHANGELOG.txt | |
fi | |
- name: Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
body_path: ${{ env.VERSION }}-CHANGELOG.txt | |
prerelease: ${{ env.PRERELEASE }} | |
files: | | |
./artifacts/* |