Skip to content

Commit

Permalink
Port dojo release scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
tarrencev committed Feb 9, 2024
1 parent 9c7e409 commit 95a6305
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 198 deletions.
14 changes: 0 additions & 14 deletions .github/scripts/create-tag.js

This file was deleted.

15 changes: 0 additions & 15 deletions .github/scripts/move-tag.js

This file was deleted.

39 changes: 0 additions & 39 deletions .github/scripts/prune-prereleases.js

This file was deleted.

35 changes: 35 additions & 0 deletions .github/workflows/release-dispatch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: release-dispatch
on:
workflow_dispatch:
inputs:
version:
description: Version to release
required: true
type: string

jobs:
propose-release:
permissions:
pull-requests: write
contents: write
runs-on: ubuntu-latest
container:
image: ghcr.io/dojoengine/dojo-dev:5d61184
steps:
# Workaround described here: https://github.com/actions/checkout/issues/760
- uses: actions/checkout@v3
- run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- run: cargo release version ${{ inputs.version }} --execute --no-confirm && cargo release replace --execute --no-confirm
- id: version_info
run: |
cargo install cargo-get
echo "version=$(cargo get workspace.package.version)" >> $GITHUB_OUTPUT
- uses: peter-evans/create-pull-request@v5
with:
# We have to use a PAT in order to trigger ci
token: ${{ secrets.CREATE_PR_TOKEN }}
title: "Prepare release: v${{ steps.version_info.outputs.version }}"
commit-message: "Prepare release: v${{ steps.version_info.outputs.version }}"
branch: prepare-release
base: main
delete-branch: true
184 changes: 54 additions & 130 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,90 +1,51 @@
name: release

on:
push:
tags:
- "*"
workflow_dispatch:
pull_request:
types: [closed]
branches:
- main

