Merge pull request #594 from golemfactory/dependabot/npm_and_yarn/cyp… #64
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: [16.x, 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: goth | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Configure NodeJS | |
uses: actions/setup-node@v3 | |
with: | |
# other versions are tested beforehand, so we can keep it short | |
node-version: 16 | |
- name: Install packages required to set-up Goth | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y build-essential | |
- name: Install browsers and graphic environment for Cypress tests | |
run: | | |
sudo apt-get install -y libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb | |
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb | |
sudo apt install -y ./google-chrome-stable_current_amd64.deb | |
- name: Install websocat and sshpass (required by some tests) | |
run: | | |
sudo wget https://github.com/vi/websocat/releases/download/v1.9.0/websocat_linux64 -O /usr/local/bin/websocat | |
sudo chmod +x /usr/local/bin/websocat | |
sudo apt-get install sshpass | |
- name: Build the SDK | |
run: | | |
npm install | |
npm run build | |
- name: Configure python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.9" | |
#region Goth Setup | |
- name: Install Goth | |
run: | | |
pip install goth | |
rm -rf ../goth/assets | |
python -m goth create-assets ../goth/assets | |
sed -Ezi 's/(use\-proxy:\s)(True)/\1False/mg' ../goth/assets/goth-config.yml | |
sed -Ezi 's/(use\-prerelease:\s)(false)/\1true\n release-tag: "0.13.0-rc10"/mg' ../goth/assets/goth-config.yml | |
- name: Disconnect Docker containers from default network | |
continue-on-error: true | |
# related to this issue: https://github.com/moby/moby/issues/23302 | |
run: | | |
docker network inspect docker_default | |
sudo apt-get install -y jq | |
docker network inspect docker_default | jq ".[0].Containers | map(.Name)[]" | tee /dev/stderr | xargs --max-args 1 -- docker network disconnect -f docker_default | |
- name: Remove Docker containers | |
continue-on-error: true | |
run: docker rm -f $(docker ps -a -q) | |
- name: Restart Docker daemon | |
# related to this issue: https://github.com/moby/moby/issues/23302 | |
run: sudo systemctl restart docker | |
- name: Log in to GitHub Docker repository | |
run: echo ${{ secrets.GITHUB_TOKEN }} | docker login docker.pkg.github.com -u ${{github.actor}} --password-stdin | |
#endregion | |
#region E2E test execution | |
- name: Run the E2E tests using Goth | |
env: | |
GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
npm run test:e2e | |
- name: Upload test logs | |
uses: actions/upload-artifact@v2 | |
if: always() | |
with: | |
name: goth-logs | |
path: /tmp/goth-tests | |
# Only relevant for self-hosted runners | |
- name: Remove test logs | |
if: always() | |
run: rm -rf /tmp/goth-tests | |
#endregion | |
#region Cypress test execution | |
- name: Run web server | |
run: | | |
cd examples/web | |
node app.mjs & | |
- name: Run test suite | |
env: | |
GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
npm run test:cypress -- --browser chrome | |
- name: Upload test logs | |
uses: actions/upload-artifact@v2 | |
if: always() | |
with: | |
name: cypress-logs | |
path: .cypress | |
# Only relevant for self-hosted runners | |
- name: Remove test logs | |
if: always() | |
run: rm -rf .cypress | |
#endregion | |
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 |