Skip to content

Commit

Permalink
Add GitHub publish workflow for npm provenance
Browse files Browse the repository at this point in the history
  • Loading branch information
mtyszczak committed Sep 19, 2024
1 parent 04231b2 commit bc201bc
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
21 changes: 21 additions & 0 deletions .github/workflows/npm_publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Publish Package to npmjs
on:
push:
tags:
- "*.*.*" # This ensures the workflow runs on any newly created tag
workflow_dispatch: # This allows the workflow to be triggered manually
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
registry-url: 'https://registry.npmjs.org'
- run: ./scripts/publish_by_tag.sh 452 "${{ github.ref_name }}" "dist/hiveio-workerbee-${{ github.ref_name }}.tgz" build
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
36 changes: 36 additions & 0 deletions scripts/publish_by_tag.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash

# This script is intended to download artifacts from the latest pipeline with
# job named "build" from given GitLab project, and then publish it to npm with provenance
#
# Example usage for project WorkerBee:
#
# ./scripts/publish_by_tag.sh 452 1.27.6-rc5 "dist/hiveio-workerbee-1.27.6-rc5.tgz" build

set -e

PROJECT_ID=${1:?Missing arg \#1 - GitLab project id}
TAG=${2:?Missing arg \#2 - TAG name}
TGZ_PATH=${3:?Missing arg \#3 - TGZ Artifacts filepath}
JOB_NAME=${4:?Missing arg \#4 - Job name containing the tgz artifacts}

API_PREFIX="https://gitlab.syncad.com/api/v4/projects/${PROJECT_ID}"

CHECK_REPO_EXISTANCE_ERROR_MSG=$(curl -s "${API_PREFIX}" | jq -r ".message")

if [ "${CHECK_REPO_EXISTANCE_ERROR_MSG}" != "null" ]; then
echo "Error fetching source repository. Cause: \"${CHECK_REPO_EXISTANCE_ERROR_MSG}\""
exit 1
fi

TGZ_PULL_URL="${API_PREFIX}/jobs/artifacts/${TAG}/raw/${TGZ_PATH}?job=build"

TARGET_FILEPATH=/tmp/$(basename "${TGZ_PATH}")

echo "Downloading artifact from \"${TGZ_PULL_URL}\" to \"${TARGET_FILEPATH}\""

curl -o "${TARGET_FILEPATH}" "${TGZ_PULL_URL}"

echo "Publishing artifacts to npm with provenance for tag \"${TAG}\""

npm publish --access public --provenance "${TARGET_FILEPATH}"

0 comments on commit bc201bc

Please sign in to comment.