name: deploy
on:
push:
tags: '[0-9]+.[0-9]+.[0-9]+'
env:
CROSS_VERSION: 0.2.5
BOTAN_VERSION: 3.7.0
PROJECT_NAME: enprot
EXE_NAME: enprot
jobs:
checks:
name: Checks
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v7
- name: Check version
run: |
set -euxo pipefail
if [ "$(grep '^version' Cargo.toml | cut -d '"' -f2)" != "${GITHUB_REF#refs/tags/}" ]; then
echo "Version tag does not match manifest"
exit 1
fi
release-archive:
needs: [checks]
name: archive
timeout-minutes: 20
strategy:
matrix:
target:
- x86_64-unknown-linux-musl
- x86_64-apple-darwin
- x86_64-pc-windows-gnu
- x86_64-pc-windows-msvc
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
env:
TARGET: x86_64-unknown-linux-musl
PREFIX: /usr/local/x86_64-linux-musl
TARGET_CC: x86_64-linux-musl-gcc
TARGET_CXX: x86_64-linux-musl-g++
TARGET_AR: x86_64-linux-musl-gcc-ar
- os: macos-latest
target: x86_64-apple-darwin
env:
TARGET: x86_64-apple-darwin
PREFIX: /usr/local
- os: ubuntu-latest
target: x86_64-pc-windows-gnu
env:
TARGET: x86_64-pc-windows-gnu
TARGET_CC: x86_64-w64-mingw32-gcc-posix
TARGET_CXX: x86_64-w64-mingw32-g++-posix
TARGET_AR: x86_64-w64-mingw32-gcc-ar-posix
EXE_NAME: enprot.exe
- os: windows-latest
target: x86_64-pc-windows-msvc
env:
TARGET: x86_64-pc-windows-msvc
EXE_NAME: enprot.exe
GIT_REDIRECT_STDERR: '2>&1'
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- name: Set environment (unix)
if: "!startsWith(matrix.os, 'windows')"
env: ${{ matrix.env }}
run: |
set -euxo pipefail
echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
echo "PREFIX=${PREFIX-$GITHUB_WORKSPACE/installs}" >> $GITHUB_ENV
echo "EXE_PATH=target/$TARGET/release/$EXE_NAME" >> $GITHUB_ENV
- name: Set environment (windows)
if: startsWith(matrix.os, 'windows')
env: ${{ matrix.env }}
run: |
Set-StrictMode -Version 3.0
Set-PSDebug -Trace 2
"RELEASE_TAG=$($Env:GITHUB_REF.Replace('refs/tags/', ''))" | Out-File -Append -Encoding UTF8 -LiteralPath $Env:GITHUB_ENV
"PREFIX=$($($PWD -join 'installs').Replace('\', '/'))" | Out-File -Append -Encoding UTF8 -LiteralPath $Env:GITHUB_ENV
"EXE_PATH=target/$Env:TARGET/release/$Env:EXE_NAME" | Out-File -Append -Encoding UTF8 -LiteralPath $Env:GITHUB_ENV
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
target: ${{ matrix.env.TARGET }}
- name: Install python (windows)
if: startsWith(matrix.os, 'windows')
uses: actions/setup-python@v7
with:
python-version: '3.x'
- name: Build (unix)
if: "!startsWith(matrix.os, 'windows')"
env: ${{ matrix.env }}
run: |
set -euxo pipefail
. ci/build-static.sh
- name: Build (windows)
if: startsWith(matrix.os, 'windows')
env: ${{ matrix.env }}
shell: powershell
run: |
Set-StrictMode -Version 3.0
Set-PSDebug -Trace 2
. .\ci\build-static.ps1
- name: Archive (unix)
if: "!startsWith(matrix.os, 'windows')"
env: ${{ matrix.env }}
run: |
set -euxo pipefail
. ci/archive.sh
- name: Archive (windows)
if: startsWith(matrix.os, 'windows')
env: ${{ matrix.env }}
shell: powershell
run: |
Set-StrictMode -Version 3.0
Set-PSDebug -Trace 2
. .\ci\archive.ps1
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: archives
path: archives
github-release:
name: github release
needs: [release-archive]
runs-on: ubuntu-latest
steps:
- name: Download artifacts
uses: actions/download-artifact@v8
with:
name: archives
- name: Create release
env:
GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euxo pipefail
RELEASE_TAG=${GITHUB_REF#refs/tags/}
git clone https://github.com/riboseinc/create-github-release
cd create-github-release
sudo apt-get -y install ruby
export GEM_HOME="$(ruby -e 'print Gem.user_dir')"
export PATH="$PATH:$GEM_HOME/bin"
gem install --no-document bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"
bundle install
bundle exec ./create-github-release.rb \
${{ github.repository }} \
"$RELEASE_TAG" \
../archives/*
publish-crate:
name: crates.io
needs: [checks]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Publish
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: |
cargo publish --no-verify
publish-snap:
name: snap
needs: [checks]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Install snapcraft
uses: snapcore/action-build@v1
with:
snapcraft_token: ${{ secrets.SNAPCRAFT_RELEASE_LOGIN }}
- name: Install review-tools
run: sudo snap install review-tools
- name: Build
run: |
RELEASE_TAG="${GITHUB_REF#refs/tags/}"
sed -i "s/RELEASE_TAG/${RELEASE_TAG}/g" snap/snapcraft.yaml
sg lxd -c 'snapcraft --use-lxd'
- name: Publish
uses: snapcore/action-publish@v1
with:
store_token: ${{ secrets.SNAPCRAFT_RELEASE_LOGIN }}
snap: ${{ steps.build.outputs.snap }}
release: stable