Release v12.0.1 #111
Workflow file for this run
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
# This workflow will do a clean install of node dependencies, build the source code, | |
# run unit tests, perform a SonarCloud scan and publish NPM package ONLY on a tagged release. | |
# For more information see: | |
# https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions | |
# Common FOLIO configurable env: | |
# - YARN_TEST_OPTIONS (options to pass to 'yarn test') | |
# - SQ_ROOT_DIR (root SQ directory to scan relative to top-level directory) | |
# - PUBLISH_MOD_DESCRIPTOR (boolean 'true' or 'false') | |
# - COMPILE_TRANSLATION_FILES (boolean 'true' or 'false') | |
name: buildNPM Release | |
on: | |
push: | |
tags: | |
- 'v[0-9]+.[0-9]+.[0-9]+*' | |
workflow_dispatch: | |
jobs: | |
github-actions-ci: | |
if : ${{ startsWith(github.ref, 'refs/tags/v') }} | |
env: | |
YARN_TEST_OPTIONS: '' | |
SQ_ROOT_DIR: './src' | |
COMPILE_TRANSLATION_FILES: 'true' | |
PUBLISH_MOD_DESCRIPTOR: 'true' | |
FOLIO_NPM_REGISTRY: 'https://repository.folio.org/repository/npm-folio/' | |
FOLIO_NPM_REGISTRY_AUTH: '//repository.folio.org/repository/npm-folio/' | |
FOLIO_MD_REGISTRY: 'https://folio-registry.dev.folio.org' | |
NODEJS_VERSION: '18' | |
JEST_JUNIT_OUTPUT_DIR: 'artifacts/jest-junit' | |
JEST_COVERAGE_REPORT_DIR: 'artifacts/coverage-jest/lcov-report/' | |
BIGTEST_JUNIT_OUTPUT_DIR: 'artifacts/runTest' | |
BIGTEST_COVERAGE_REPORT_DIR: 'artifacts/coverage/lcov-report/' | |
OKAPI_PULL: '{ "urls" : [ "https://folio-registry.dev.folio.org" ] }' | |
SQ_LCOV_REPORT: 'artifacts/coverage-jest/lcov.info' | |
SQ_EXCLUSIONS: '**/platform/alias-service.js,**/docs/**,**/node_modules/**,**/examples/**,**/artifacts/**,**/ci/**,Jenkinsfile,**/LICENSE,**/*.css,**/*.md,**/*.json,**/tests/**,**/stories/*.js,**/test/**,**/.stories.js,**/resources/bigtest/interactors/**,**/resources/bigtest/network/**,**/*-test.js,**/*.test.js,**/*-spec.js,**/karma.conf.js,**/jest.config.js' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: folio-org/checkout@v2 | |
with: | |
fetch-depth: 0 | |
# Runs a single command using the runners shell | |
- name: Print tag info | |
run: echo "Building release tag, ${GITHUB_REF}" | |
- name: Set TAG_VERSION | |
run: echo "TAG_VERSION=$(echo ${GITHUB_REF#refs/tags/v})" >> $GITHUB_ENV | |
- name: Get version from package.json | |
id: package_version | |
uses: notiz-dev/github-action-json-property@release | |
with: | |
path: 'package.json' | |
prop_path: 'version' | |
- name: Check matching tag and version in package.json | |
if: ${{ env.TAG_VERSION != steps.package_version.outputs.prop }} | |
run: | | |
echo "Tag version, ${TAG_VERSION}, does not match package.json version, ${PACKAGE_VERSION}." | |
exit 1 | |
env: | |
PACKAGE_VERSION: ${{ steps.package_version.outputs.prop }} | |
- name: Setup kernel for react native, increase watchers | |
run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p | |
- name: Use Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: ${{ env.NODEJS_VERSION }} | |
check-latest: true | |
always-auth: true | |
- name: Set yarn config | |
run: yarn config set @folio:registry $FOLIO_NPM_REGISTRY | |
- name: Run yarn install | |
run: yarn install --ignore-scripts | |
- name: Run yarn list | |
run: yarn list --pattern @folio | |
- name: Run yarn lint | |
run: yarn lint | |
continue-on-error: true | |
- name: Get number of CPU cores | |
id: cpu-cores | |
uses: SimenB/github-actions-cpu-cores@v1 | |
- name: Run yarn test | |
run: xvfb-run --server-args="-screen 0 1024x768x24" yarn test $YARN_TEST_OPTIONS --max-workers ${{ steps.cpu-cores.outputs.count }} | |
- name: Run yarn formatjs-compile | |
if : ${{ env.COMPILE_TRANSLATION_FILES == 'true' }} | |
run: yarn formatjs-compile | |
- name: Generate FOLIO module descriptor | |
if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} | |
run: yarn build-mod-descriptor | |
- name: Print FOLIO module descriptor | |
if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} | |
run: cat module-descriptor.json | |
- name: Read module descriptor | |
if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} | |
id: moduleDescriptor | |
uses: juliangruber/read-file-action@v1 | |
with: | |
path: ./module-descriptor.json | |
- name: Docker registry login | |
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login https://docker.io/v2/ -u "${{ secrets.DOCKER_USER }}" --password-stdin | |
- name: Start a local instance of Okapi | |
if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} | |
run: | | |
docker pull folioorg/okapi:latest | |
docker run --name okapi -t -detach folioorg/okapi:latest dev | |
echo "OKAPI_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' okapi)" >> $GITHUB_ENV | |
sleep 10 | |
- name: Pull all Module descriptors to local Okapi instance | |
if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} | |
uses: fjogeleit/http-request-action@master | |
with: | |
url: http://${{ env.OKAPI_IP }}:9130/_/proxy/pull/modules | |
method: 'POST' | |
contentType: 'application/json; charset=utf-8' | |
customHeaders: '{ "Accept": "application/json; charset=utf-8" }' | |
data: ${{ env.OKAPI_PULL }} | |
timeout: 60000 | |
- name: Perform local Okapi dependency check | |
if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} | |
uses: fjogeleit/http-request-action@master | |
with: | |
url: http://${{ env.OKAPI_IP }}:9130/_/proxy/modules?preRelease=false&npmSnapshot=false | |
method: 'POST' | |
contentType: 'application/json; charset=utf-8' | |
customHeaders: '{ "Accept": "application/json; charset=utf-8" }' | |
data: ${{ steps.moduleDescriptor.outputs.content }} | |
- name: Publish Jest unit test results | |
uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1 | |
if: always() | |
with: | |
github_token: ${{ github.token }} | |
files: "${{ env.JEST_JUNIT_OUTPUT_DIR }}/*.xml" | |
check_name: Jest Unit Test Results | |
comment_mode: update last | |
comment_title: Jest Unit Test Statistics | |
- name: Publish Jest coverage report | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: jest-coverage-report | |
path: ${{ env.JEST_COVERAGE_REPORT_DIR }} | |
retention-days: 30 | |
- name: Publish BigTest unit test results | |
uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1 | |
if: always() | |
with: | |
github_token: ${{ github.token }} | |
files: "${{ env.BIGTEST_JUNIT_OUTPUT_DIR }}/*.xml" | |
check_name: BigTest Unit Test Results | |
comment_mode: update last | |
comment_title: BigTest Unit Test Statistics | |
- name: Publish BigTest coverage report | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: bigtest-coverage-report | |
path: ${{ env.BIGTEST_COVERAGE_REPORT_DIR }} | |
retention-days: 30 | |
- name: Publish yarn.lock | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: yarn.lock | |
path: yarn.lock | |
retention-days: 5 | |
- name: Set default branch as env variable | |
run: echo "DEFAULT_BRANCH=${{ github.event.repository.default_branch }}" >> $GITHUB_ENV | |
- name: Fetch branches for SonarCloud | |
run: git fetch --no-tags ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} +refs/heads/${{ env.DEFAULT_BRANCH }}:refs/remotes/origin/${{ env.DEFAULT_BRANCH }} | |
- name: Run SonarCloud scan | |
uses: sonarsource/sonarcloud-github-action@master | |
with: | |
args: > | |
-Dsonar.organization=folio-org | |
-Dsonar.projectKey=org.folio:${{ github.event.repository.name }} | |
-Dsonar.projectName=${{ github.event.repository.name }} | |
-Dsonar.sources=${{ env.SQ_ROOT_DIR }} | |
-Dsonar.language=js | |
-Dsonar.javascript.lcov.reportPaths=${{ env.SQ_LCOV_REPORT }} | |
-Dsonar.exclusions=${{ env.SQ_EXCLUSIONS }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | |
- name: Set up NPM environment for publishing | |
uses: actions/setup-node@v2 | |
with: | |
node-version: ${{ env.NODEJS_VERSION }} | |
check-latest: true | |
always-auth: true | |
- name: Set _auth in .npmrc | |
run: | | |
npm config set @folio:registry $FOLIO_NPM_REGISTRY | |
npm config set $FOLIO_NPM_REGISTRY_AUTH:_auth $NODE_AUTH_TOKEN | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Exclude some CI-generated artifacts in package | |
run: | | |
echo "artifacts" >> .npmignore | |
echo ".github" >> .npmignore | |
echo ".scannerwork" >> .npmignore | |
cat .npmignore | |
- name: Publish NPM to FOLIO NPM registry | |
run: npm publish | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Publish module descriptor to FOLIO registry | |
if: ${{ env.PUBLISH_MOD_DESCRIPTOR == 'true' }} | |
id: modDescriptorPost | |
uses: fjogeleit/http-request-action@master | |
with: | |
url: ${{ env.FOLIO_MD_REGISTRY }}/_/proxy/modules | |
method: 'POST' | |
contentType: 'application/json; charset=utf-8' | |
customHeaders: '{ "Accept": "application/json; charset=utf-8" }' | |
data: ${{ steps.moduleDescriptor.outputs.content }} | |
username: ${{ secrets.FOLIO_REGISTRY_USERNAME }} | |
password: ${{ secrets.FOLIO_REGISTRY_PASSWORD }} | |