Skip to content

Merge pull request #684 from golemfactory/dependabot/npm_and_yarn/bet… #187

Merge pull request #684 from golemfactory/dependabot/npm_and_yarn/bet…

Merge pull request #684 from golemfactory/dependabot/npm_and_yarn/bet… #187

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:
inputs:
provider_version:
description: "Provider version (e.g., v0.12.3 or pre-rel-v0.13.1)"
required: false
default: "v0.12.3"
requestor_version:
description: "Requestor version (e.g., v0.12.3 or pre-rel-v0.13.1)"
required: false
default: "v0.12.3"
provider_wasi_version:
description: "Provider WASI version (e.g., v0.2.2)"
required: false
default: "v0.2.2"
provider_vm_version:
description: "Provider VM version (e.g., v0.3.0)"
required: false
default: "v0.3.0"
# 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
# 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: echo "YAGNA_SUBNET=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8 ; echo '')" >> $GITHUB_ENV
- name: Set up Versions
run: |
echo "PROVIDER_VERSION=${{ github.event.inputs.provider_version }}" >> $GITHUB_ENV
echo "REQUESTOR_VERSION=${{ github.event.inputs.requestor_version }}" >> $GITHUB_ENV
echo "PROVIDER_WASI_VERSION=${{ github.event.inputs.provider_wasi_version }}" >> $GITHUB_ENV
echo "PROVIDER_VM_VERSION=${{ github.event.inputs.provider_vm_version }}" >> $GITHUB_ENV
- name: Build the docker containers
run: |
docker compose -f tests/docker/docker-compose.yml build \
--build-arg UBUNTU_VERSION=22.04 \
--build-arg YA_CORE_PROVIDER_VERSION=${PROVIDER_VERSION} \
--build-arg YA_CORE_REQUESTOR_VERSION=${REQUESTOR_VERSION} \
--build-arg YA_WASI_VERSION=${PROVIDER_WASI_VERSION} \
--build-arg YA_VM_VERSION=${PROVIDER_VM_VERSION}
- name: Start the docker containers
run: |
sudo service docker restart
docker compose -f tests/docker/docker-compose.yml down
docker compose -f tests/docker/docker-compose.yml up -d
- name: Fund the requestor
run: |
sleep 10
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