Skip to content

Merge pull request #619 from golemfactory/feature/JST-516 #130

Merge pull request #619 from golemfactory/feature/JST-516

Merge pull request #619 from golemfactory/feature/JST-516 #130

Workflow file for this run

name: Release Pipeline
on:
push:
branches:
# Regular release channels
- master
- next
- beta
- alpha
# Support, hotfix branches like: 1.0.x or 1.x
- '([0-9]+)(\.([0-9]+))?\.x'
# Allows triggering the workflow manually
workflow_dispatch:
# We're going to interact with GH from the pipelines, so we need to get some permissions
permissions:
contents: read # for checkout
jobs:
regular-checks:
name: Build and unit-test on supported platforms and NodeJS versions
strategy:
matrix:
node-version: [18.x, 20.x]
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Setup NodeJS ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Perform regular checks
run: |
npm install
npm run format:check
npm run lint
npm run test:unit
npm run build
npm install --prefix examples
npm run --prefix examples lint:ts
run-integration-and-e2e-tests:
name: Run integration and E2E tests
needs: regular-checks
runs-on: goth2
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Use random string for subnet
run: echo "YAGNA_SUBNET=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8 ; echo '')" >> $GITHUB_ENV
- name: Build the docker containers
# Use a random string to avoid other providers on the same subnet which might cause tests to fail because it expects only providers named provider-1 and provider-2
run: docker compose -f tests/docker/docker-compose.yml build
- name: Start the docker containers
# Use a random string to avoid other providers on the same subnet which might cause tests to fail because it expects only providers named provider-1 and provider-2
run: docker compose -f tests/docker/docker-compose.yml down && docker compose -f tests/docker/docker-compose.yml up -d
- name: Fund the requestor
# Use a funding script which will retry funding the requestor 3 times, else it exits with error. The faucet is not reliable and sometimes fails to fund the requestor, thus the retry.
run: sleep 4 && docker exec -t docker-requestor-1 /bin/sh -c "/golem-js/tests/docker/fundRequestor.sh"
- name: Install and build the SDK in the docker container
run: |
docker exec -t docker-requestor-1 /bin/sh -c "cd /golem-js && npm i && npm run build && ./node_modules/.bin/cypress install && npm install --prefix examples && npm install ts-node"
- name: Start the e2e test
run: docker exec -t docker-requestor-1 /bin/sh -c "cd /golem-js && npm run test:e2e"
#region Cypress test execution
- name: Run web server
run: |
docker exec -t -d docker-requestor-1 /bin/sh -c "cd /golem-js/examples/web && node app.mjs"
- name: Run test suite
run: |
docker exec -t docker-requestor-1 /bin/sh -c "cd /golem-js && npm run test:cypress -- --browser chromium"
- name: Run the Examples tests
run: |
docker exec -t docker-requestor-1 /bin/sh -c "cd /golem-js && npm run test:examples -- --exitOnError"
- name: Upload test logs
uses: actions/upload-artifact@v2
if: always()
with:
name: cypress-logs
path: .cypress
- name: Cleanup Docker
if: always()
run: |
c=$(docker ps -q) && [[ $c ]] && docker kill $c
docker system prune -af
release:
name: Release the SDK to NPM and GitHub
needs: run-integration-and-e2e-tests
runs-on: ubuntu-latest
permissions:
contents: write # to be able to publish a GitHub release
issues: write # to be able to comment on released issues
pull-requests: write # to be able to comment on released pull requests
id-token: write # to enable use of OIDC for npm provenance
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup NodeJS
uses: actions/setup-node@v3
with:
# Semantic release requires this as bare minimum
node-version: 18
- name: Install dependencies
run: npm install
- name: Verify the integrity of provenance attestations and registry signatures for installed dependencies
run: npm audit signatures
- name: Build the SDK for release
run: npm run build
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npx semantic-release