diff options
| author | Ellie Huxtable <ellie@elliehuxtable.com> | 2024-06-05 13:25:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-05 13:25:01 +0100 |
| commit | 7ec002ba4476276a4f5a49ed9d3e4b6cf6a53928 (patch) | |
| tree | e7f9149b0f2bfcfff9c37d08757e9f636eabba37 /.github/workflows/release.yaml | |
| parent | fix: Replace serde_yaml::to_string with serde_json::to_string_yaml (#2087) (diff) | |
| download | atuin-7ec002ba4476276a4f5a49ed9d3e4b6cf6a53928.zip | |
chore: switch to cargo dist for releases (#2085)
* chore: switch to cargo dist for releases
From https://axo.dev
cargo-dist handles building releases far better than we can, and do so
for several large projects now.
We will need to change our install script to use the cargo-dist
installer.
Historically, we have used the system package manager wherever possible.
Once switched to the new installer, this will no longer be the case. If
the user wishes to use their package manager, and Atuin is maintained
there, then they can choose to do so.
This way, we can ensure that users are running a known build, can easily
uninstall (just delete the atuin dir), easily update, etc. Builds will
use our lockfile, and can have their checksum verified. Later, I'd like
to introduce build signing.
As Axo are focused on release engineering, they will likely have
resolved many more issues than we have - libc versions, etc.
I'm not particularly happy with our response of "just use your package
manager", as many users seem to have difficulty there. It's unclear what
our installer has done, as this behaviour varies massively across
systems. It's also unclear how some package maintainers may have patched
things
I'm hoping that some better release tooling will lead to more confidence
in the process, and therefore more frequent releases.
Uninstall clarity: #111, #372, #640, #1485, #1546, #2049, #1529
* config
* add protobuf
* test build
* use native arm mac
* lol
* add toolchain
* use 1.78, 2vcpu
* nix flake update
* 1.77
Diffstat (limited to '.github/workflows/release.yaml')
| -rw-r--r-- | .github/workflows/release.yaml | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index 2522cf81..00000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,223 +0,0 @@ -name: Release - -env: - MIN_SUPPORTED_RUST_VERSION: "1.51.0" - CICD_INTERMEDIATES_DIR: "_cicd-intermediates" - -on: - workflow_dispatch: - inputs: - tag: - description: 'Tag to build release binaries for' - required: true - type: string - push: - tags: - - "v*" - - release: - types: [created] - -jobs: - build: - name: ${{ matrix.job.os }} (${{ matrix.job.target }}) - runs-on: ${{ matrix.job.os }} - strategy: - fail-fast: false - matrix: - job: - - { os: ubuntu-20.04 , target: x86_64-unknown-linux-musl } - - { os: ubuntu-20.04 , target: x86_64-unknown-linux-gnu } - - { os: ubuntu-20.04 , target: aarch64-unknown-linux-gnu } - - { os: macos-12 , target: x86_64-apple-darwin } - - { os: macos-14 , target: aarch64-apple-darwin } - steps: - - name: Check for release - id: is-release - shell: bash - run: | - unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi - echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT - - - name: Checkout source code - if: steps.is-release.outputs.IS_RELEASE - uses: actions/checkout@v3 - - - name: Checkout source code - if: ${{ !steps.is-release.outputs.IS_RELEASE }} - uses: actions/checkout@v3 - with: - ref: ${{ inputs.tag }} - - - name: Install prerequisites - shell: bash - run: | - case ${{ matrix.job.target }} in - arm-unknown-linux-gnueabihf) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;; - aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu qemu-user;; - x86_64-unknown-linux-musl) sudo apt-get -y update ; sudo apt-get -y install musl-tools ;; - esac - - - name: Extract crate information - shell: bash - run: | - echo "PROJECT_NAME=$(sed -n 's/^name = "\(.*\)"/\1/p' crates/atuin/Cargo.toml)" >> $GITHUB_ENV - echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV - echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV - echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: stable - targets: ${{ matrix.job.target }} - override: true - profile: minimal # minimal component installation (ie, no documentation) - - - name: Install Protoc - uses: arduino/setup-protoc@v3 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Show version information (Rust, cargo, GCC) - shell: bash - run: | - gcc --version || true - rustup -V - rustup toolchain list - rustup default - cargo -V - rustc -V - - - name: Build - run: | - case ${{ matrix.job.target }} in - aarch64-unknown-linux-gnu) export RUSTFLAGS="-C linker=aarch64-linux-gnu-gcc";; - esac; - cargo build --locked --release --target=${{ matrix.job.target }} - - - name: Strip debug information from executable - id: strip - shell: bash - run: | - # Figure out suffix of binary - EXE_suffix="" - case ${{ matrix.job.target }} in - *-pc-windows-*) EXE_suffix=".exe" ;; - esac; - - # Figure out what strip tool to use if any - # musl builds use the default strip - STRIP="strip" - case ${{ matrix.job.target }} in - arm-unknown-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;; - aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;; - *-pc-windows-msvc) STRIP="" ;; - esac; - - # Setup paths - BIN_DIR="${{ env.CICD_INTERMEDIATES_DIR }}/stripped-release-bin/" - mkdir -p "${BIN_DIR}" - BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}" - BIN_PATH="${BIN_DIR}${BIN_NAME}" - - # Copy the release build binary to the result location - cp "target/${{ matrix.job.target }}/release/${BIN_NAME}" "${BIN_DIR}" - - # Also strip if possible - if [ -n "${STRIP}" ]; then - "${STRIP}" "${BIN_PATH}" - fi - - # Let subsequent steps know where to find the (stripped) bin - echo "BIN_PATH=${BIN_PATH}" >> "$GITHUB_OUTPUT" - echo "BIN_NAME=${BIN_NAME}" >> "$GITHUB_OUTPUT" - - - name: Create tarball - id: package - shell: bash - run: | - PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac; - PKG_BASENAME=${PROJECT_NAME}-v${PROJECT_VERSION}-${{ matrix.job.target }} - PKG_NAME=${PKG_BASENAME}${PKG_suffix} - echo "PKG_NAME=${PKG_NAME}" >> "$GITHUB_OUTPUT" - - PKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/package" - ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/" - mkdir -p "${ARCHIVE_DIR}" - mkdir -p "${ARCHIVE_DIR}/completions" - - # Binary - cp "${{ steps.strip.outputs.BIN_PATH }}" "$ARCHIVE_DIR" - - # README, LICENSE and CHANGELOG files - cp "README.md" "LICENSE" "$ARCHIVE_DIR" - - QEMU_PREFIX="" - case ${{ matrix.job.target }} in - aarch64-unknown-linux-gnu) QEMU_PREFIX="qemu-aarch64 -L /usr/aarch64-linux-gnu" ;; - esac; - - # Shell completions - for sh in 'bash' 'fish' 'zsh' 'nushell'; do - $QEMU_PREFIX "${{ steps.strip.outputs.BIN_PATH }}" gen-completions -s $sh -o "${ARCHIVE_DIR}/completions" - done - - # base compressed package - pushd "${PKG_STAGING}/" >/dev/null - case ${{ matrix.job.target }} in - *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;; - *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;; - esac; - popd >/dev/null - - # Let subsequent steps know where to find the compressed package - echo "PKG_PATH=${PKG_STAGING}/${PKG_NAME}" >> "$GITHUB_OUTPUT" - - - name: "Artifact upload: tarball" - uses: actions/upload-artifact@master - with: - name: ${{ steps.package.outputs.PKG_NAME }} - path: ${{ steps.package.outputs.PKG_PATH }} - - - name: Create Debian package - id: debian-package - shell: bash - if: startsWith(matrix.job.os, 'ubuntu') && endsWith(matrix.job.target, 'gnu') - run: | - cargo install cargo-deb - cargo deb --deb-revision="" -p atuin - - case ${{ matrix.job.target }} in - aarch64-*-linux-*) DPKG_ARCH=arm64 ;; - arm-*-linux-*hf) DPKG_ARCH=armhf ;; - i686-*-linux-*) DPKG_ARCH=i686 ;; - x86_64-*-linux-*) DPKG_ARCH=amd64 ;; - *) DPKG_ARCH=notset ;; - esac; - - DPKG_NAME="${PROJECT_NAME}_${PROJECT_VERSION}_${DPKG_ARCH}.deb" - DPKG_PATH="target/debian/${PKG_BASENAME}.deb" - DPKG_PATH="target/debian/${DPKG_NAME}" - - echo DPKG_NAME=${DPKG_NAME} >> $GITHUB_OUTPUT - echo DPKG_PATH=${DPKG_PATH} >> $GITHUB_OUTPUT - - - - name: "Artifact upload: Debian package" - uses: actions/upload-artifact@master - if: steps.debian-package.outputs.DPKG_NAME - with: - name: ${{ steps.debian-package.outputs.DPKG_NAME }} - path: ${{ steps.debian-package.outputs.DPKG_PATH }} - - - - name: Publish archives and packages - uses: softprops/action-gh-release@v1 - if: steps.is-release.outputs.IS_RELEASE - with: - files: | - ${{ steps.package.outputs.PKG_PATH }} - ${{ steps.debian-package.outputs.DPKG_PATH }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
