ci: add release workflow #16
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
# A huge thanks to the helix-editor project for this | |
# If you're here for inspiration, please go to the original source | |
# https://github.com/helix-editor/helix/blob/master/.github/workflows/release.yml#L14-L18 | |
name: Release | |
on: | |
push: | |
tags: | |
- "[0-9]+.[0-9]+.[0-9]+" | |
branches: | |
- "ci-*" | |
pull_request: | |
paths: | |
- ".github/workflows/release.yml" | |
env: | |
preview: ${{ !startsWith(github.ref, 'refs/tags/') || github.repository != 'github-language-server/github-lsp' }} | |
jobs: | |
dist: | |
name: Dist | |
env: | |
CARGO: cargo | |
TARGET_DIR: ./target | |
RUST_BACKTRACE: 1 | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false # don't fail other jobs if one fails | |
matrix: | |
build: [x86_64-linux, x86_64-macos, x86_64-windows] #, x86_64-win-gnu, win32-msvc | |
include: | |
- build: x86_64-linux | |
os: ubuntu-latest | |
rust: stable | |
target: x86_64-unknown-linux-gnu | |
cross: false | |
skip_tests: false | |
- build: aarch64-linux | |
os: ubuntu-latest | |
rust: stable | |
target: aarch64-unknown-linux-gnu | |
cross: true | |
skip_tests: false | |
- build: x86_64-macos | |
os: macos-latest | |
rust: stable | |
target: x86_64-apple-darwin | |
cross: false | |
skip_tests: false | |
- build: x86_64-windows | |
os: windows-latest | |
rust: stable | |
target: x86_64-pc-windows-msvc | |
cross: false | |
skip_tests: false | |
- build: aarch64-macos | |
os: macos-latest | |
rust: stable | |
target: aarch64-apple-darwin | |
cross: false | |
skip_tests: true | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Install ${{ matrix.rust }} toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
target: ${{ matrix.target }} | |
- name: Install ssl | |
if: "matrix.build == 'aarch64-linux'" | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install pkg-config libudev-dev libssl-dev | |
- name: Install Cross | |
if: "matrix.cross" | |
run: | | |
cargo install cross --git https://github.com/cross-rs/cross.git --rev 47df5c76e7cba682823a0b6aa6d95c17b31ba63a | |
echo "CARGO=cross" >> $GITHUB_ENV | |
- name: Run cargo test | |
if: "!matrix.skip_tests" | |
run: ${{ env.CARGO }} test --release --locked --target ${{ matrix.target }} --workspace | |
- name: Set profile.release.strip = true | |
shell: bash | |
run: | | |
cat >> .cargo/config.toml <<EOF | |
[profile.release] | |
strip = true | |
EOF | |
- name: Build release binary | |
run: ${{ env.CARGO }} build --release --locked --target ${{ matrix.target }} | |
- name: Build archive | |
shell: bash | |
run: | | |
mkdir -p dist | |
if [ "${{ matrix.os }}" = "windows-2019" ]; then | |
cp "target/${{ matrix.target }}/release/github-lsp.exe" "dist/" | |
else | |
cp "target/${{ matrix.target }}/release/github-lsp" "dist/" | |
fi | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: bins-${{ matrix.build }} | |
path: dist | |
publish: | |
name: Publish | |
needs: [dist] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
- name: Build archive | |
shell: bash | |
run: | | |
set -ex | |
source="$(pwd)" | |
cd "$(mktemp -d)" | |
mv $source/bins-* . | |
mkdir dist | |
for dir in bins-* ; do | |
platform=${dir#"bins-"} | |
if [[ $platform =~ "windows" ]]; then | |
exe=".exe" | |
fi | |
pkgname=github-lsp-$GITHUB_REF_NAME-$platform | |
mkdir -p $pkgname | |
cp $source/LICENSE $source/README.md $pkgname | |
mkdir $pkgname/contrib | |
cp -r $source/contrib/completion $pkgname/contrib | |
mv bins-$platform/github-lsp$exe $pkgname | |
chmod +x $pkgname/github-lsp$exe | |
if [[ "$platform" = "x86_64-linux" ]]; then | |
mv bins-$platform/github-lsp-*.AppImage* dist/ | |
fi | |
if [ "$exe" = "" ]; then | |
tar cJf dist/$pkgname.tar.xz $pkgname | |
else | |
7z a -r dist/$pkgname.zip $pkgname | |
fi | |
done | |
tar cJf dist/github-lsp-$GITHUB_REF_NAME-source.tar.xz -C $source . | |
mv dist $source/ | |
- name: Upload binaries to release | |
uses: svenstaro/upload-release-action@v2 | |
if: env.preview == 'false' | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: dist/* | |
file_glob: true | |
tag: ${{ github.ref_name }} | |
overwrite: true | |
- name: Upload binaries as artifact | |
uses: actions/upload-artifact@v4 | |
if: env.preview == 'true' | |
with: | |
name: release | |
path: dist/* |