Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to '.github/workflows/release.yml')
| -rw-r--r-- | .github/workflows/release.yml | 268 |
1 files changed, 65 insertions, 203 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7331a2dc..d954385e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,98 +1,46 @@ name: Release on: + # schedule: + # - cron: '0 0 * * *' # midnight UTC + push: 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' }} + - 'v[0-9]+.[0-9]+.[0-9]+' + ## - release jobs: - fetch-grammars: - name: Fetch Grammars - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v5 - - - name: Install stable toolchain - uses: dtolnay/rust-toolchain@stable - - - uses: Swatinem/rust-cache@v2 - - - name: Fetch tree-sitter grammars - run: cargo run --package=helix-loader --bin=hx-loader - - - name: Bundle grammars - run: tar cJf grammars.tar.xz -C runtime/grammars/sources . - - - uses: actions/upload-artifact@v5 - with: - name: grammars - path: grammars.tar.xz - 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, aarch64-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 + os: ubuntu-20.04 rust: stable target: aarch64-unknown-linux-gnu - cross: false + 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,127 +52,55 @@ jobs: steps: - name: Checkout sources - uses: actions/checkout@v5 - - - name: Download grammars - uses: actions/download-artifact@v6 - - - 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 + uses: actions/checkout@v3 - 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 }} - - - 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 - if [[ $GITHUB_REF == refs/tags/* ]]; then - name=${GITHUB_REF:10} - fi - - build="${{ matrix.build }}" - - export VERSION="$name" - export ARCH=${build%-linux} - 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" - rm -rf runtime/grammars/sources - cp -r runtime "$APP.AppDir/usr/lib/helix/runtime" - - cat << 'EOF' > "$APP.AppDir/AppRun" - #!/bin/sh - - APPDIR="$(dirname "$(readlink -f "${0}")")" - HELIX_RUNTIME="$APPDIR/usr/lib/helix/runtime" exec "$APPDIR/usr/bin/hx" "$@" - EOF - chmod 755 "$APP.AppDir/AppRun" - - curl -Lo linuxdeploy-x86_64.AppImage \ - https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage - chmod +x linuxdeploy-x86_64.AppImage - - ./linuxdeploy-x86_64.AppImage \ - --appdir "$APP.AppDir" -d contrib/Helix.desktop \ - -i contrib/helix.png --output appimage + uses: actions-rs/cargo@v1 + with: + use-cross: ${{ matrix.cross }} + command: build + args: --release --locked --target ${{ matrix.target }} - mv "$APP-$VERSION-$ARCH.AppImage" \ - "$APP-$VERSION-$ARCH.AppImage.zsync" dist + - 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: Build Deb - shell: bash - if: matrix.build == 'x86_64-linux' + - name: Strip release binary (arm) + if: matrix.build == 'aarch64-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/ + docker run --rm -v \ + "$PWD/target:/target:Z" \ + rustembedded/cross:${{ matrix.target }} \ + aarch64-linux-gnu-strip \ + /target/${{ matrix.target }}/release/hx - name: Build archive shell: bash run: | - mkdir -p dist - if [ "${{ matrix.os }}" = "windows-latest" ]; then - cp "target/${{ matrix.target }}/opt/hx.exe" "dist/" + mkdir dist + if [ "${{ matrix.os }}" = "windows-2019" ]; then + cp "target/${{ matrix.target }}/release/hx.exe" "dist/" else - cp "target/${{ matrix.target }}/opt/hx" "dist/" - fi - if [ -d runtime/grammars/sources ]; then - rm -rf runtime/grammars/sources + cp "target/${{ matrix.target }}/release/hx" "dist/" fi cp -r runtime dist - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@v3 with: name: bins-${{ matrix.build }} path: dist @@ -235,23 +111,27 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sources - uses: actions/checkout@v5 + uses: actions/checkout@v3 + + - uses: actions/download-artifact@v2 - - uses: actions/download-artifact@v6 + - name: Calculate tag name + run: | + name=dev + if [[ $GITHUB_REF == refs/tags/v* ]]; then + name=${GITHUB_REF:10} + fi + echo ::set-output name=val::$name + echo TAG=$name >> $GITHUB_ENV + id: tagname - name: Build archive shell: bash run: | 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 - - cd "$(mktemp -d)" - mv $source/bins-* . + rm -rf tmp + mkdir tmp mkdir dist for dir in bins-* ; do @@ -259,43 +139,25 @@ jobs: if [[ $platform =~ "windows" ]]; then exe=".exe" fi - pkgname=helix-$tag-$platform - mkdir -p $pkgname - cp $source/LICENSE $source/README.md $pkgname - mkdir $pkgname/contrib - cp -r $source/contrib/completion $pkgname/contrib - mv bins-$platform/runtime $pkgname/ - mv bins-$platform/hx$exe $pkgname - chmod +x $pkgname/hx$exe - - if [[ "$platform" = "x86_64-linux" ]]; then - mv bins-$platform/helix-*.AppImage* dist/ - mv bins-$platform/*.deb dist/ - fi + pkgname=helix-$TAG-$platform + mkdir tmp/$pkgname + cp LICENSE README.md tmp/$pkgname + mv bins-$platform/runtime tmp/$pkgname/ + mv bins-$platform/hx$exe tmp/$pkgname + chmod +x tmp/$pkgname/hx$exe if [ "$exe" = "" ]; then - tar cJf dist/$pkgname.tar.xz $pkgname + tar cJf dist/$pkgname.tar.xz -C tmp $pkgname else - 7z a -r dist/$pkgname.zip $pkgname + (cd tmp && 7z a -r ../dist/$pkgname.zip $pkgname) fi done - 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/* |