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