Skip to content

Test, build, publish #119

Test, build, publish

Test, build, publish #119

Workflow file for this run

name: 'Test, build, publish'
on:
push:
branches:
- main
pull_request:
workflow_dispatch:
permissions:
contents: write
id-token: write
jobs:
install-dependencies:
name: Install Node.js dependencies
runs-on: ubuntu-latest
env:
cache-name: cache-node-modules
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: 16.14.0
- name: Compute hash key
id: hash-key
run: echo "hash=${{ hashFiles('**/package-lock.json') }}" >> "$GITHUB_OUTPUT"
- name: Cache Node modules
id: cache-npm
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.hash-key.outputs.hash }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Install dependencies
run: npm ci
outputs:
cache-key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.hash-key.outputs.hash }}
check-prettier:
name: Check Prettier formatting
runs-on: ubuntu-latest
needs: [install-dependencies]
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: 16.14.0
- name: Restore dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ needs.install-dependencies.outputs.cache-key }}
- name: Check prettier formatting
run: npm run format:check
check-types:
name: Check TypeScript
runs-on: ubuntu-latest
needs: [install-dependencies]
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: 16.14.0
- name: Restore dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ needs.install-dependencies.outputs.cache-key }}
- name: Check types
run: npx tsc
run-cypress:
name: Run Cypress tests
runs-on: ubuntu-latest
needs: [install-dependencies]
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: 16.14.0
- name: Restore dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ needs.install-dependencies.outputs.cache-key }}
- name: Run Cypress tests
uses: cypress-io/github-action@v4
with:
build: npm run build
start: npx --yes http-server static/
publish:
name: Publish to npm
# if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: [install-dependencies, check-prettier, run-cypress, check-types]
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: 16.14.0
- name: Restore dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ needs.install-dependencies.outputs.cache-key }}
- name: Build the package
run: npm run build
- name: Run semantic release bot
run: npx semantic-release --dry-run
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::457031429343:role/github-actions-browser-sdk-role
aws-region: us-east-1
- name: Upload to S3 with versioning
run: |
# Create version directory based on package version
VERSION=$(node -p "require('./package.json').version")
# Upload to versioned path
aws s3 cp static/cdn.js s3://tbx-assets/browser-sdk/$VERSION/cdn.js --acl public-read
# Create a redirect object for "latest" that points to the versioned file
aws s3api put-object \
--bucket tbx-assets \
--key browser-sdk/latest/cdn.js \
--website-redirect-location /browser-sdk/$VERSION/cdn.js \
--acl public-read