@@ -12,38 +12,50 @@ concurrency:
cancel-in-progress : true
jobs :
install :
name : 📦 Install & Sync
prioritize :
name : ⚡ Prioritize Release
runs-on : docker
container :
image : catthehacker/ubuntu:act-latest
env :
NPM_TOKEN : ${{ secrets.NPM_TOKEN }}
steps :
- name : Checkout
uses : actions/checkout@v4
- name : Install pnpm
uses : pnpm/action-setup@v4
with :
version : 10
- name : Set up Node.js
uses : actions/setup-node@v4
with :
node_version : 20
cache : 'pnpm'
- name : Install dependencies
run : pnpm install --frozen-lockfile
- name : 🏷️ Sync Versions (if Tagged)
if : startsWith(github.ref, 'refs/tags/v')
run : pnpm sync-versions
- name : 🛑 Cancel Redundant Runs
env :
GITEA_TOKEN : ${{ secrets.GITHUB_TOKEN }}
REPO : ${{ github.repository }}
RUN_ID : ${{ github.run_id }}
REF : ${{ github.ref }}
REF_NAME : ${{ github.ref_name }}
EVENT : ${{ github.event_name }}
run : |
echo "🔎 Debug: Event=$EVENT, Ref=$REF, RefName=$REF_NAME, RunId=$RUN_ID"
if [[ "$REF" == refs/tags/v* ]]; then
echo "🚀 Release detected ($REF_NAME). Cancelling non-tag runs..."
# Fetch all runs
RUNS=$(curl -s -H "Authorization: token $GITEA_TOKEN" "https://git.infra.mintel.me/api/v1/repos/$REPO/actions/runs")
# Identify runs to cancel: in_progress/queued, NOT this run, and NOT a tag run
echo "$RUNS" | jq -c '.workflow_runs[] | select(.status == "in_progress" or .status == "queued") | select(.id | tostring != "'$RUN_ID'")' | while read -r run; do
ID=$(echo "$run" | jq -r '.id')
RUN_REF=$(echo "$run" | jq -r '.ref')
TITLE=$(echo "$run" | jq -r '.display_title')
if [[ "$RUN_REF" != refs/tags/v* ]]; then
echo "🛑 Cancelling redundant branch run $ID ($TITLE) on $RUN_REF..."
curl -X POST -s -H "Authorization: token $GITEA_TOKEN" "https://git.infra.mintel.me/api/v1/repos/$REPO/actions/runs/$ID/cancel"
else
echo "⏭️ Skipping parallel release run $ID ($TITLE) on $RUN_REF"
fi
done
else
echo "ℹ ️ Regular push. No prioritazation needed."
fi
lint :
name : 🧹 Lint
needs : install
needs : prioritize
if : always() && !cancelled() && (needs.prioritize.result == 'success' || needs.prioritize.result == 'skipped')
runs-on : docker
container :
image : catthehacker/ubuntu:act-latest
@@ -52,23 +64,21 @@ jobs:
steps :
- name : Checkout
uses : actions/checkout@v4
- name : Install pnpm
uses : pnpm/action-setup@v4
with :
version : 10
- name : Set up Node.js
uses : actions/setup-node@v4
with :
node_version : 20
cache : ' pnpm'
- name : Enable pnpm
run : corepack enable && corepack prepare pnpm@10.2.0 --activate
- name : Install dependencies
run : pnpm install --frozen-lockfile --prefer-offline
run : pnpm install --frozen-lockfile --prefer-offline --ignore-scripts --no-color
- name : Lint
run : pnpm lint
test :
name : 🧪 Test
needs : install
needs : prioritize
if : always() && !cancelled() && (needs.prioritize.result == 'success' || needs.prioritize.result == 'skipped')
runs-on : docker
container :
image : catthehacker/ubuntu:act-latest
@@ -77,23 +87,21 @@ jobs:
steps :
- name : Checkout
uses : actions/checkout@v4
- name : Install pnpm
uses : pnpm/action-setup@v4
with :
version : 10
- name : Set up Node.js
uses : actions/setup-node@v4
with :
node_version : 20
cache : ' pnpm'
- name : Enable pnpm
run : corepack enable && corepack prepare pnpm@10.2.0 --activate
- name : Install dependencies
run : pnpm install --frozen-lockfile --prefer-offline
run : pnpm install --frozen-lockfile --prefer-offline --ignore-scripts --no-color
- name : Test
run : pnpm test
build :
name : 🏗️ Build
needs : install
needs : prioritize
if : always() && !cancelled() && (needs.prioritize.result == 'success' || needs.prioritize.result == 'skipped')
runs-on : docker
container :
image : catthehacker/ubuntu:act-latest
@@ -102,17 +110,14 @@ jobs:
steps :
- name : Checkout
uses : actions/checkout@v4
- name : Install pnpm
uses : pnpm/action-setup@v4
with :
version : 10
- name : Set up Node.js
uses : actions/setup-node@v4
with :
node_version : 20
cache : ' pnpm'
- name : Enable pnpm
run : corepack enable && corepack prepare pnpm@10.2.0 --activate
- name : Install dependencies
run : pnpm install --frozen-lockfile --prefer-offline
run : pnpm install --frozen-lockfile --prefer-offline --ignore-scripts --no-color
- name : Build
run : pnpm build
@@ -131,21 +136,16 @@ jobs:
uses : actions/checkout@v4
with :
fetch-depth : 0
- name : Install pnpm
uses : pnpm/action-setup@v4
with :
version : 10
- name : Set up Node.js
uses : actions/setup-node@v4
with :
node_version : 20
cache : ' pnpm'
- name : Enable pnpm
run : corepack enable && corepack prepare pnpm@10.2.0 --activate
- name : Install dependencies
run : pnpm install --frozen-lockfile --prefer-offline
run : pnpm install --frozen-lockfile --prefer-offline --ignore-scripts --no-color
- name : 🏷️ Sync Versions (if Tagged)
run : pnpm sync-versions
- name : 🏷️ Release Packages (Tag-Driven)
run : |
echo "🏷️ Tag detected [${{ github.ref_name }}], performing sync release..."