Skip to content

Fabisev/artifact publishing #56

Fabisev/artifact publishing

Fabisev/artifact publishing #56

name: Build and Release
on:
push:
branches: [ main ]
tags: [ 'v*', 'rc-*' ]
pull_request:
branches: [ main ]
workflow_dispatch:
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: codebuild-project-awsaws-lambda-nodejs-runtime-interface-client-${{ github.run_id }}-${{ github.run_attempt }}
timeout-minutes: 15
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")
echo "version=$BASE_VERSION" >> $GITHUB_OUTPUT
- name: Install build dependencies
run: |
apt-get update
apt-get install -y cmake make g++
- name: Clean and build
run: |
rm -rf deps/*/build
npm ci
npm run build
npm pack
- name: Generate checksums
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: ${{ 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: codebuild-project-awsaws-lambda-nodejs-runtime-interface-client-${{ github.run_id }}-${{ github.run_attempt }}
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: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Setup NPM authentication
run: |
NPM_TOKEN=$(aws secretsmanager get-secret-value --secret-id aws-lambda-runtimes/github/nodejs/npm-token --query SecretString --output text)
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc
chmod 0600 .npmrc
- name: Determine version and package name
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
npm version $PACKAGE_VERSION --no-git-tag-version
else
echo "package_version=${{ needs.build.outputs.version }}" >> $GITHUB_OUTPUT
npm version ${{ needs.build.outputs.version }} --no-git-tag-version
fi
npm pack
- name: Publish to npm
run: |
PACKAGE_FILE=$(ls aws-lambda-ric-*.tgz)
if [[ "${{ steps.version.outputs.is_rc }}" == "true" ]]; then
npm publish $PACKAGE_FILE --tag rc --access=public
else
npm publish $PACKAGE_FILE --access=public
fi
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: |
aws-lambda-ric-*.tgz
checksums.sha256
checksums.sha512
checksums.txt
prerelease: ${{ steps.version.outputs.is_rc }}