Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to '.github/workflows/release.yml')
| -rw-r--r-- | .github/workflows/release.yml | 211 |
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/* |