Skip to content

Release

Release #565

Workflow file for this run

name: Release
on:
schedule:
- cron: "0 6 * * mon" # 6am UTC, 11pm PST
#pull_request:
# branches: '**'
workflow_dispatch:
inputs:
release_version:
type: string
description: "Release version (e.g. 0.1.0)"
required: true
create_release:
type: boolean
description: "Create release?"
required: true
default: false
prerelease:
type: boolean
description: "Prerelease?"
required: true
default: true
defaults:
run:
shell: bash
env:
CC: clang
RETENTION_DAYS: 7
# For actions/checkout@v3 to use node16 instead of node20
# https://github.com/actions/checkout/issues/1487
# https://github.com/actions/checkout/issues/1809
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
jobs:
setup:
name: "Setup release & runtime versions"
runs-on: ubuntu-latest
timeout-minutes: ${{ fromJSON(vars.GHA_DEFAULT_TIMEOUT) }}
outputs:
wasmtime_ver: ${{ steps.assign-versions.outputs.wasmtime_ver }}
wasmer_ver: ${{ steps.assign-versions.outputs.wasmer_ver }}
v8_ver: ${{ steps.assign-versions.outputs.v8_ver }}
create_release: ${{ steps.assign-vars.outputs.create_release }}
release_name: ${{ steps.assign-vars.outputs.release_name }}
release_channel: ${{ steps.assign-vars.outputs.release_channel }}
release_version: ${{ steps.assign-vars.outputs.release_version }}
steps:
- uses: actions/checkout@v3
- name: Assign runtime versions
id: assign-versions
run: |
export NGX_WASM_DIR=$(pwd)
. ./util/_lib.sh
echo "wasmtime_ver=$(get_variable_from_makefile WASMTIME)" >> $GITHUB_OUTPUT
echo "wasmer_ver=$(get_variable_from_makefile WASMER)" >> $GITHUB_OUTPUT
echo "v8_ver=$(get_variable_from_makefile V8)" >> $GITHUB_OUTPUT
- id: assign-vars
name: Assign release variables
run: |
if [ "${{ github.event_name }}" = schedule ]; then
# nightly
# wasmx-nightly-20231201
channel="nightly"
version="$(date -u +%Y%m%d)"
echo "create_release=true" >> $GITHUB_OUTPUT
echo "release_name=$channel-$version" >> $GITHUB_OUTPUT
elif [ -n "${{ github.event.inputs.release_version }}" ]; then
# release/prerelease
version="${{ github.event.inputs.release_version }}"
echo "create_release=${{ github.event.inputs.create_release == 'true' }}" >> $GITHUB_OUTPUT
if [ "${{ github.event.inputs.prerelease }}" = "true" ]; then
# wasmx-prerelease-0.2.0
channel="prerelease"
echo "release_name=$channel-$version" >> $GITHUB_OUTPUT
else
# wasmx-1.0.0
channel="release"
echo "release_name=$version" >> $GITHUB_OUTPUT
fi
else
# GHA test run
# wasmx-gha-run-1234
channel="gha-run"
version="${{ github.run_number }}"
echo "create_release=false" >> $GITHUB_OUTPUT
echo "release_name=$channel-$version" >> $GITHUB_OUTPUT
fi
echo "release_channel=$channel" >> $GITHUB_OUTPUT
echo "release_version=$version" >> $GITHUB_OUTPUT
source-release:
name: "Source release"
needs: setup
runs-on: ubuntu-latest
timeout-minutes: ${{ fromJSON(vars.GHA_DEFAULT_TIMEOUT) }}
steps:
- uses: actions/checkout@v3
- name: Build archive
run: ./util/release.sh ${{ needs.setup.outputs.release_name }} --src
- name: Upload archive
uses: actions/upload-artifact@v4
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
build-images:
name: "Build compilation images"
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
matrix:
include:
- name: "Ubuntu 18.04 build image"
file: "./assets/release/Dockerfiles/Dockerfile.amd64.ubuntu-18.04"
tags: "ghcr.io/kong/wasmx-build-ubuntu:18.04"
- name: "Ubuntu 20.04 build image"
file: "./assets/release/Dockerfiles/Dockerfile.ubuntu-20.04"
tags: "ghcr.io/kong/wasmx-build-ubuntu:20.04"
- name: "Ubuntu 22.04 build image"
file: "./assets/release/Dockerfiles/Dockerfile.ubuntu-22.04"
tags: "ghcr.io/kong/wasmx-build-ubuntu:22.04"
platforms: "linux/arm64,linux/amd64"
- name: "Centos 7 build image"
file: "./assets/release/Dockerfiles/Dockerfile.amd64.centos7"
tags: "ghcr.io/kong/wasmx-build-centos:7"
- name: "Centos 8 build image"
file: "./assets/release/Dockerfiles/Dockerfile.amd64.centos8"
tags: "ghcr.io/kong/wasmx-build-centos:8"
- name: "ArchLinux build image"
file: "./assets/release/Dockerfiles/Dockerfile.amd64.archlinux"
tags: "ghcr.io/kong/wasmx-build-arch:latest"
steps:
- uses: actions/checkout@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.TOKEN_GITHUB }}
- name: Setup QEMU
uses: docker/setup-qemu-action@v3
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
- name: ${{ matrix.name }}
uses: docker/build-push-action@v5
with:
file: ${{ matrix.file }}
tags: ${{ matrix.tags }}
platforms: ${{ matrix.platforms }}
push: true
cache-from: type=gha
cache-to: type=gha,mode=max
binary-ubuntu-bionic:
name: "Build Ubuntu 18.04 (bionic) binary"
needs: [setup, build-images]
runs-on: ubuntu-latest
timeout-minutes: 120
env:
WASMTIME_VER: ${{ needs.setup.outputs.wasmtime_ver }}
WASMER_VER: ${{ needs.setup.outputs.wasmer_ver }}
V8_VER: ${{ needs.setup.outputs.v8_ver }}
container:
image: ghcr.io/kong/wasmx-build-ubuntu:18.04
credentials:
username: ${{ github.repository_owner }}
password: ${{ secrets.TOKEN_GITHUB }}
steps:
- uses: actions/checkout@v3
- name: Build binary
run: ./util/release.sh ${{ needs.setup.outputs.release_name }} --bin
env:
GITHUB_OAUTH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
- uses: actions/upload-artifact@v3
if: failure()
with:
name: ${{ github.workflow }}-${{ github.job }}-sha-${{ github.sha }}-run-${{ github.run_number }}
path: work/dist/build/*
binary-ubuntu-focal:
name: "Build Ubuntu 20.04 (focal) binary"
needs: [setup, build-images]
runs-on: ubuntu-latest
timeout-minutes: 120
env:
WASMTIME_VER: ${{ needs.setup.outputs.wasmtime_ver }}
WASMER_VER: ${{ needs.setup.outputs.wasmer_ver }}
V8_VER: ${{ needs.setup.outputs.v8_ver }}
container:
image: ghcr.io/kong/wasmx-build-ubuntu:20.04
credentials:
username: ${{ github.repository_owner }}
password: ${{ secrets.TOKEN_GITHUB }}
steps:
- uses: actions/checkout@v3
- name: Build binary
run: ./util/release.sh ${{ needs.setup.outputs.release_name }} --bin
env:
GITHUB_OAUTH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
- uses: actions/upload-artifact@v4
if: failure()
with:
name: ${{ github.workflow }}-${{ github.job }}-sha-${{ github.sha }}-run-${{ github.run_number }}
path: work/dist/build/*
binary-ubuntu-jammy:
name: "Build Ubuntu 22.04 (jammy) binary"
needs: [setup, build-images]
runs-on: ubuntu-latest
timeout-minutes: 120
env:
WASMTIME_VER: ${{ needs.setup.outputs.wasmtime_ver }}
WASMER_VER: ${{ needs.setup.outputs.wasmer_ver }}
V8_VER: ${{ needs.setup.outputs.v8_ver }}
container:
image: ghcr.io/kong/wasmx-build-ubuntu:22.04
credentials:
username: ${{ github.repository_owner }}
password: ${{ secrets.TOKEN_GITHUB }}
steps:
- uses: actions/checkout@v3
- name: Build binary
run: ./util/release.sh ${{ needs.setup.outputs.release_name }} --bin
env:
GITHUB_OAUTH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
- uses: actions/upload-artifact@v4
if: failure()
with:
name: ${{ github.workflow }}-${{ github.job }}-sha-${{ github.sha }}-run-${{ github.run_number }}
path: work/dist/build/*
binary-ubuntu-jammy-arm:
name: "Build ARM Ubuntu 22.04 (jammy) binary"
needs: [setup, build-images]
runs-on: ubuntu-latest
timeout-minutes: 150
steps:
- uses: actions/checkout@v3
- name: Setup QEMU
uses: docker/setup-qemu-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.TOKEN_GITHUB }}
- run: |
docker run \
--platform=linux/arm64 \
--volume $PWD:/wasmx \
--volume $GITHUB_ENV:$GITHUB_ENV \
-e CI \
-e GITHUB_ENV \
--env CARGO_NET_GIT_FETCH_WITH_CLI=true \
--env WASMTIME_VER='${{ needs.setup.outputs.wasmtime_ver }}' \
--env WASMER_VER='${{ needs.setup.outputs.wasmer_ver }}' \
--env V8_VER='${{ needs.setup.outputs.v8_ver }}' \
ghcr.io/kong/wasmx-build-ubuntu:22.04 \
/wasmx/util/release.sh ${{ needs.setup.outputs.release_name }} --bin
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
- uses: actions/upload-artifact@v4
if: failure()
with:
name: ${{ github.workflow }}-${{ github.job }}-sha-${{ github.sha }}-run-${{ github.run_number }}
path: work/dist/build/*
binary-centos7:
name: "Build Centos 7 binary"
needs: [setup, build-images]
runs-on: ubuntu-latest
timeout-minutes: 120
env:
WASMTIME_VER: ${{ needs.setup.outputs.wasmtime_ver }}
WASMER_VER: ${{ needs.setup.outputs.wasmer_ver }}
V8_VER: ${{ needs.setup.outputs.v8_ver }}
container:
image: ghcr.io/kong/wasmx-build-centos:7
credentials:
username: ${{ github.repository_owner }}
password: ${{ secrets.TOKEN_GITHUB }}
steps:
- uses: actions/checkout@v3
- name: Build binary
run: ./util/release.sh ${{ needs.setup.outputs.release_name }} --bin
env:
GITHUB_OAUTH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
- uses: actions/upload-artifact@v3
if: failure()
with:
name: ${{ github.workflow }}-${{ github.job }}-sha-${{ github.sha }}-run-${{ github.run_number }}
path: work/dist/build/*
binary-centos8:
name: "Build Centos 8 binary"
needs: [setup, build-images]
runs-on: ubuntu-latest
timeout-minutes: 120
env:
WASMTIME_VER: ${{ needs.setup.outputs.wasmtime_ver }}
WASMER_VER: ${{ needs.setup.outputs.wasmer_ver }}
V8_VER: ${{ needs.setup.outputs.v8_ver }}
CC: gcc
container:
image: ghcr.io/kong/wasmx-build-centos:8
credentials:
username: ${{ github.repository_owner }}
password: ${{ secrets.TOKEN_GITHUB }}
steps:
- uses: actions/checkout@v3
- name: Build binary
run: ./util/release.sh ${{ needs.setup.outputs.release_name }} --bin
env:
GITHUB_OAUTH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
- uses: actions/upload-artifact@v4
if: failure()
with:
name: ${{ github.workflow }}-${{ github.job }}-sha-${{ github.sha }}-run-${{ github.run_number }}
path: work/dist/build/*
binary-arch:
name: "Build ArchLinux binary"
needs: [setup, build-images]
runs-on: ubuntu-latest
timeout-minutes: 120
env:
WASMTIME_VER: ${{ needs.setup.outputs.wasmtime_ver }}
WASMER_VER: ${{ needs.setup.outputs.wasmer_ver }}
V8_VER: ${{ needs.setup.outputs.v8_ver }}
container:
image: ghcr.io/kong/wasmx-build-arch:latest
credentials:
username: ${{ github.repository_owner }}
password: ${{ secrets.TOKEN_GITHUB }}
steps:
- uses: actions/checkout@v3
- name: Build binary
run: ./util/release.sh ${{ needs.setup.outputs.release_name }} --bin
env:
GITHUB_OAUTH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
- uses: actions/upload-artifact@v3
if: failure()
with:
name: ${{ github.workflow }}-${{ github.job }}-sha-${{ github.sha }}-run-${{ github.run_number }}
path: work/dist/build/*
binary-macos:
name: "Build macOS binary"
needs: [setup, build-images]
runs-on: macos-latest
timeout-minutes: 150
env:
WASMTIME_VER: ${{ needs.setup.outputs.wasmtime_ver }}
WASMER_VER: ${{ needs.setup.outputs.wasmer_ver }}
V8_VER: ${{ needs.setup.outputs.v8_ver }}
steps:
- uses: actions/checkout@v3
- name: Setup dependencies
run: |
brew install ninja openssh
python3 -m venv .python3_venv
source .python3_venv/bin/activate
python3 -m pip install setuptools
- name: Build binary
run: ./util/release.sh ${{ needs.setup.outputs.release_name }} --bin
env:
GITHUB_OAUTH_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: release-artifacts-${{ github.job }}
path: dist
retention-days: ${{ env.RETENTION_DAYS }}
- uses: actions/upload-artifact@v4
if: failure()
with:
name: ${{ github.workflow }}-${{ github.job }}-sha-${{ github.sha }}-run-${{ github.run_number }}
path: work/dist/build/*
upload-artifacts:
name: "Upload release artifacts"
needs: [setup, source-release, binary-ubuntu-bionic, binary-ubuntu-focal, binary-ubuntu-jammy, binary-ubuntu-jammy-arm, binary-centos7, binary-centos8, binary-arch, binary-macos]
runs-on: ubuntu-latest
timeout-minutes: ${{ fromJSON(vars.GHA_DEFAULT_TIMEOUT) }}
steps:
- name: Retrieve sibling release artifacts (legacy upload-artifact)
uses: actions/[email protected]
- name: Retrieve sibling release artifacts
uses: actions/[email protected]
with:
pattern: release-artifacts-*
merge-multiple: true
- name: Drop Wasmer binaries
run: find . -name '*wasmer*' | xargs rm -f
- name: List all collected assets
run: find . -name '*.tar.gz'
# Channel: nightly
- name: Nightly release
uses: marvinpinto/action-automatic-releases@latest
if: ${{ needs.setup.outputs.create_release == 'true' && needs.setup.outputs.release_channel == 'nightly' }}
with:
prerelease: true
title: ${{ needs.setup.outputs.release_name }}
automatic_release_tag: nightly
repo_token: ${{ secrets.GITHUB_TOKEN }}
files: |
*.tar.gz
# Channel: prerelease
- name: Prerelease
uses: marvinpinto/action-automatic-releases@latest
if: ${{ needs.setup.outputs.create_release == 'true' && needs.setup.outputs.release_channel == 'prerelease' }}
with:
draft: true
prerelease: true
title: Prerelease - ${{ needs.setup.outputs.release_version }}
automatic_release_tag: ${{ needs.setup.outputs.release_name }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
files: |
*.tar.gz
# Channel: release
- name: Release
uses: marvinpinto/action-automatic-releases@latest
if: ${{ needs.setup.outputs.create_release == 'true' && needs.setup.outputs.release_channel == 'release' }}
with:
draft: true
prerelease: false
title: Release - ${{ needs.setup.outputs.release_version }}
automatic_release_tag: ${{ needs.setup.outputs.release_name }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
files: |
*.tar.gz