Skip to content

Adding rc publishing #6

Adding rc publishing

Adding rc publishing #6

name: Build and Release
on:
push:
branches: [ fabisev/artifact-publishing ]
tags: [ 'v*', 'rc-*' ]
pull_request:
branches: [ main ]
workflow_dispatch:
inputs:
test_mode:
description: 'Test mode (release, rc, or none)'
required: true
default: 'none'
type: choice
options:
- none
- release
- rc
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install and lint
run: |
npm ci
npm run lint
npm run format
build:
runs-on: ubuntu-latest
needs: [lint]
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Get version
id: version
run: |
BASE_VERSION=$(node -p "require('./package.json').version")
VERSION="${BASE_VERSION}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Cache native dependencies
uses: actions/cache@v4
with:
path: |
deps/
build/
key: native-deps-${{ runner.os }}-${{ hashFiles('deps/versions', 'binding.gyp') }}
- name: Install and build
run: |
npm ci
npm run build
npm pack
- name: Generate checksums and signatures
run: |
PACKAGE_FILE=$(ls aws-lambda-ric-*.tgz)
sha256sum $PACKAGE_FILE > checksums.sha256
sha512sum $PACKAGE_FILE > checksums.sha512
cat checksums.sha256 checksums.sha512 > checksums.txt
echo "Package: $PACKAGE_FILE with version prefix: ${{ steps.version.outputs.version }}" >> checksums.txt
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: package-${{ steps.version.outputs.version }}
path: |
aws-lambda-ric-*.tgz
checksums.*
retention-days: 30
test:
runs-on: ubuntu-latest
needs: [build]
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- name: Run unit tests - Node ${{ matrix.node-version }}
run: |
docker build -f test/unit/Dockerfile.nodejs${{ matrix.node-version }}.x -t unit/nodejs.${{ matrix.node-version }}x .
docker run --rm unit/nodejs.${{ matrix.node-version }}x
publish:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs: [build, test]
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: package-${{ needs.build.outputs.version }}
- name: Verify checksums
run: |
sha256sum -c checksums.sha256
sha512sum -c checksums.sha512
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
# Handle release candidate version if needed
- name: Determine version
id: version
run: |
if [[ "${{ github.ref }}" == refs/tags/rc-* ]]; then
RC_NUMBER=${GITHUB_REF#refs/tags/rc-}
PACKAGE_VERSION="${{ needs.build.outputs.version }}-rc.${RC_NUMBER}"
echo "package_version=$PACKAGE_VERSION" >> $GITHUB_OUTPUT
echo "is_rc=true" >> $GITHUB_OUTPUT
# Update package.json version to include RC suffix
npm version $PACKAGE_VERSION --no-git-tag-version
else
echo "package_version=${{ needs.build.outputs.version }}" >> $GITHUB_OUTPUT
echo "is_rc=false" >> $GITHUB_OUTPUT
fi
# Commented out npm publishing until token is available
# - name: Publish to npm
# run: |
# if [[ "${{ steps.version.outputs.is_rc }}" == "true" ]]; then
# npm publish aws-lambda-ric-*.tgz --tag rc
# else
# npm publish aws-lambda-ric-*.tgz
# fi
# env:
# NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: |
aws-lambda-ric-*.tgz
checksums.sha256
checksums.sha512
checksums.txt
prerelease: ${{ steps.version.outputs.is_rc }}
name: ${{ steps.version.outputs.is_rc == 'true' && format('Release Candidate {0}', steps.version.outputs.package_version) || '' }}
generate_release_notes: true
test-publish:
if: github.event_name == 'workflow_dispatch' && github.event.inputs.test_mode != 'none'
runs-on: ubuntu-latest
needs: [build, test]
steps:
- uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: package-${{ needs.build.outputs.version }}
- name: Verify checksums
run: |
sha256sum -c checksums.sha256
sha512sum -c checksums.sha512
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Test Release Publishing
if: github.event.inputs.test_mode == 'release'
run: |
echo "=== TESTING RELEASE PUBLISHING (DRY RUN) ==="
echo "Would create a GitHub release with the following files:"
ls -la aws-lambda-ric-*.tgz checksums.*
echo "\nRelease would include version: ${{ needs.build.outputs.version }}"
- name: Test RC Publishing
if: github.event.inputs.test_mode == 'rc'
run: |
echo "=== TESTING RC PUBLISHING (DRY RUN) ==="
# Simulate RC version
RC_NUMBER="1"
PACKAGE_VERSION="${{ needs.build.outputs.version }}-rc.${RC_NUMBER}"
echo "Would create a GitHub pre-release with the following files:"
ls -la aws-lambda-ric-*.tgz checksums.*
echo "\nRelease would include version: ${PACKAGE_VERSION}"
# Update version for display purposes
npm version ${PACKAGE_VERSION} --no-git-tag-version