diff --git a/.github/workflows/cd.yaml b/.github/workflows/_cd.yaml similarity index 100% rename from .github/workflows/cd.yaml rename to .github/workflows/_cd.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..667efec --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,143 @@ +name: 'Test release' + +on: + push: + tags: + - "v*.*.*" + # workflow_dispatch: + +jobs: + build-release: + needs: create-release + name: build-release + runs-on: ${{ matrix.os }} + env: + RUST_BACKTRACE: 1 + strategy: + matrix: + build: + - linux gnu x64 + - linux gnu aarch64 + - macos x64 + - macos aarch64 + include: + - build: linux gnu x64 + os: ubuntu-latest + rust: stable + target: x86_64-unknown-linux-gnu + - build: linux gnu aarch64 + os: ubuntu-latest + rust: stable + target: aarch64-unknown-linux-gnu + - build: macos x64 + os: macos-latest + rust: stable + target: x86_64-apple-darwin + - build: macos aarch64 + os: macos-latest + rust: stable + target: aarch64-apple-darwin + steps: + - name: Set release tag + run: | + if [ "$GITHUB_EVENT_NAME" == 'workflow_dispatch' ]; then + echo "RELEASE_TAG=main" >> "$GITHUB_ENV" + else + echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> "$GITHUB_ENV" + fi + + - name: Checkout repository + uses: actions/checkout@v3 + + # - name: Install Protoc + # uses: arduino/setup-protoc@v2 + # with: + # repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + override: true + target: ${{ matrix.target }} + + # - name: Add WASM target + # run: rustup target add wasm32-wasi + + # - name: Install musl-tools + # if: matrix.os == 'ubuntu-latest' + # run: sudo apt-get install -y --no-install-recommends musl-tools + + # # Workaround for + # - name: Switch Xcode SDK + # if: runner.os == 'macos' + # run: | + # cat <> "$GITHUB_ENV" + # SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk + # EOF + + - name: Build release binary + # run: cargo xtask ci cross ${{ matrix.target }} + run: cargo build --release --target=${{ matrix.target }} + + # this breaks on aarch64 and this if conditional isn't working for some reason: TODO: investigate + #- name: Strip release binary + # if: runner.target != 'aarch64-unknown-linux-musl' && runner.target != 'aarch64-apple-darwin' + # run: strip "target/${{ matrix.target }}/release/zellij" + + - name: Create checksum + id: make-checksum + working-directory: ./target/${{ matrix.target }}/release + run: | + name="zellij-${{ matrix.target }}.sha256sum" + if [[ "$RUNNER_OS" != "macOS" ]]; then + sha256sum "zellij" > "${name}" + else + shasum -a 256 "zellij" > "${name}" + fi + echo "::set-output name=name::${name}" + + - name: Tar release + id: make-artifact + working-directory: ./target/${{ matrix.target }}/release + run: | + name="zellij-${{ matrix.target }}.tar.gz" + tar cvzf "${name}" "zellij" + echo "::set-output name=name::${name}" + + - name: Upload release archive + uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: ./target/${{ matrix.target }}/release/${{ steps.make-artifact.outputs.name }} + asset_name: zellij-${{matrix.target}}.tar.gz + asset_content_type: application/octet-stream + + - name: Upload checksum + uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: ./target/${{ matrix.target }}/release/${{ steps.make-checksum.outputs.name }} + asset_name: zellij-${{matrix.target}}.sha256sum + asset_content_type: text/plain + + create-release: + runs-on: ubuntu-latest + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + steps: + - name: create_release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event_name == 'workflow_dispatch' && '' || github.ref }} + release_name: Release ${{ github.event_name == 'workflow_dispatch' && 'main' || github.ref }} + draft: ${{ github.event_name == 'workflow_dispatch' }} + prerelease: false diff --git a/DEV.md b/DEV.md index 4d23338..55982c4 100644 --- a/DEV.md +++ b/DEV.md @@ -9,3 +9,7 @@ ## Git `freeze = update-index --assume-unchanged` `thaw = update-index --no-assume-unchanged` + +## Github +### Releasing binaries +https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository