mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
134 lines
4.0 KiB
YAML
134 lines
4.0 KiB
YAML
name: Publish to npm
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: "Version to publish (e.g. 2.9.5 or 3.0.0-rc.15)"
|
|
required: true
|
|
type: string
|
|
tag:
|
|
description: "npm dist-tag (latest / next)"
|
|
required: false
|
|
default: "latest"
|
|
type: choice
|
|
options:
|
|
- latest
|
|
- next
|
|
workflow_call:
|
|
inputs:
|
|
version:
|
|
description: "Version to publish (without v prefix)"
|
|
required: true
|
|
type: string
|
|
tag:
|
|
description: "npm dist-tag (latest / next)"
|
|
required: false
|
|
default: "latest"
|
|
type: string
|
|
secrets:
|
|
NPM_TOKEN:
|
|
required: true
|
|
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|
|
packages: write
|
|
|
|
env:
|
|
NPM_PUBLISH_NODE_VERSION: "24"
|
|
|
|
jobs:
|
|
publish:
|
|
runs-on: ubuntu-latest
|
|
environment: NPM_TOKEN
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: ${{ env.NPM_PUBLISH_NODE_VERSION }}
|
|
registry-url: https://registry.npmjs.org
|
|
|
|
- name: Install dependencies (skip scripts to avoid heavy build)
|
|
run: npm install --ignore-scripts --no-audit --no-fund
|
|
|
|
- name: Resolve version and dist-tag
|
|
id: resolve
|
|
run: |
|
|
VERSION="${{ inputs.version }}"
|
|
TAG="${{ inputs.tag }}"
|
|
|
|
if [ -z "$VERSION" ]; then
|
|
if [ "${{ github.event_name }}" = "release" ]; then
|
|
VERSION="${GITHUB_REF_NAME}"
|
|
fi
|
|
fi
|
|
|
|
# Strip v prefix if present
|
|
VERSION="${VERSION#v}"
|
|
|
|
# Default dist-tag logic
|
|
if [ -z "$TAG" ]; then
|
|
if [[ "$VERSION" == *-* ]]; then
|
|
TAG="next"
|
|
else
|
|
TAG="latest"
|
|
fi
|
|
fi
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
echo "📦 Publishing omniroute@$VERSION with tag=$TAG"
|
|
|
|
- name: Sync package.json version
|
|
run: |
|
|
npm version "${{ steps.resolve.outputs.version }}" --no-git-tag-version --allow-same-version
|
|
|
|
- name: Build CLI bundle (standalone app)
|
|
env:
|
|
JWT_SECRET: ci-build-secret-with-sufficient-length-for-validation
|
|
run: npm run build:cli
|
|
|
|
- name: Validate npm package artifact
|
|
run: npm run check:pack-artifact
|
|
|
|
- name: Publish to npm
|
|
run: |
|
|
VERSION="${{ steps.resolve.outputs.version }}"
|
|
TAG="${{ steps.resolve.outputs.tag }}"
|
|
# Check if this version is already published — skip instead of failing with E403
|
|
if npm view "omniroute@${VERSION}" version --silent 2>/dev/null | grep -q "^${VERSION}$"; then
|
|
echo "⚠️ Version ${VERSION} is already published on npm — skipping."
|
|
exit 0
|
|
fi
|
|
if [ "$TAG" = "latest" ]; then
|
|
npm publish --access public
|
|
else
|
|
npm publish --access public --tag "$TAG"
|
|
fi
|
|
echo "✅ Published omniroute@$VERSION (tag: $TAG)"
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
- name: Publish to GitHub Packages
|
|
run: |
|
|
VERSION="${{ steps.resolve.outputs.version }}"
|
|
TAG="${{ steps.resolve.outputs.tag }}"
|
|
|
|
echo "Configuring for GitHub Packages..."
|
|
echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > .npmrc
|
|
npm pkg set name="@diegosouzapw/omniroute"
|
|
|
|
if [ "$TAG" = "latest" ]; then
|
|
npm publish --registry=https://npm.pkg.github.com || echo "⚠️ Version ${VERSION} might already be published on GitHub."
|
|
else
|
|
npm publish --registry=https://npm.pkg.github.com --tag "$TAG" || echo "⚠️ Version ${VERSION} might already be published on GitHub."
|
|
fi
|
|
echo "✅ Action finished for GitHub Packages"
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|