Skip to content

Artifact Publishing

Artifact Publishing #1

Workflow file for this run

name: Release
on:
workflow_dispatch:
inputs:
version:
description: 'Version of Web5 to release and publish to Maven Central. For example "1.0.0" or "1.3.7-beta-2". Required. Must not end in "-SNAPSHOT".'
required: true
# TODO: Remove
pull_request:
branches:
- main
env:
WEB5_SDK_LOG_LEVEL: debug
jobs:
run-ci:
# This will run CI and also publish the Kotlin release to the Maven Central
name: Run CI
uses: TBD54566975/web5-rs/.github/workflows/ci.yml@main
secrets: inherit
with:
version: ${{ github.event.inputs.version }}
git-tag:
runs-on: ubuntu-latest
needs: run-ci
outputs:
RELEASE_TAG: ${{ steps.set-version-and-tag.outputs.RELEASE_TAG }}
RELEASE_VERSION: ${{ steps.set-version-and-tag.outputs.RELEASE_VERSION }}
name: Create Git Tag
steps:
- id: checkout
uses: actions/checkout@v4
with:
submodules: true
token: ${{ secrets.GITHUB_TOKEN }}
# Set Git configuration
- id: set-git-config
name: Set Git Config
run: |
git config user.name "web5-releases"
git config user.email "[email protected]"
# Cache Maven repository
- id: cache
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- id: set-version-and-tag
name: Set version of Kotlin and commit
run: |
# Navigate to the Kotlin project directory
cd sdk/kt/
# Get the required provided version
version=${{ github.event.inputs.version }}
# Precondition check; do not allow this to proceed if a version ending in "-SNAPSHOT" was specified
if [[ $version =~ -SNAPSHOT$ ]]; then
echo "Error: The version for release must not end with \"-SNAPSHOT\": $version"
exit 1
fi
# Get the existing version from the POM and set it to the nextVersion
nextVersion=$(grep -oPm1 "(?<=<version>)[^<]+" pom.xml)
if [[ -z $nextVersion ]]; then
echo "Error: Could not find a version in the pom.xml"
exit 1
fi
echo "Version to be released: $version"
echo "Setting next development version back to original in pom.xml: $nextVersion"
# Set newly resolved version in POM config
mvn \
versions:set \
--batch-mode \
-DnewVersion=$version
# Commit changes
git add -Av
git commit -m "[Web5 Release Manager 🚀] Setting version to: $version"
tagName=v$version
git tag -a $tagName -m "Tag version: $tagName" # We tag with a prefix of "v"
# Output variables for subsequent jobs
echo "RELEASE_TAG=$tagName" >> "$GITHUB_OUTPUT"
echo "RELEASE_VERSION=$version" >> "$GITHUB_OUTPUT"
cat $GITHUB_OUTPUT
# Set the next development version and commit and push
mvn \
versions:set \
--batch-mode \
-DnewVersion=$nextVersion
git add -Av
git commit -m "[Web5 Release Manager 🚀] Setting next development version after $version to: $nextVersion"
git push origin main
git push origin $tagName
kotlin-release-to-maven-central:
name: Release Kotlin to Maven Central
needs: git-tag
runs-on: ubuntu-latest
steps:
# Check out the tag we created above
- uses: actions/checkout@v4
with:
submodules: true
ref: ${{ needs.git-tag.outputs.RELEASE_TAG }}
# Set up JDK
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: "temurin"
java-version: "11"
# Cache Maven repository
- uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
# Download native libraries
- name: Download MacOS aarch64 Native Library
uses: actions/download-artifact@v3
with:
name: aarch64-apple-darwin-dylib
path: sdk/kt/src/main/resources/
- name: Download MacOS x86_64 Native Library
uses: actions/download-artifact@v3
with:
name: x86_64-apple-darwin-dylib
path: sdk/kt/src/main/resources/
- name: Download Linux x86_64 GNU Native Library
uses: actions/download-artifact@v3
with:
name: x86_64-unknown-linux-gnu-so
path: sdk/kt/src/main/resources/
- name: Download Linux x86_64 MUSL Native Library
uses: actions/download-artifact@v3
with:
name: x86_64-unknown-linux-musl-so
path: sdk/kt/src/main/resources/
- name: Download Windows x86_64 MSVC Native Library
uses: actions/download-artifact@v3
with:
name: x86_64-pc-windows-msvc-dll
path: sdk/kt/src/main/resources/
- name: Deploy Release Version of Kotlin Project to Maven Central
run: |
# Navigate to the Kotlin project directory
cd sdk/kt/
# Publish to Sonatype
if [ -n "${{ secrets.SONATYPE_PASSWORD }}" ]; then
# Maven deploy lifecycle will build, run tests, verify, sign, and deploy
mvn deploy --batch-mode \
--settings .maven_settings.xml \
-P ossrh,sign-artifacts
else
echo "Error: No credentials"
exit 1
fi
env:
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SIGN_KEY_PASS: ${{ secrets.GPG_SECRET_PASSPHRASE }}
SIGN_KEY: ${{ secrets.GPG_SECRET_KEY }}
#name: Build release artifacts
#
#on:
# release:
# types: [created]
#
#jobs:
# build_cli_aarch64-apple-darwin:
# runs-on: macos-latest
# name: aarch64-apple-darwin
# steps:
# - uses: actions/checkout@v2
# - name: Install Rust
# run: rustup toolchain install stable
# - name: cargo build
# run: |
# cargo build --target aarch64-apple-darwin --release --package web5_cli
# cp -v target/aarch64-apple-darwin/release/web5_cli web5_cli-aarch64-apple-darwin
# - name: upload release asset
# uses: AButler/[email protected]
# with:
# files: web5_cli-aarch64-apple-darwin
# repo-token: ${{ secrets.GITHUB_TOKEN }}
#
# build_cli_x86_64_apple_darwin:
# runs-on: macos-12
# name: x86_64-apple-darwin
# steps:
# - uses: actions/checkout@v2
# - name: Install Rust
# run: rustup toolchain install stable
# - name: cargo build
# run: |
# cargo build --target x86_64-apple-darwin --release --package web5_cli
# cp -v target/x86_64-apple-darwin/release/web5_cli web5_cli-x86_64-apple-darwin
# - name: upload release asset
# uses: AButler/[email protected]
# with:
# files: web5_cli-x86_64-apple-darwin
# repo-token: ${{ secrets.GITHUB_TOKEN }}
#
# build_cli_x86_64_unknown_linux_gnu:
# runs-on: ubuntu-latest
# name: x86_64-unknown-linux-gnu
# steps:
# - uses: actions/checkout@v2
# - name: cargo build
# run: |
# cargo build --target x86_64-unknown-linux-gnu --release --package web5_cli
# cp -v target/x86_64-unknown-linux-gnu/release/web5_cli web5_cli-x86_64-unknown-linux-gnu
# - name: upload release asset
# uses: AButler/[email protected]
# with:
# files: web5_cli-x86_64-unknown-linux-gnu
# repo-token: ${{ secrets.GITHUB_TOKEN }}
#
# build_cli_x86_64_unknown_linux_musl:
# runs-on: ubuntu-latest
# name: x86_64-unknown-linux-musl
# steps:
# - uses: actions/checkout@v2
# - name: Run Build Script
# run: |
# pushd crates/web5_cli/build/x86_64_unknown_linux_musl
# ./build
# popd
# cp target/x86_64-unknown-linux-musl/release/web5_cli web5_cli-x86_64-unknown-linux-musl
# - name: upload release asset
# uses: AButler/[email protected]
# with:
# files: web5_cli-x86_64-unknown-linux-musl
# repo-token: ${{ secrets.GITHUB_TOKEN }}
#
# kotlin-docs:
# permissions:
# contents: read
# pages: write
# id-token: write
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - name: Set up JDK 11
# uses: actions/setup-java@v3
# with:
# distribution: "adopt"
# java-version: "11"
# - uses: actions/cache@v3
# with:
# path: ~/.m2/repository
# key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
# restore-keys: |
# ${{ runner.os }}-maven-
# - run: mvn dokka:dokka
# working-directory: bound/kt
# - run: mkdir _site && mv bound/kt/target/dokka _site/kt
# - name: Setup Pages
# uses: actions/configure-pages@v5
# - name: Upload artifact
# uses: actions/upload-pages-artifact@v3
# with:
# path: _site
# - name: Deploy to GitHub Pages
# id: deployment
# uses: actions/deploy-pages@v4