Repository navigation
Release prep: 0.8.0 and a Linux riscv64 release build (#669) #15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Release pipeline: every push to `release` builds signed installers for every platform and | |
| # creates or updates the draft GitHub Release "EffectCraft v<version>". See docs/releasing.md. | |
| # | |
| # The jobs that sign (macOS, Windows) and the one that publishes the draft run in the `release` | |
| # environment (restricted to the `release` branch), which holds the signing secrets. Every secret | |
| # is optional: missing ones produce unsigned artifacts and a warning, never a failed build. The | |
| # jobs that sign nothing (version, Linux, Flatpak, FreeBSD, web) run without it, so they get no | |
| # secrets and a dispatch on any branch builds and checks them as a dry run; there the signed jobs | |
| # are refused by the environment's branch rule and the draft release job is skipped. | |
| name: Release | |
| on: | |
| push: | |
| branches: [release] | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: "Version override for a test run, e.g. 0.2.0-rc.1 (empty: Cargo.toml)" | |
| type: string | |
| default: "" | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: release-${{ github.ref }} | |
| # Never cancel a run mid-notarization or mid-upload; a newer push waits its turn. | |
| cancel-in-progress: false | |
| env: | |
| CARGO_TERM_COLOR: always | |
| CARGO_INCREMENTAL: 0 | |
| RUST_BACKTRACE: 1 | |
| EFFECTCRAFT_BUILD_SHA: ${{ github.sha }} | |
| INPUT_VERSION: ${{ inputs.version }} | |
| jobs: | |
| version: | |
| name: version | |
| runs-on: ubuntu-latest | |
| # No `environment: release`: it reads Cargo.toml only (see the header). | |
| outputs: | |
| version: ${{ steps.v.outputs.version }} | |
| date: ${{ steps.v.outputs.date }} | |
| prerelease: ${{ steps.v.outputs.prerelease }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - id: v | |
| name: Resolve version | |
| run: | | |
| . packaging/env.sh | |
| v="${INPUT_VERSION#v}" | |
| v="${v:-$VERSION}" | |
| if ! printf '%s' "$v" | grep -Eq '^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$'; then | |
| echo "::error::'$v' is not a version like 1.2.3 or 1.2.3-rc.1" | |
| exit 1 | |
| fi | |
| case "$v" in *-*) pre=true ;; *) pre=false ;; esac | |
| { | |
| echo "version=$v" | |
| echo "date=$(date -u +%Y-%m-%d)" | |
| echo "prerelease=$pre" | |
| } >>"$GITHUB_OUTPUT" | |
| echo "### EffectCraft v$v (\`${GITHUB_SHA::9}\`)" >>"$GITHUB_STEP_SUMMARY" | |
| macos: | |
| name: macOS universal | |
| needs: version | |
| runs-on: macos-15-xlarge # M2 Pro larger runner; use only in release.yml (actions_macos_xl budget caps spend) | |
| environment: release | |
| env: | |
| EFFECTCRAFT_VERSION: ${{ needs.version.outputs.version }} | |
| EFFECTCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable | |
| with: | |
| targets: aarch64-apple-darwin, x86_64-apple-darwin | |
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| key: release-macos-universal | |
| - name: Apply version override | |
| if: inputs.version != '' | |
| run: cargo xtask version set "$EFFECTCRAFT_VERSION" | |
| - name: Import signing certificate | |
| env: | |
| APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} | |
| APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
| KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} | |
| run: packaging/macos/import-cert.sh | |
| # Renders the DMG background from packaging/macos/dmg/background.svg (package.sh). | |
| - name: Install resvg | |
| run: cargo install resvg --locked --version 0.48.1 | |
| - name: Build, sign, notarize | |
| env: | |
| APPLE_ID: ${{ secrets.APPLE_ID }} | |
| APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} | |
| APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | |
| run: packaging/macos/package.sh --arch universal | |
| - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 | |
| with: | |
| name: release-macos | |
| path: dist/release/* | |
| if-no-files-found: error | |
| - name: Remove temporary keychain | |
| if: always() | |
| run: | | |
| if [ -n "${MACOS_KEYCHAIN:-}" ]; then security delete-keychain "$MACOS_KEYCHAIN" || true; fi | |
| windows: | |
| name: Windows ${{ matrix.arch }} | |
| needs: version | |
| runs-on: windows-latest | |
| environment: release | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { arch: x64, target: x86_64-pc-windows-msvc } | |
| - { arch: x86, target: i686-pc-windows-msvc } | |
| # Windows on ARM: cross-compiled on the x64 runner, so signing and WiX run as above. | |
| # .github/workflows/windows-arm64.yml installs and runs it on ARM64 hardware. | |
| - { arch: arm64, target: aarch64-pc-windows-msvc } | |
| env: | |
| EFFECTCRAFT_VERSION: ${{ needs.version.outputs.version }} | |
| EFFECTCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| key: release-windows-${{ matrix.arch }} | |
| - name: Apply version override | |
| if: inputs.version != '' | |
| shell: bash | |
| run: cargo xtask version set "$EFFECTCRAFT_VERSION" | |
| - name: Install WiX | |
| shell: pwsh | |
| run: dotnet tool install --global wix --version 5.0.2 | |
| - name: Build, sign, package | |
| shell: pwsh | |
| env: | |
| WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }} | |
| WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} | |
| AZURE_SIGNING_ENDPOINT: ${{ secrets.AZURE_SIGNING_ENDPOINT }} | |
| AZURE_SIGNING_ACCOUNT: ${{ secrets.AZURE_SIGNING_ACCOUNT }} | |
| AZURE_CERT_PROFILE: ${{ secrets.AZURE_CERT_PROFILE }} | |
| run: ./packaging/windows/package.ps1 -Arch ${{ matrix.arch }} | |
| - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 | |
| with: | |
| name: release-windows-${{ matrix.arch }} | |
| path: dist/release/* | |
| if-no-files-found: error | |
| linux: | |
| name: Linux ${{ matrix.arch }} | |
| needs: version | |
| # The oldest GitHub-hosted image, so the binaries only need glibc >= 2.35 (Ubuntu 22.04+, | |
| # Debian 12+, Fedora 36+, RHEL 10). See docs/releasing.md. | |
| runs-on: ${{ matrix.runner }} | |
| # No `environment: release`: this job signs nothing, so it gets no release secrets. | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { arch: x86_64, runner: ubuntu-22.04, deb: amd64 } | |
| - { arch: aarch64, runner: ubuntu-22.04-arm, deb: arm64 } | |
| env: | |
| EFFECTCRAFT_VERSION: ${{ needs.version.outputs.version }} | |
| EFFECTCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }} | |
| NFPM_VERSION: 2.47.0 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - name: Install build and packaging tools | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| libxkbcommon-dev libwayland-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libasound2-dev \ | |
| desktop-file-utils appstream python3-yaml zsync | |
| curl -fsSL -o "$RUNNER_TEMP/nfpm.deb" \ | |
| "https://github.com/goreleaser/nfpm/releases/download/v${NFPM_VERSION}/nfpm_${NFPM_VERSION}_${{ matrix.deb }}.deb" | |
| sudo dpkg -i "$RUNNER_TEMP/nfpm.deb" | |
| - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable | |
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| key: release-linux-${{ matrix.arch }} | |
| - name: Apply version override | |
| if: inputs.version != '' | |
| run: cargo xtask version set "$EFFECTCRAFT_VERSION" | |
| - name: Build and package (AppImage, deb, rpm, tar.gz) | |
| run: packaging/linux/package.sh | |
| - name: Check the packages | |
| run: | | |
| dpkg-deb --info dist/release/*.deb | |
| dpkg-deb --contents dist/release/*.deb | grep -E 'usr/bin/effectcraft$|metainfo|applications' | |
| ldd target/release/effectcraft | |
| python3 -c "import yaml; m = yaml.safe_load(open('packaging/linux/flatpak/ai.storyteller.effectcraft.yml')); assert m['id'] == 'ai.storyteller.effectcraft'" | |
| for appimage in dist/release/*.AppImage; do | |
| chmod +x "$appimage" | |
| APPIMAGE_EXTRACT_AND_RUN=1 "$appimage" --version | |
| # Update information is embedded, and the .zsync for delta updates sits beside it. | |
| "$appimage" --appimage-updateinformation | grep -F 'gh-releases-zsync|' | |
| test -s "$appimage.zsync" | |
| done | |
| - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 | |
| with: | |
| name: release-linux-${{ matrix.arch }} | |
| path: dist/release/* | |
| if-no-files-found: error | |
| linux-riscv64: | |
| name: Linux riscv64 | |
| needs: version | |
| # Cross-compiled on x86_64 (no hosted RISC-V runners) against the runner's own Ubuntu release | |
| # from ports.ubuntu.com, so the binaries need that release's glibc (24.04: 2.39). 22.04's | |
| # riscv64 ports lag its amd64 updates, which breaks the multiarch install. tar.gz only; the | |
| # CLI is smoke-tested under QEMU. | |
| runs-on: ubuntu-24.04 | |
| # No `environment: release`: this job signs nothing, so it gets no release secrets. | |
| env: | |
| EFFECTCRAFT_VERSION: ${{ needs.version.outputs.version }} | |
| EFFECTCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable | |
| with: | |
| targets: riscv64gc-unknown-linux-gnu | |
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| key: release-linux-riscv64 | |
| - name: Apply version override | |
| if: inputs.version != '' | |
| run: cargo xtask version set "$EFFECTCRAFT_VERSION" | |
| - name: Install cross-compilation dependencies | |
| run: | | |
| . /etc/os-release | |
| sudo dpkg --add-architecture riscv64 | |
| # Pin the existing (archive.ubuntu.com) sources to amd64; riscv64 comes from ports. | |
| if [ -f /etc/apt/sources.list.d/ubuntu.sources ]; then | |
| sudo sed -i '/^Types: deb/a Architectures: amd64' /etc/apt/sources.list.d/ubuntu.sources | |
| fi | |
| if [ -f /etc/apt/sources.list ]; then | |
| sudo sed -i 's/^deb /deb [arch=amd64] /g' /etc/apt/sources.list | |
| sudo sed -i 's/^deb-src /deb-src [arch=amd64] /g' /etc/apt/sources.list | |
| fi | |
| for suite in "$VERSION_CODENAME" "$VERSION_CODENAME-updates" "$VERSION_CODENAME-security"; do | |
| echo "deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports $suite main universe restricted multiverse" | |
| done | sudo tee /etc/apt/sources.list.d/riscv64.list | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu libc6-dev-riscv64-cross libc6-dev:riscv64 qemu-user \ | |
| libxkbcommon-dev:riscv64 libwayland-dev:riscv64 libx11-dev:riscv64 libxrandr-dev:riscv64 \ | |
| libxi-dev:riscv64 libgl1-mesa-dev:riscv64 libasound2-dev:riscv64 \ | |
| desktop-file-utils appstream | |
| - name: Build and package (tar.gz) | |
| env: | |
| CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER: riscv64-linux-gnu-gcc | |
| PKG_CONFIG_SYSROOT_DIR: / | |
| PKG_CONFIG_PATH: /usr/lib/riscv64-linux-gnu/pkgconfig:/usr/share/pkgconfig | |
| PKG_CONFIG_ALLOW_CROSS: "1" | |
| CROSS_ARCH: riscv64 | |
| CROSS_TARGET: riscv64gc-unknown-linux-gnu | |
| CROSS_COMPILE: riscv64-linux-gnu- | |
| EMULATOR: qemu-riscv64 | |
| QEMU_LD_PREFIX: /usr/riscv64-linux-gnu | |
| run: packaging/linux/package.sh --formats tar | |
| - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 | |
| with: | |
| name: release-linux-riscv64 | |
| path: dist/release/*.tar.gz | |
| if-no-files-found: error | |
| flatpak: | |
| name: Flatpak ${{ matrix.arch }} | |
| needs: [version, linux] | |
| # Repackages the Linux job's tarball (the same binaries as the AppImage/deb/rpm); no Rust | |
| # build here. 24.04 for a newer flatpak-builder (1.4) than 22.04 ships. | |
| runs-on: ${{ matrix.runner }} | |
| # No `environment: release`: this job signs nothing, so it gets no release secrets. | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { arch: x86_64, runner: ubuntu-24.04 } | |
| - { arch: aarch64, runner: ubuntu-24.04-arm } | |
| env: | |
| EFFECTCRAFT_VERSION: ${{ needs.version.outputs.version }} | |
| EFFECTCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 | |
| with: | |
| name: release-linux-${{ matrix.arch }} | |
| path: dist/linux | |
| - name: Install flatpak-builder | |
| run: | | |
| sudo apt-get update | |
| # librsvg2-common: the SVG pixbuf loader. flatpak-builder runs the host's | |
| # `appstreamcli compose`, which renders the scalable icon and fails without it. | |
| sudo apt-get install -y --no-install-recommends flatpak flatpak-builder librsvg2-common | |
| # Ubuntu 24.04's AppArmor blocks the unprivileged user namespaces bubblewrap needs. | |
| sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 | |
| - name: Build the Flatpak bundle | |
| run: packaging/linux/flatpak-bundle.sh "dist/linux/effectcraft-$EFFECTCRAFT_VERSION-linux-${{ matrix.arch }}.tar.gz" | |
| - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 | |
| with: | |
| name: release-flatpak-${{ matrix.arch }} | |
| path: dist/release/*.flatpak | |
| if-no-files-found: error | |
| freebsd: | |
| name: FreeBSD x86_64 | |
| needs: version | |
| # GitHub has no FreeBSD runners: build in a FreeBSD 14.3 VM, the same image and packages as | |
| # .github/workflows/freebsd.yml. | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 240 | |
| # No `environment: release`: this job signs nothing, so it gets no release secrets. | |
| env: | |
| EFFECTCRAFT_VERSION: ${{ needs.version.outputs.version }} | |
| EFFECTCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - name: Build and package in a FreeBSD VM (tar.gz) | |
| # vmactions/freebsd-vm v1.5.9, pinned by commit (it runs our build). | |
| uses: vmactions/freebsd-vm@c46abacb49f09938ca4e1702d15d836285d694cc # v1.5.9 | |
| with: | |
| release: "14.3" | |
| usesh: true | |
| cpu: 4 | |
| mem: 12288 | |
| # Passed into the VM by name; never templated into the script below. | |
| envs: "EFFECTCRAFT_VERSION EFFECTCRAFT_BUILD_DATE EFFECTCRAFT_BUILD_SHA INPUT_VERSION" | |
| # The FreeBSD CI packages, plus bash for the packaging script. | |
| prepare: | | |
| pkg install -y bash git curl pkgconf cmake python3 libxkbcommon wayland libX11 libXcursor libXrandr libXi libxcb mesa-libs vulkan-loader gtk3 fontconfig freetype2 alsa-lib | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable | |
| run: | | |
| set -e | |
| . "$HOME/.cargo/env" | |
| git config --global --add safe.directory "$PWD" | |
| # Build outside the checkout so only dist/ is copied back out of the VM (copying the | |
| # target dir back fails on large builds). 4 jobs: more runs the VM out of memory. | |
| export CARGO_TARGET_DIR=/var/tmp/effectcraft-target CARGO_BUILD_JOBS=4 | |
| if [ -n "$INPUT_VERSION" ]; then cargo xtask version set "$EFFECTCRAFT_VERSION"; fi | |
| bash packaging/freebsd/package.sh | |
| tar -tzf dist/release/effectcraft-*-freebsd-x86_64.tar.gz \ | |
| | grep -E '/bin/effectcraft$|/bin/effectcraft-cli$|/share/applications/ai\.storyteller\.effectcraft\.desktop$|/share/doc/effectcraft/LICENSE-MIT$' | |
| - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 | |
| with: | |
| name: release-freebsd-x86_64 | |
| path: dist/release/* | |
| if-no-files-found: error | |
| web: | |
| name: Web (wasm) | |
| needs: version | |
| runs-on: ubuntu-latest | |
| # No `environment: release`: this job signs nothing, so it gets no release secrets. | |
| env: | |
| EFFECTCRAFT_VERSION: ${{ needs.version.outputs.version }} | |
| EFFECTCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }} | |
| WASM_BINDGEN_VERSION: 0.2.129 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - uses: dtolnay/rust-toolchain@686976e191b89faba57d3206551f0f330d8cb249 # stable | |
| with: | |
| targets: wasm32-unknown-unknown | |
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| key: release-web | |
| - name: Install wasm-bindgen CLI | |
| run: | | |
| # Must match the wasm-bindgen version in Cargo.lock exactly (cargo xtask web checks it). | |
| if ! { command -v wasm-bindgen >/dev/null && wasm-bindgen --version | grep -q "$WASM_BINDGEN_VERSION"; }; then | |
| cargo install wasm-bindgen-cli --version "$WASM_BINDGEN_VERSION" --locked | |
| fi | |
| wasm-bindgen --version | |
| - name: Apply version override | |
| if: inputs.version != '' | |
| run: cargo xtask version set "$EFFECTCRAFT_VERSION" | |
| - name: Build and zip | |
| run: packaging/web/package.sh | |
| - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 | |
| with: | |
| name: release-web | |
| path: dist/release/* | |
| if-no-files-found: error | |
| release: | |
| name: Draft GitHub Release | |
| # Needs the signed jobs, so a dry run on a branch (where they are refused) never gets here. | |
| needs: [version, macos, windows, linux, linux-riscv64, flatpak, freebsd, web] | |
| runs-on: ubuntu-latest | |
| environment: release | |
| permissions: | |
| contents: write | |
| env: | |
| VERSION: ${{ needs.version.outputs.version }} | |
| PRERELEASE: ${{ needs.version.outputs.prerelease }} | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| GH_REPO: ${{ github.repository }} | |
| steps: | |
| - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 | |
| with: | |
| pattern: release-* | |
| path: artifacts | |
| merge-multiple: true | |
| - name: Checksums | |
| working-directory: artifacts | |
| run: | | |
| sha256sum -- * | tee SHA256SUMS.txt | |
| - name: Create or update the draft release | |
| working-directory: artifacts | |
| run: | | |
| tag="v$VERSION" | |
| title="EffectCraft v$VERSION" | |
| pre=() | |
| if [ "$PRERELEASE" = true ]; then pre=(--prerelease); fi | |
| if draft="$(gh release view "$tag" --json isDraft --jq .isDraft 2>/dev/null)"; then | |
| if [ "$draft" != "true" ]; then | |
| echo "::error::Release $tag is already published. Bump the version (cargo xtask version set) before pushing to release." | |
| exit 1 | |
| fi | |
| echo "Updating draft $tag: replacing its assets" | |
| gh release view "$tag" --json assets --jq '.assets[].name' | while read -r asset; do | |
| gh release delete-asset "$tag" "$asset" --yes | |
| done | |
| gh release edit "$tag" --draft --title "$title" --target "$GITHUB_SHA" --prerelease="$PRERELEASE" | |
| gh release upload "$tag" --clobber -- * | |
| else | |
| echo "Creating draft $tag" | |
| gh release create "$tag" --draft --title "$title" --target "$GITHUB_SHA" --generate-notes "${pre[@]}" -- * | |
| fi | |
| { | |
| echo "Draft release **$title** at \`${GITHUB_SHA::9}\`:" | |
| echo | |
| sed 's/^/ /' SHA256SUMS.txt | |
| } >>"$GITHUB_STEP_SUMMARY" |