Merge pull request #615 from golemfactory/dependabot/npm_and_yarn/esl… #132
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: goth2 | |
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 | |
npm install --prefix examples | |
npm install ts-node | |
- 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 | |
sed -i '/^ENTRYPOINT/i ENV YAGNA_AUTOCONF_APPKEY=try_golem' ../goth/assets/docker/yagna-goth-deb.Dockerfile | |
- name: Cleanup Docker | |
if: always() | |
run: | | |
c=$(docker ps -q) && [[ $c ]] && docker kill $c | |
docker system prune -af | |
- 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 | |
#region Examples test execution | |
- name: Run the Examples tests using Goth | |
env: | |
GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
npm run test:examples | |
- 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 | |
- name: Cleanup Docker | |
if: always() | |
run: | | |
c=$(docker ps -q) && [[ $c ]] && docker kill $c | |
docker system prune -af | |
#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 |