env:
IS_NIGHTLY: ${{ (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && 'true' || 'false' }}
CARGO_TERM_COLOR: always
RUST_VERSION: 1.74.0
REGISTRY_IMAGE: ghcr.io/${{ github.repository }}

jobs:
prepare:
name: Prepare release
if: github.event.pull_request.merged == true && github.event.pull_request.head.ref == 'prepare-release'
runs-on: ubuntu-latest

outputs:
tag_name: ${{ steps.release_info.outputs.tag_name }}
release_name: ${{ steps.release_info.outputs.release_name }}
changelog: ${{ steps.build_changelog.outputs.changelog }}

steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Compute release name and tag
- uses: actions/checkout@v3
- name: Get version
id: release_info
run: |
if [[ $IS_NIGHTLY == "true" ]]; then
echo "tag_name=nightly-${GITHUB_SHA}" >> $GITHUB_OUTPUT
echo "release_name=Nightly ($(date '+%Y-%m-%d'))" >> $GITHUB_OUTPUT
else
echo "tag_name=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
echo "release_name=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
fi
# Creates a `nightly-SHA` tag for this specific nightly
# This tag is used for this specific nightly version's release
# which allows users to roll back. It is also used to build
# the changelog.
- name: Create build-specific nightly tag
if: ${{ env.IS_NIGHTLY == 'true' }}
uses: actions/github-script@v5
env:
TAG_NAME: ${{ steps.release_info.outputs.tag_name }}
with:
script: |
const createTag = require('./.github/scripts/create-tag.js')
await createTag({ github, context }, process.env.TAG_NAME)
- name: Build changelog
id: build_changelog
uses: mikepenz/release-changelog-builder-action@v2
with:
configuration: "./.github/changelog.json"
fromTag: ${{ env.IS_NIGHTLY == 'true' && 'nightly' || '' }}
toTag: ${{ steps.release_info.outputs.tag_name }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
cargo install cargo-get
echo "tag_name=$(cargo get workspace.package.version)" >> $GITHUB_OUTPUT
release:
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
needs: prepare
runs-on: ${{ matrix.job.os }}
env:
PLATFORM_NAME: ${{ matrix.job.platform }}
TARGET: ${{ matrix.job.target }}
ARCH: ${{ matrix.job.arch }}
strategy:
matrix:
job:
# The OS is used for the runner
# The platform is a generic platform name
# The target is used by Cargo
# The arch is either 386, arm64 or amd64
# The svm target platform to use for the binary https://github.com/roynalnaruto/svm-rs/blob/84cbe0ac705becabdc13168bae28a45ad2299749/svm-builds/build.rs#L4-L24
- os: ubuntu-latest
- os: ubuntu-20.04
platform: linux
target: x86_64-unknown-linux-gnu
arch: amd64
- os: ubuntu-latest
- os: ubuntu-20.04
platform: linux
target: aarch64-unknown-linux-gnu
arch: arm64
svm_target_platform: linux-aarch64
- os: macos-latest
- os: macos-latest-xlarge
platform: darwin
target: x86_64-apple-darwin
arch: amd64
Expand All @@ -110,9 +71,10 @@ jobs:
with:
cache-on-failure: true

- uses: arduino/setup-protoc@v1
- uses: arduino/setup-protoc@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: "25.x"

- name: Apple M1 setup
if: ${{ matrix.job.target == 'aarch64-apple-darwin' }}
Expand All @@ -129,102 +91,64 @@ jobs:
- name: Build binaries
run: cargo build --release --bins --target ${{ matrix.job.target }}

- name: Archive binaries
id: artifacts
env:
PLATFORM_NAME: ${{ matrix.job.platform }}
TARGET: ${{ matrix.job.target }}
ARCH: ${{ matrix.job.arch }}
VERSION_NAME: ${{ (env.IS_NIGHTLY == 'true' && 'nightly') || needs.prepare.outputs.tag_name }}
VERSION_NAME: v${{ needs.prepare.outputs.tag_name }}
run: |
if [ "$PLATFORM_NAME" == "linux" ]; then
tar -czvf "slot_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" -C ./target/${TARGET}/release slot
echo "file_name=slot_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT
elif [ "$PLATFORM_NAME" == "darwin" ]; then
# We need to use gtar here otherwise the archive is corrupt.
# See: https://github.com/actions/virtual-environments/issues/2619
gtar -czvf "slot_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" -C ./target/${TARGET}/release slot
echo "file_name=slot_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT
else
cd ./target/${TARGET}/release
7z a -tzip "slot_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.zip" slot.exe
mv "slot_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.zip" ../../../
echo "file_name=slot_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT
echo "file_name=slot_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.zip" >> $GITHUB_OUTPUT
fi
shell: bash

# Creates the release for this specific version
- name: Create release
uses: softprops/action-gh-release@v1
with:
name: ${{ needs.prepare.outputs.release_name }}
tag_name: ${{ needs.prepare.outputs.tag_name }}
prerelease: ${{ env.IS_NIGHTLY == 'true' }}
body: ${{ needs.prepare.outputs.changelog }}
files: |
${{ steps.artifacts.outputs.file_name }}
# If this is a nightly release, it also updates the release
# tagged `nightly` for compatibility with `slotup`
- name: Update nightly release
if: ${{ env.IS_NIGHTLY == 'true' }}
uses: softprops/action-gh-release@v1
with:
name: "Nightly"
tag_name: "nightly"
prerelease: true
body: ${{ needs.prepare.outputs.changelog }}
files: |
${{ steps.artifacts.outputs.file_name }}
cleanup:
name: Release cleanup
runs-on: ubuntu-latest
needs: release

steps:
- name: Checkout sources
uses: actions/checkout@v2
- name: Move Binaries
if: ${{ env.PLATFORM_NAME == 'linux' }}
run: |
mkdir -p $PLATFORM_NAME/$ARCH
mv target/$TARGET/release/slot $PLATFORM_NAME/$ARCH
shell: bash

# Moves the `nightly` tag to `HEAD`
- name: Move nightly tag
if: ${{ env.IS_NIGHTLY == 'true' }}
uses: actions/github-script@v5
- name: Upload docker binaries
uses: actions/upload-artifact@v3
with:
script: |
const moveTag = require('./.github/scripts/move-tag.js')
await moveTag({ github, context }, 'nightly')
name: binaries
path: ${{ env.PLATFORM_NAME }}
retention-days: 1

- name: Delete old nightlies
uses: actions/github-script@v5
- name: Upload release artifacts
uses: actions/upload-artifact@v3
with:
script: |
const prunePrereleases = require('./.github/scripts/prune-prereleases.js')
await prunePrereleases({github, context})
name: artifacts
path: ${{ steps.artifacts.outputs.file_name }}
retention-days: 1

docker-build-and-push:
name: Build and push Docker image
runs-on: ubuntu-latest
needs: prepare
create-draft-release:
runs-on: ubuntu-20.04
needs: [prepare, release]
env:
GITHUB_USER: ${{ github.repository_owner }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push Docker image
uses: docker/build-push-action@v4
- uses: actions/checkout@v2
- uses: actions/download-artifact@v3
with:
push: true
tags: ghcr.io/${{ github.repository }}:latest,ghcr.io/${{ github.repository }}:${{ needs.prepare.outputs.tag_name }}
platforms: linux/amd64,linux/arm64
name: artifacts
path: artifacts
- id: version_info
run: |
cargo install cargo-get
echo "version=$(cargo get workspace.package.version)" >> $GITHUB_OUTPUT
- name: Display structure of downloaded files
run: ls -R artifacts
- run: gh release create v${{ steps.version_info.outputs.version }} ./artifacts/*.gz --generate-notes --draft

0 comments on commit 95a6305

Please sign in to comment.