doc: Rework docs to align with Rust and other libs (#93) #74
This file contains 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
name: Release | |
on: | |
push: | |
branches: | |
- main | |
concurrency: ${{ github.workflow }}-${{ github.ref }} | |
jobs: | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
outputs: | |
published: ${{ steps.changesets.outputs.published }} | |
publishedPackages: ${{ steps.changesets.outputs.publishedPackages }} | |
env: | |
COREPACK_ENABLE_STRICT: 0 | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v3 | |
- name: Install pnpm | |
run: | | |
corepack enable | |
corepack prepare pnpm@latest --activate | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
cache: pnpm | |
- name: Install Dependencies | |
env: | |
SKIP_RUST_BUILD: 1 | |
run: pnpm install | |
- name: Create Release Pull Request or Publish to npm | |
id: changesets | |
uses: changesets/action@v1 | |
with: | |
publish: pnpm release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Check object | |
run: | | |
cat << OBJECT | |
${{ toJson(steps.changesets.outputs) }} | |
OBJECT | |
release-binaries: | |
needs: release | |
if: needs.release.outputs.published == 'true' | |
name: Build binaries for ${{matrix.target}} | |
runs-on: ${{matrix.runner}} | |
env: | |
PUBLISHED_VERSION: ${{ fromJson(needs.release.outputs.publishedPackages)[0].version }} | |
COREPACK_ENABLE_STRICT: 0 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- target: aarch64-unknown-linux-gnu | |
runner: ubuntu-latest | |
- target: x86_64-unknown-linux-gnu | |
runner: ubuntu-latest | |
- target: aarch64-apple-darwin | |
runner: macos-14 | |
- target: x86_64-apple-darwin | |
runner: macos-13 | |
- target: x86_64-pc-windows-msvc | |
runner: windows-latest | |
steps: | |
- name: Show published packages | |
run: | | |
echo '${{ needs.release.outputs.publishedPackages }}' | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install system deps (aarch64-unknown-linux-gnu) | |
if: ${{matrix.target == 'aarch64-unknown-linux-gnu'}} | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
components: llvm-tools-preview | |
toolchain: 1.79.0 | |
target: ${{matrix.target}} | |
- name: Install pnpm | |
run: | | |
corepack enable | |
corepack prepare pnpm@latest --activate | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
cache: pnpm | |
- name: Cache Rust dependencies | |
uses: Swatinem/rust-cache@v2 | |
with: | |
shared-key: ${{matrix.target}} | |
- name: Install Node.js dependencies | |
env: | |
SKIP_RUST_BUILD: 1 | |
run: pnpm install | |
- name: Build library for aarch64-unknown-linux-gnu | |
if: ${{matrix.target == 'aarch64-unknown-linux-gnu'}} | |
env: | |
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc | |
CC_aarch64_unknown_linux_gnu: aarch64-linux-gnu-gcc | |
CXX_aarch64_unknown_linux_gnu: aarch64-linux-gnu-g++ | |
run: | | |
mkdir -p generated/${{matrix.target}} | |
pnpm run build:rust --target=${{matrix.target}} | |
- name: Build library | |
id: build-library | |
if: ${{!contains(fromJSON('["aarch64-unknown-linux-gnu"]'), matrix.target)}} | |
run: | | |
mkdir -p generated/${{matrix.target}} | |
pnpm run build:rust --target=${{matrix.target}} | |
- name: Package artifact | |
id: package-artifact | |
# This needs to be set so that this works on a Windows runner | |
shell: bash | |
env: | |
ARCHIVE_FILENAME: c2pa-node_${{matrix.target}}-v${{ env.PUBLISHED_VERSION || '-dev' }}.zip | |
run: | | |
cd generated | |
7z a -tzip "${{ env.ARCHIVE_FILENAME }}" c2pa.node | |
echo "archive=${{ env.ARCHIVE_FILENAME }}" >> "$GITHUB_OUTPUT" | |
- name: Upload artifact (development only) | |
id: upload-artifact | |
uses: actions/upload-artifact@v4 | |
if: needs.release.outputs.published != 'true' | |
with: | |
name: ${{ steps.package-artifact.outputs.archive }} | |
path: generated/${{ steps.package-artifact.outputs.archive }} | |
retention-days: 3 | |
- id: get-release-id | |
shell: bash | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
echo "id=$(curl -s -L \ | |
-H 'Accept: application/vnd.github+json' \ | |
-H 'Authorization: Bearer ${{ env.GITHUB_TOKEN }}' \ | |
-H 'X-GitHub-Api-Version: 2022-11-28' \ | |
https://api.github.com/repos/${{ github.repository }}/releases/tags/v${{ env.PUBLISHED_VERSION }} | jq '.id')" >> "$GITHUB_OUTPUT" | |
- name: Upload release asset | |
if: needs.release.outputs.published == 'true' | |
shell: bash | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
curl -L \ | |
-X POST \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "Authorization: Bearer ${{ env.GITHUB_TOKEN }}" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
-H "Content-Type: application/zip" \ | |
"https://uploads.github.com/repos/${{ github.repository }}/releases/${{ steps.get-release-id.outputs.id }}/assets?name=${{ steps.package-artifact.outputs.archive }}" \ | |
--data-binary "@generated/${{ steps.package-artifact.outputs.archive }}" |