Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to '.github/workflows/release.yml')
-rw-r--r--.github/workflows/release.yml211
1 files changed, 95 insertions, 116 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7331a2dc..30f8ccc7 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -4,18 +4,6 @@ on:
tags:
- '[0-9]+.[0-9]+'
- '[0-9]+.[0-9]+.[0-9]+'
- branches:
- - 'patch/ci-release-*'
- pull_request:
- paths:
- - '.github/workflows/release.yml'
-
-env:
- # Preview mode: Publishes the build output as a CI artifact instead of creating
- # a release, allowing for manual inspection of the output. This mode is
- # activated if the CI run was triggered by events other than pushed tags, or
- # if the repository is a fork.
- preview: ${{ !startsWith(github.ref, 'refs/tags/') || github.repository != 'helix-editor/helix' }}
jobs:
fetch-grammars:
@@ -23,20 +11,48 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
- uses: actions/checkout@v5
+ uses: actions/checkout@v3
- name: Install stable toolchain
- uses: dtolnay/rust-toolchain@stable
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+
+ - name: Cache cargo registry
+ uses: actions/cache@v3
+ with:
+ path: ~/.cargo/registry
+ key: ${{ runner.os }}-v2-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
+ restore-keys: ${{ runner.os }}-v2-cargo-registry-
- - uses: Swatinem/rust-cache@v2
+ - name: Cache cargo index
+ uses: actions/cache@v3
+ with:
+ path: ~/.cargo/git
+ key: ${{ runner.os }}-v2-cargo-index-${{ hashFiles('**/Cargo.lock') }}
+ restore-keys: ${{ runner.os }}-v2-cargo-index-
+
+ - name: Cache cargo target dir
+ uses: actions/cache@v3
+ with:
+ path: target
+ key: ${{ runner.os }}-v2-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
+ restore-keys: ${{ runner.os }}-v2-cargo-build-target-
- name: Fetch tree-sitter grammars
- run: cargo run --package=helix-loader --bin=hx-loader
+ uses: actions-rs/cargo@v1
+ env:
+ HELIX_DISABLE_AUTO_GRAMMAR_BUILD: yes
+ with:
+ command: run
+ args: -- --grammar fetch
- name: Bundle grammars
run: tar cJf grammars.tar.xz -C runtime/grammars/sources .
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v3
with:
name: grammars
path: grammars.tar.xz
@@ -44,55 +60,36 @@ jobs:
dist:
name: Dist
needs: [fetch-grammars]
- env:
- # For some builds, we use cross to test on 32-bit and big-endian
- # systems.
- CARGO: cargo
- # When CARGO is set to CROSS, this is set to `--target matrix.target`.
- TARGET_FLAGS:
- # When CARGO is set to CROSS, TARGET_DIR includes matrix.target.
- TARGET_DIR: ./target
- # Emit backtraces on panics.
- RUST_BACKTRACE: 1
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false # don't fail other jobs if one fails
matrix:
- build: [x86_64-linux, aarch64-linux, x86_64-macos, x86_64-windows, aarch64-macos] #, x86_64-win-gnu, win32-msvc
+ build: [x86_64-linux, x86_64-macos, x86_64-windows] #, x86_64-win-gnu, win32-msvc
include:
- build: x86_64-linux
- # WARN: When changing this to a newer version, make sure that the GLIBC isnt too new, as this can cause issues
- # with portablity on older systems that dont follow ubuntus more rapid release cadence.
- os: ubuntu-22.04
+ os: ubuntu-20.04
rust: stable
target: x86_64-unknown-linux-gnu
cross: false
- - build: aarch64-linux
- # Version should be kept in lockstep with the x86_64 version
- os: ubuntu-22.04-arm
- rust: stable
- target: aarch64-unknown-linux-gnu
- cross: false
+ # - build: aarch64-linux
+ # os: ubuntu-20.04
+ # rust: stable
+ # target: aarch64-unknown-linux-gnu
+ # cross: true
- build: x86_64-macos
os: macos-latest
rust: stable
target: x86_64-apple-darwin
cross: false
- build: x86_64-windows
- os: windows-latest
+ os: windows-2019
rust: stable
target: x86_64-pc-windows-msvc
cross: false
- - build: aarch64-macos
- os: macos-latest
- rust: stable
- target: aarch64-apple-darwin
- cross: false
- # - build: riscv64-linux
- # os: ubuntu-22.04
+ # - build: aarch64-macos
+ # os: macos-latest
# rust: stable
- # target: riscv64gc-unknown-linux-gnu
- # cross: true
+ # target: aarch64-apple-darwin
# - build: x86_64-win-gnu
# os: windows-2019
# rust: stable-x86_64-gnu
@@ -104,61 +101,56 @@ jobs:
steps:
- name: Checkout sources
- uses: actions/checkout@v5
+ uses: actions/checkout@v3
- name: Download grammars
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v3
- name: Move grammars under runtime
if: "!startsWith(matrix.os, 'windows')"
run: |
mkdir -p runtime/grammars/sources
- tar xJf grammars.tar.xz -C runtime/grammars/sources
-
- # The rust-toolchain action ignores rust-toolchain.toml files.
- # Removing this before building with cargo ensures that the rust-toolchain
- # is considered the same between installation and usage.
- - name: Remove the rust-toolchain.toml file
- run: rm rust-toolchain.toml
+ tar xJf grammars/grammars.tar.xz -C runtime/grammars/sources
- name: Install ${{ matrix.rust }} toolchain
- uses: dtolnay/rust-toolchain@master
+ uses: actions-rs/toolchain@v1
with:
+ profile: minimal
toolchain: ${{ matrix.rust }}
target: ${{ matrix.target }}
-
- # Install a pre-release version of Cross
- # TODO: We need to pre-install Cross because we need cross-rs/cross#591 to
- # get a newer C++ compiler toolchain. Remove this step when Cross
- # 0.3.0, which includes cross-rs/cross#591, is released.
- - 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
- # echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV
- # echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV
-
- - name: Show command used for Cargo
- run: |
- echo "cargo command is: ${{ env.CARGO }}"
- echo "target flag is: ${{ env.TARGET_FLAGS }}"
+ override: true
- name: Run cargo test
- if: "!matrix.skip_tests"
- run: ${{ env.CARGO }} test --release --locked --target ${{ matrix.target }} --workspace
+ uses: actions-rs/cargo@v1
+ with:
+ use-cross: ${{ matrix.cross }}
+ command: test
+ args: --release --locked --target ${{ matrix.target }} --workspace
- name: Build release binary
- run: ${{ env.CARGO }} build --profile opt --locked --target ${{ matrix.target }}
+ uses: actions-rs/cargo@v1
+ with:
+ use-cross: ${{ matrix.cross }}
+ command: build
+ args: --release --locked --target ${{ matrix.target }}
+
+ - name: Strip release binary (linux and macos)
+ if: matrix.build == 'x86_64-linux' || matrix.build == 'x86_64-macos'
+ run: strip "target/${{ matrix.target }}/release/hx"
+
+ - name: Strip release binary (arm)
+ if: matrix.build == 'aarch64-linux'
+ run: |
+ docker run --rm -v \
+ "$PWD/target:/target:Z" \
+ rustembedded/cross:${{ matrix.target }} \
+ aarch64-linux-gnu-strip \
+ /target/${{ matrix.target }}/release/hx
- name: Build AppImage
shell: bash
if: matrix.build == 'x86_64-linux'
run: |
- # Required as of 22.x https://github.com/AppImage/AppImageKit/wiki/FUSE
- sudo add-apt-repository universe
- sudo apt install libfuse2
-
mkdir dist
name=dev
@@ -166,17 +158,15 @@ jobs:
name=${GITHUB_REF:10}
fi
- build="${{ matrix.build }}"
-
export VERSION="$name"
- export ARCH=${build%-linux}
+ export ARCH=x86_64
export APP=helix
export OUTPUT="helix-$VERSION-$ARCH.AppImage"
export UPDATE_INFORMATION="gh-releases-zsync|$GITHUB_REPOSITORY_OWNER|helix|latest|$APP-*-$ARCH.AppImage.zsync"
mkdir -p "$APP.AppDir"/usr/{bin,lib/helix}
- cp "target/${{ matrix.target }}/opt/hx" "$APP.AppDir/usr/bin/hx"
+ cp "target/${{ matrix.target }}/release/hx" "$APP.AppDir/usr/bin/hx"
rm -rf runtime/grammars/sources
cp -r runtime "$APP.AppDir/usr/lib/helix/runtime"
@@ -199,32 +189,21 @@ jobs:
mv "$APP-$VERSION-$ARCH.AppImage" \
"$APP-$VERSION-$ARCH.AppImage.zsync" dist
- - name: Build Deb
- shell: bash
- if: matrix.build == 'x86_64-linux'
- run: |
- cargo install cargo-deb
- mkdir -p target/release
- cp target/${{ matrix.target }}/opt/hx target/release/
- cargo deb --no-build
- mkdir -p dist
- mv target/debian/*.deb dist/
-
- name: Build archive
shell: bash
run: |
mkdir -p dist
- if [ "${{ matrix.os }}" = "windows-latest" ]; then
- cp "target/${{ matrix.target }}/opt/hx.exe" "dist/"
+ if [ "${{ matrix.os }}" = "windows-2019" ]; then
+ cp "target/${{ matrix.target }}/release/hx.exe" "dist/"
else
- cp "target/${{ matrix.target }}/opt/hx" "dist/"
+ cp "target/${{ matrix.target }}/release/hx" "dist/"
fi
if [ -d runtime/grammars/sources ]; then
rm -rf runtime/grammars/sources
fi
cp -r runtime dist
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v3
with:
name: bins-${{ matrix.build }}
path: dist
@@ -235,9 +214,19 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
- uses: actions/checkout@v5
+ uses: actions/checkout@v3
+
+ - uses: actions/download-artifact@v3
- - uses: actions/download-artifact@v6
+ - name: Calculate tag name
+ run: |
+ name=dev
+ if [[ $GITHUB_REF == refs/tags/* ]]; then
+ name=${GITHUB_REF:10}
+ fi
+ echo ::set-output name=val::$name
+ echo TAG=$name >> $GITHUB_ENV
+ id: tagname
- name: Build archive
shell: bash
@@ -245,7 +234,6 @@ jobs:
set -ex
source="$(pwd)"
- tag=${GITHUB_REF_NAME//\//}
mkdir -p runtime/grammars/sources
tar xJf grammars/grammars.tar.xz -C runtime/grammars/sources
rm -rf grammars
@@ -259,8 +247,8 @@ jobs:
if [[ $platform =~ "windows" ]]; then
exe=".exe"
fi
- pkgname=helix-$tag-$platform
- mkdir -p $pkgname
+ pkgname=helix-$TAG-$platform
+ mkdir $pkgname
cp $source/LICENSE $source/README.md $pkgname
mkdir $pkgname/contrib
cp -r $source/contrib/completion $pkgname/contrib
@@ -270,7 +258,6 @@ jobs:
if [[ "$platform" = "x86_64-linux" ]]; then
mv bins-$platform/helix-*.AppImage* dist/
- mv bins-$platform/*.deb dist/
fi
if [ "$exe" = "" ]; then
@@ -280,22 +267,14 @@ jobs:
fi
done
- tar cJf dist/helix-$tag-source.tar.xz -C $source .
+ tar cJf dist/helix-$TAG-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 }}
+ tag: ${{ steps.tagname.outputs.val }}
overwrite: true
-
- - name: Upload binaries as artifact
- uses: actions/upload-artifact@v5
- if: env.preview == 'true'
- with:
- name: release
- path: dist/*