Skip to content

Build and Test Workflow #319

Build and Test Workflow

Build and Test Workflow #319

Workflow file for this run

name: Build and Test Workflow
permissions:
id-token: write
issues: write
pull-requests: write
contents: write
on:
push:
branches:
- v2.x/master
- v3.x/master
pull_request:
types: [opened, synchronize]
workflow_dispatch:
inputs:
PERFORM_RELEASE:
description: 'Perform release?'
required: false
default: false
type: boolean
env:
IMAGE_BASE_DIR: container
jobs:
check-permission:
runs-on: ubuntu-latest
steps:
# this action will fail the whole workflow if permission check fails
- name: check permission
uses: zowe-actions/shared-actions/permission-check@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# Requirement to prevent latest libraries from being used to prevent against package/npm hijacking is in direct conflict
# with requirement to be on the latest version of packages for major release. I guess whoever complains more wins.
#
# validate-package-json:
# needs: check-permission
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v2
#
# - name: Validate package.json
# uses: zowe-actions/shared-actions/validate-package-json@main
# with:
# excluded-packages: explorer-fvt-utilities
# test on explorer-mvs image
integration-test:
runs-on: ubuntu-latest
# needs: validate-package-json
steps:
- name: '[Prep 1] Checkout'
uses: actions/checkout@v2
- name: '[Prep 2] Cache node modules'
uses: actions/cache@v2
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: |
~/.npm
~/.nvm/.cache
~/.nvm/versions
key: ${{ runner.os }}-build-cache-node-modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-cache-node-modules-
- name: '[Prep 3] Prepare workflow'
uses: zowe-actions/shared-actions/prepare-workflow@main
- name: '[Prep 4] Setup Node'
uses: actions/setup-node@v3
with:
node-version: 18
# - name: '[Prep extra] explorer-mvs exclusive - upgrade npm to v7'
# run: |
# npm install -g npm
# npm -v
- name: '[Setup] NodeJS project setup'
uses: zowe-actions/nodejs-actions/setup@main
with:
package-name: 'org.zowe.explorer-mvs'
- name: '[Test 1] Preparing integration test'
run: |
echo "Preparing server for integration test ..."
./bin/prepare-fvt.sh \
"${CUSTOM_FVT_ZOSMF_HOST:-${{ env.DEFAULT_FVT_ZOSMF_HOST }}}" \
"${CUSTOM_FVT_ZOSMF_PORT:-${{ env.DEFAULT_FVT_ZOSMF_PORT }}}"
sleep 120
- name: "[Test 2] Start integration test"
run: |
export ZOWE_USERNAME=${{ secrets.SSH_MARIST_USERNAMEP }}
export ZOWE_PASSWORD=${{ secrets.SSH_MARIST_PASSWORDP }}
echo "Starting integration test ..."
export SERVER_HOST_NAME=${CUSTOM_FVT_SERVER_HOSTNAME:-${{ env.DEFAULT_FVT_SERVER_HOSTNAME }}}
export SERVER_HTTPS_PORT=7554
export TEST_BROWSER=firefox
npm run test:fvt
# Uncomment the env part to customize test parameters
#env:
# CUSTOM_FVT_ZOSMF_HOST:
# CUSTOM_FVT_ZOSMF_PORT:
# CUSTOM_FVT_SERVER_HOSTNAME:
- name: "[Post Test 1] Print container service logs - discovery-service"
if: always()
run: |
cd .fvt
docker compose logs discovery-service
- name: "[Post Test 2] Print container service logs - gateway-service"
if: always()
run: |
cd .fvt
docker compose logs gateway-service
- name: "[Post Test 3] Print container service logs - explorer-mvs"
if: always()
run: |
cd .fvt
docker compose logs explorer-mvs
regular-build:
runs-on: ubuntu-latest
# needs: validate-package-json
steps:
- name: '[Prep 1] Checkout'
uses: actions/checkout@v2
- name: '[Prep 2] Cache node modules'
uses: actions/cache@v2
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: |
~/.npm
~/.nvm/.cache
~/.nvm/versions
key: ${{ runner.os }}-build-cache-node-modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-cache-node-modules-
- name: '[Prep 3] Setup jFrog CLI'
uses: jfrog/setup-jfrog-cli@v2
env:
JF_ENV_1: ${{ secrets.JF_ARTIFACTORY_TOKEN }}
- name: '[Prep 4] Prepare workflow'
uses: zowe-actions/shared-actions/prepare-workflow@main
- name: '[Prep 5] Setup Node'
uses: actions/setup-node@v3
with:
node-version: 18
# - name: '[Prep extra] explorer-mvs exclusive - upgrade npm to v7'
# run: |
# npm install -g npm
# npm -v
- name: '[Setup] NodeJS project setup'
uses: zowe-actions/nodejs-actions/setup@main
with:
package-name: 'org.zowe.explorer-mvs'
- name: '[Build] Nodejs project build'
run: npm run prod
# - name: '[Test] Nodejs project unit test'
# run: npm run test
# - name: '[Scan 1] Fix code coverage paths'
# working-directory: ./coverage
# run: sed -i 's#'$GITHUB_WORKSPACE'#/github/workspace/#g' lcov.info
- name: '[Scan 2] SonarCloud Scan'
uses: sonarsource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }}
sonar.projectVersion: ${{ env.P_VERSION }}
sonar.links.ci: 'https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}'
- name: '[Packaging] Make pax'
uses: zowe-actions/shared-actions/make-pax@main
with:
pax-name: 'explorer-mvs'
pax-options: '-o saveext'
pax-ssh-username: ${{ secrets.SSH_MARIST_USERNAME }}
pax-ssh-password: ${{ secrets.SSH_MARIST_RACF_PASSWORD }}
- name: '[Publish] Publish'
uses: zowe-actions/shared-actions/publish@main
if: success()
with:
artifacts: .pax/explorer-mvs.pax
perform-release: ${{ github.event.inputs.PERFORM_RELEASE }}
- name: 'Call build image workflow'
if: ${{ success() && github.event.inputs.PERFORM_RELEASE == 'true' && env.IS_RELEASE_BRANCH == 'true' }}
uses: zowe-actions/shared-actions/workflow-remote-call-wait@main
with:
github-token: ${{ secrets.ZOWE_ROBOT_TOKEN }}
owner: zowe
repo: explorer-mvs
workflow-filename: explorer-mvs-images.yml
branch-name: ${{ github.ref_name }}
poll-frequency: 1
inputs-json-string: '{"release":"true"}'
# env:
# DEBUG: 'workflow-remote-call-wait'
- name: '[Release 1] Release (if necessary)'
if: ${{ success() && github.event.inputs.PERFORM_RELEASE == 'true' && env.IS_RELEASE_BRANCH == 'true' }}
uses: zowe-actions/shared-actions/release@main
- name: '[Release 2] NPM bump version (if necessary)'
if: ${{ success() && github.event.inputs.PERFORM_RELEASE == 'true' && env.IS_RELEASE_BRANCH == 'true' && env.IS_FORMAL_RELEASE_BRANCH == 'true' && env.PRE_RELEASE_STRING == ''}}
uses: zowe-actions/nodejs-actions/bump-version@main
env:
GITHUB_TOKEN: ${{ secrets.ZOWE_ROBOT_TOKEN }}