Skip to content

ci: migrate to nodejs 18 #868

ci: migrate to nodejs 18

ci: migrate to nodejs 18 #868

Workflow file for this run

# This is a Github Workflow that runs tests on any push or pull request.
# If the tests pass and this is a push to the master branch it also runs Semantic Release.
name: CI
on: [ push, pull_request ]
jobs:
init:
name: init
runs-on: ubuntu-latest
outputs:
yarn-cache-dir: ${{ steps.yarn-cache-dir-path.outputs.dir }}
checksum: ${{ steps.checksum.outputs.checksum }}
steps:
- uses: actions/checkout@v3
- name: Get yarn cache dir
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- name: Get src checksum
id: checksum
run: echo "::set-output name=checksum::${{ hashFiles('yarn.lock', '*.json', 'packages/*/*.json', 'packages/*/src/main/ts/**/*', 'packages/*/src/main/webapp/**/*') }}"
build:
name: build
needs: init
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Download artifact
uses: qiwi-forks/action-download-artifact@v2
with:
name: artifact-${{ needs.init.outputs.checksum }}
workflow: 'ci.yaml'
workflow_conclusion: false
nothrow: true
search_artifacts: true
search_depth: 10
- name: Check artifact
if: always()
id: check-artifact
run: echo "::set-output name=exists::$([ -e "artifact.tar" ] && echo true || echo false)"
- uses: actions/cache@v3
if: ${{ steps.check-artifact.outputs.exists == 'false' }}
id: yarn-cache
with:
path: ${{ needs.init.outputs.yarn-cache-dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install
if: ${{ steps.check-artifact.outputs.exists == 'false' }}
run: yarn
- name: Build
if: ${{ steps.check-artifact.outputs.exists == 'false' }}
run: |
yarn build
tar -cvf artifact.tar package.json packages/*/target
- name: Save artifact
if: ${{ steps.check-artifact.outputs.exists == 'false' }}
uses: actions/upload-artifact@v3
with:
name: artifact-${{ needs.init.outputs.checksum }}
retention-days: 30
path: artifact.tar
# https://github.com/actions/upload-artifact/issues/53
- name: Cache artifact
uses: actions/cache@v3
id: artifact
with:
path: artifact.tar
key: artifact-${{ needs.init.outputs.checksum }}
test_push:
needs: [ build, init ]
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- name: Restore artifact from cache (if exists)
uses: actions/cache@v3
with:
path: artifact.tar
key: artifact-${{ needs.init.outputs.checksum }}
- name: Check artifact
if: always()
id: check-artifact
run: echo "::set-output name=exists::$([ -e "artifact.tar" ] && echo true || echo false)"
- name: Download artifact
if: ${{ steps.check-artifact.outputs.exists == 'false' }}
uses: qiwi-forks/action-download-artifact@v2
with:
name: artifact-${{ needs.init.outputs.checksum }}
workflow: 'ci.yaml'
workflow_conclusion: false
search_artifacts: true
search_depth: 10
- name: Unpack artifact
run: tar -xvf artifact.tar
- uses: actions/cache@v3
id: yarn-cache
with:
path: ${{ needs.init.outputs.yarn-cache-dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install
run: yarn
- name: Lint
run: yarn lint
# - name: Push coverage
# if: github.ref == 'refs/heads/master'
# uses: actions/upload-artifact@v3
# with:
# name: artifact-${{ needs.init.outputs.checksum }}
# retention-days: 1
# path: coverage
test_pr:
if: github.event_name == 'pull_request'
needs: [ build, init ]
strategy:
matrix:
os: [ ubuntu-latest ]
node-version: [ 18, 20 ]
name: Test (Node v${{ matrix.node-version }}, OS ${{ matrix.os }})
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- uses: actions/cache@v3
id: yarn-cache
with:
path: ${{ needs.init.outputs.yarn-cache-dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Restore artifact from cache (if exists)
uses: actions/cache@v3
with:
path: artifact.tar
key: artifact-${{ needs.init.outputs.checksum }}
- name: Check artifact
if: always()
id: check-artifact
run: echo "::set-output name=exists::$([ -e "artifact.tar" ] && echo true || echo false)"
- name: Download artifact
if: ${{ steps.check-artifact.outputs.exists == 'false' }}
uses: qiwi-forks/action-download-artifact@v2
with:
name: artifact-${{ needs.init.outputs.checksum }}
workflow: 'ci.yaml'
workflow_conclusion: false
search_artifacts: true
search_depth: 10
- name: Unpack artifact
run: tar -xvf artifact.tar
- name: Install
run: yarn
- name: Docker pull
if: matrix.node-version == '18'
run: |
docker pull browserless/chrome@sha256:4655517b70d598367f363e15fa311ea514879f6b4908ba9199d6714d6f8269a3
docker pull nginx@sha256:480868e8c8c797794257e2abd88d0f9a8809b2fe956cbfbc05dcc0bca1f7cd43
- name: Lint
if: matrix.node-version == '20'
run: yarn lint
- name: Visual tests
if: matrix.node-version == '18'
run: yarn test
- name: Save failure results
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: screenshots-${{ needs.init.outputs.checksum }}
retention-days: 1
path: |
packages/*/src/main/resources/screenshots/*.new.png
packages/*/src/main/resources/screenshots/*.diff.png
release:
name: Release
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
needs: [ test_push, init ]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: master
- name: Restore artifact from cache (if exists)
uses: actions/cache@v3
with:
path: artifact.tar
key: artifact-${{ needs.init.outputs.checksum }}
- name: Check artifact
if: always()
id: check-artifact
run: echo "::set-output name=exists::$([ -e "artifact.tar" ] && echo true || echo false)"
- name: Download artifact
if: ${{ steps.check-artifact.outputs.exists == 'false' }}
uses: qiwi-forks/action-download-artifact@v2
with:
name: artifact-${{ needs.init.outputs.checksum }}
workflow: 'ci.yaml'
workflow_conclusion: false
search_artifacts: true
search_depth: 10
- name: Unpack artifact
run: tar -xvf artifact.tar
- uses: actions/setup-node@v3
with:
node-version: 18
# - name: Codeclimate
# uses: paambaati/codeclimate-action@v2.7.5
# env:
# CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
# with:
# coverageLocations: |
# ${{github.workspace}}/coverage/*.lcov:lcov
- uses: actions/cache@v3
id: yarn-cache
with:
path: ${{ needs.init.outputs.yarn-cache-dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install
run: yarn
- name: Release
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
GH_USER: 'qiwibot'
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GIT_AUTHOR_EMAIL: 'opensource@qiwi.com'
GIT_COMMITTER_EMAIL: 'opensource@qiwi.com'
GIT_AUTHOR_NAME: 'QIWI Bot'
GIT_COMMITTER_NAME: 'QIWI Bot'
YARN_ENABLE_IMMUTABLE_INSTALLS: false
run: npm_config_yes=true npx zx-bulk-release