Chore/publish as package #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and publish [ALPHA] | |
on: | |
issue_comment: | |
types: [ created ] | |
pull_request: | |
types: [ opened, synchronize ] | |
jobs: | |
################## | |
# Alpha versions # | |
################## | |
publish-alpha: | |
if: | | |
(github.event_name == 'issue_comment' && | |
github.event.issue.pull_request && | |
contains(github.event.comment.body, 'build')) || | |
github.event_name == 'pull_request' | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
packages: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: ./.github/actions/setup-node-pnpm | |
- name: Build | |
run: pnpm build | |
# For PRs: Publish alpha version | |
- name: Version and publish alpha | |
run: | | |
# Get lastest version from package.json | |
CURRENT_VERSION=$(node -p "require('./package.json').version") | |
PR_NUMBER=${{ github.event.pull_request.number }} | |
COMMIT-SHA="${{ github.sha }}" | |
# Create alpha version | |
ALPHA_VERSION="${CURRENT_VERSION}-alpha.pr${PR_NUMBER}.CI-${COMMIT_SHA}" | |
# Update package.json version | |
pnpm version $ALPHA_VERSION --no-git-tag-version | |
# Publish alpha version to registry | |
pnpm publish --tag alpha | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Remove old alpha versions | |
run: | | |
# Get the alpha versions and their publish dates | |
ALPHA_INFO=$(npm view $PACKAGE_NAME time --json | jq 'to_entries | map(select(.key | contains("-alpha"))) | map({version: .key, date: .value})') | |
CURRENT_DATE=$(date +%s) | |
REMOVE_DAYS=5 | |
# 5 days in seconds | |
REMOVE_DAYS_IN_SECONDS=$((REMOVE_DAYS * 24 * 60 * 60)) | |
# Process each alpha version | |
echo "$ALPHA_INFO" | jq -c '.[]' | while read -r VERSION_DATA; do | |
VERSION=$(echo "$VERSION_DATA" | jq -r '.version') | |
PUBLISH_DATE=$(echo "$VERSION_DATA" | jq -r '.date') | |
PUBLISH_DATE_SECONDS=$(date -d "$PUBLISH_DATE" +%s) | |
DIFF_SECONDS=$((CURRENT_DATE - PUBLISH_DATE_SECONDS)) | |
if [ $DIFF_SECONDS -gt $REMOVE_DAYS_IN_SECONDS ]; then | |
echo "Removing ($VERSION) published more than $FIVE_DAYS days ago" | |
npm unpublish "${PACKAGE_NAME}@${VERSION}" --force || true | |
fi | |
done | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} |