diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index acf1c6a..4ef6b2f 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,3 +1,10 @@ +# From https://github.com/BurntSushi/ripgrep/blob/master/.github/workflows/release.yml +# Which is also via https://eugene-babichenko.github.io/blog/2020/05/09/github-actions-cross-platform-auto-releases/ +# ...both of which are very good. +# +# I'm sure I don't need half the stuff I have in here (around cargo +# customization and whatnot) but. +# name: release on: @@ -46,6 +53,13 @@ jobs: needs: ['create_release'] # We need to know the upload URL runs-on: ${{ matrix.os }} # We run many different builds 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 @@ -74,26 +88,52 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Install packages (linux) - if: matrix.build == 'linux' - run: | - sudo apt-get update - sudo apt-get install -y pandoc - - - name: Install packages (macos) - if: matrix.build == 'macos' || matrix.build == 'arm-macos' - run: | - brew update - brew install pandoc - - - name: Install rust + - name: Install Rust uses: dtolnay/rust-toolchain@stable with: target: ${{ matrix.target }} - - name: Run the release automation + - name: Use Cross shell: bash + run: | + cargo install cross + echo "CARGO=cross" >> $GITHUB_ENV + echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV + echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV + + - name: Run the tests + run: ${{ env.CARGO }} test --verbose --release ${{ env.TARGET_FLAGS }} + + - name: Build release binary + run: ${{ env.CARGO }} build --verbose --release ${{ env.TARGET_FLAGS }} + + - name: Strip release binary (linux and macos) + if: matrix.build == 'linux' || matrix.build == 'macos' || matrix.build == 'arm-macos' + run: | + strip "target/${{ matrix.target }}/release/fwd" + strip "target/${{ matrix.target }}/release/fwd-browse" + + - name: Build archive + shell: bash + run: | + staging="fwd-${{ matrix.target }}" + mkdir -p "$staging" + + if [ "${{ matrix.os }}" = "windows-2022" ]; then + cp "target/${{ matrix.target }}/release/fwd.exe" "$staging/" + 7z a "$staging.zip" "$staging" + echo "ASSET=$staging.zip" >> $GITHUB_ENV + else + cp "target/${{ matrix.target }}/release/fwd" "$staging/" + cp "target/${{ matrix.target }}/release/fwd-browse" "$staging/" + tar czf "$staging.tar.gz" "$staging" + echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV + fi + + - name: Upload release archive env: - RELEASE_TAG: ${{ needs.create_release.outputs.version }} - BUILD: ${{ matrix.build }} - run: python3 release.py + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + version="${{ needs.create_release.outputs.version }}" + gh release upload "$version" ${{ env.ASSET }}