Skip to content

chore: bump version to 0.1.18 #30

chore: bump version to 0.1.18

chore: bump version to 0.1.18 #30

Workflow file for this run

name: Release
on:
push:
tags:
- "v*"
env:
MIX_ENV: prod
ELIXIR_VERSION: "1.19"
OTP_VERSION: "28.3.1"
permissions:
contents: write
jobs:
# ---------------------------------------------------------------------------
# Extract version from the pushed tag
# ---------------------------------------------------------------------------
prepare:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.meta.outputs.version }}
steps:
- name: Extract version from tag
id: meta
run: |
VERSION="${GITHUB_REF_NAME#v}"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Releasing version: $VERSION"
# ---------------------------------------------------------------------------
# Build OTP releases on each native platform
# ---------------------------------------------------------------------------
build-binary:
needs: prepare
strategy:
matrix:
include:
- runner: macos-14
target: darwin-arm64
tarball: opal-server-darwin-arm64.tar.gz
- runner: macos-15-intel
target: darwin-x64
tarball: opal-server-darwin-x64.tar.gz
- runner: ubuntu-latest
target: linux-x64
tarball: opal-server-linux-x64.tar.gz
- runner: ubuntu-24.04-arm
target: linux-arm64
tarball: opal-server-linux-arm64.tar.gz
- runner: windows-2022
target: win32-x64
tarball: opal-server-win32-x64.tar.gz
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
elixir-version: ${{ env.ELIXIR_VERSION }}
otp-version: ${{ env.OTP_VERSION }}
- name: Install deps
run: cd opal && mix deps.get --only prod
- name: Build release (${{ matrix.target }})
run: cd opal && mix release opal_server --overwrite
- name: Package release tarball
shell: bash
run: |
cd opal/_build/prod/rel/opal_server
tar -czf ../../../../${{ matrix.tarball }} .
- name: Upload tarball
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.tarball }}
path: opal/${{ matrix.tarball }}
retention-days: 1
# ---------------------------------------------------------------------------
# Build CLI TypeScript package
# ---------------------------------------------------------------------------
build-cli:
needs: prepare
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: jdx/mise-action@v3
- name: Install deps
run: |
cd opal && mix deps.get
cd ../cli && pnpm install --frozen-lockfile
- name: Codegen + Build
run: mise run build
- name: Upload CLI dist
uses: actions/upload-artifact@v4
with:
name: cli-dist
path: |
cli/dist
cli/package.json
retention-days: 1
# ---------------------------------------------------------------------------
# Assemble and publish
# ---------------------------------------------------------------------------
publish:
needs: [prepare, build-binary, build-cli]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
elixir-version: ${{ env.ELIXIR_VERSION }}
otp-version: ${{ env.OTP_VERSION }}
- uses: actions/setup-node@v4
with:
node-version: 22
registry-url: https://registry.npmjs.org
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Assemble npm package
run: |
# CLI dist
cp -r artifacts/cli-dist/dist cli/dist
# OTP release tarballs
mkdir -p cli/releases
cp artifacts/opal-server-darwin-arm64.tar.gz/opal-server-darwin-arm64.tar.gz cli/releases/
cp artifacts/opal-server-darwin-x64.tar.gz/opal-server-darwin-x64.tar.gz cli/releases/
cp artifacts/opal-server-linux-x64.tar.gz/opal-server-linux-x64.tar.gz cli/releases/
cp artifacts/opal-server-linux-arm64.tar.gz/opal-server-linux-arm64.tar.gz cli/releases/
cp artifacts/opal-server-win32-x64.tar.gz/opal-server-win32-x64.tar.gz cli/releases/
echo "==> Package contents:"
ls -lh cli/releases/
- name: Publish to npm
run: cd cli && npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Install Elixir deps
run: cd opal && mix deps.get
env:
MIX_ENV: dev
- name: Publish to Hex
run: cd opal && mix hex.publish --yes
env:
MIX_ENV: dev
HEX_API_KEY: ${{ secrets.HEX_API_KEY }}
- name: Upload tarballs to GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.prepare.outputs.version }}
files: |
artifacts/opal-server-darwin-arm64.tar.gz/*
artifacts/opal-server-darwin-x64.tar.gz/*
artifacts/opal-server-linux-x64.tar.gz/*
artifacts/opal-server-linux-arm64.tar.gz/*
artifacts/opal-server-win32-x64.tar.gz/*