Skip to content

CI | Publish npm repository package #1602

CI | Publish npm repository package

CI | Publish npm repository package #1602

Workflow file for this run

name: CI | Publish npm repository package
on:
push:
branches: ['master']
pull_request:
branches: ['master']
workflow_dispatch:
inputs:
message:
description: 'Changelog message for the build'
required: false
default: ''
deploy_conf_id:
description: 'Engine conf ID to dispatch after build'
required: false
default: ''
deploy_type:
description: 'Deployment type for the engine conf CD (sync-and-deploy or init)'
required: false
default: ''
permissions:
contents: write
packages: write
id-token: write
jobs:
pwa-microservices-template:
if: |
github.repository == 'underpostnet/engine'
&& (
startsWith(github.event.head_commit.message, 'ci(package-pwa-microservices-template')
|| github.event_name == 'workflow_dispatch'
)
name: Update npm repo package Jobs
runs-on: ubuntu-latest
container:
image: quay.io/rockylinux/rockylinux:9
permissions:
contents: write
packages: write
id-token: write
steps:
- uses: actions/checkout@v7
- name: Install required packages
run: |
dnf install -y sudo tar gzip bzip2 git
dnf install -y curl --allowerasing
- name: Install Node.js
run: |
curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -
dnf install nodejs -y
- name: Capture commit message
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
LAST_COMMIT_MESSAGE="${{ github.event.inputs.message }}"
if [ -z "$LAST_COMMIT_MESSAGE" ]; then
LAST_COMMIT_MESSAGE="Update repository"
fi
else
FULL_MSG="${{ github.event.head_commit.message }}"
REST="$(echo "$FULL_MSG" | tail -n +2 | awk 'NR==1{first=$0; has_first=1; next} NR==2{print first " " $0; has_first=0; next} {print} END{if(has_first) print first}')"
LAST_COMMIT_MESSAGE="${REST:-$FULL_MSG}"
fi
echo "LAST_COMMIT_MESSAGE<<EOF" >> $GITHUB_ENV
echo "$LAST_COMMIT_MESSAGE" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
echo "[INFO] Extracted payload: $LAST_COMMIT_MESSAGE"
- name: Install dependencies
run: npm install
- name: Set git global credentials
run: |
git config --global --add safe.directory '*'
git config --global credential.helper ""
git config --global user.name 'underpostnet'
git config --global user.email 'fcoverdugoa@underpost.net'
- name: Clone github package repository
env:
GITHUB_TOKEN: ${{ secrets.GIT_AUTH_TOKEN }}
GITHUB_USERNAME: ${{ github.repository_owner }}
run: |
cd .. && node engine/bin clone underpostnet/pwa-microservices-template
cd engine
npm run build:template
cd ../pwa-microservices-template
git remote set-url origin git@github.com:underpostnet/pwa-microservices-template.git
git add .
git config user.name 'underpostnet'
git config user.email 'fcoverdugoa@underpost.net'
if git diff --cached --quiet; then
echo "[INFO] No template changes to publish; skipping commit and push."
else
node ../engine/bin cmt . ci package-pwa-microservices-template-ghpkg "$LAST_COMMIT_MESSAGE"
node ../engine/bin push . underpostnet/pwa-microservices-template
fi
- name: Dispatch all engine CIs
run: |
DEPLOY_CONF_ID="${{ github.event.inputs.deploy_conf_id }}"
DEPLOY_TYPE="${{ github.event.inputs.deploy_type }}"
for ENGINE in engine-core engine-prototype engine-cyberia engine-lampp engine-test; do
SYNC="false"
DT=""
if [ "$ENGINE" = "$DEPLOY_CONF_ID" ]; then
SYNC="true"
DT="$DEPLOY_TYPE"
fi
echo "[INFO] Dispatching ${ENGINE}.ci.yml (sync=$SYNC, deploy_type=$DT)"
# Build the payload with node so the propagated message (may contain quotes/newlines)
# is JSON-escaped safely, and forward it so every engine-* repo shares one message.
PAYLOAD=$(SYNC="$SYNC" DT="$DT" MSG="$LAST_COMMIT_MESSAGE" node -e '
const i = { sync: process.env.SYNC };
if (process.env.DT) i.deploy_type = process.env.DT;
if (process.env.MSG) i.message = process.env.MSG;
process.stdout.write(JSON.stringify({ ref: "master", inputs: i }));
')
curl -s -X POST \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${{ secrets.GIT_AUTH_TOKEN }}" \
"https://api.github.com/repos/underpostnet/engine/actions/workflows/${ENGINE}.ci.yml/dispatches" \
-d "$PAYLOAD"
done