diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index aa0c41b..4dc7964 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -12,12 +12,147 @@ on: tags: - '*' pull_request: - jobs: - ci_remote: - uses: nciocpl/launchables/.github/workflows/workflow.yml@ticket/1-workflow - permissions: - contents: read - packages: read # For npm install from GH Packages - pull-requests: write # For adding comments to PRs - secrets: inherit + build: + name: Build, Test and Upload Artifacts + runs-on: ubuntu-22.04 + steps: + ## Setup variables for build info + - name: Set Variables + id: set_vars + run: | + ## PUSH + if [ "${{ github.event_name }}" == "push" ]; then + BUILD_NAME=$(sed -E 's/refs\/(heads|tags)\///; s/\//__/g;' <<< $GITHUB_REF) + BRANCH_NAME=$(sed -E 's/refs\/(heads|tags)\///;' <<< $GITHUB_REF) + COMMIT_HASH=$(echo "${GITHUB_SHA}") + ## PULL_REQUEST + elif [ "${{ github.event_name }}" == "pull_request" ]; then + BUILD_NAME=$(echo "pr-${{ github.event.pull_request.number }}") + BRANCH_NAME=$(echo "pr-${{ github.event.pull_request.number }}") + COMMIT_HASH=$(echo "${{ github.event.pull_request.head.sha }}") + else + ## ERROR + exit 1 + fi + + ## For step checks and artifact deployment path. + ## Same for push and PR + export REPO_FULL=${{ github.repository }} + export REPO_RE='([^/]+)/(.*)' + [[ "$REPO_FULL" =~ $REPO_RE ]] + REPO_OWNER=$(echo "${BASH_REMATCH[1]}") + REPO_NAME=$(echo "${BASH_REMATCH[2]}") + + ## Set step outputs for later use + echo "build_name=${BUILD_NAME}" >> $GITHUB_OUTPUT + echo "branch_name=${BRANCH_NAME}" >> $GITHUB_OUTPUT + echo "commit_hash=${COMMIT_HASH}" >> $GITHUB_OUTPUT + echo "repo_owner=${REPO_OWNER}" >> $GITHUB_OUTPUT + echo "repo_name=${REPO_NAME}" >> $GITHUB_OUTPUT + ## This clones and checks out. + - name: Checkout branch + uses: actions/checkout@v4 + ## Setup node and npm caching. + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'npm' + registry-url: https://npm.pkg.github.com + scope: '@nciocpl' + cache-dependency-path: '**/package-lock.json' + ## Install dependencies + - name: Install Dependencies + run: npm ci + env: + CI: true + NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} + ## Check Formatting + - name: Check Formatting + run: npm run format:check + ## Lint + - name: Lint + run: npm run lint + ## Build the app in prep for publishing + - name: Build App + run: npm run build + env: + CI: true + ## Set public Base path for branch + PUBLIC_PATH: ${{ format('/launchables/{0}/{1}', steps.set_vars.outputs.repo_name, steps.set_vars.outputs.build_name) }} + ## Generate build-info.json to house information about this specific build. + ## Used for product test deployment + - name: Create Build Information + env: + BUILD_INFO: ${{ toJson(steps.set_vars.outputs) }} + run: | + echo $BUILD_INFO + echo $BUILD_INFO > ./dist/build-info.json + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: build-artifact + path: dist/ + deploy-test: + name: Deploy built artifacts to test server + ## Only do this if the repo is NCIOCPL + if: startsWith(github.repository, 'NCIOCPL') + ## This job depends on build completing + needs: build + runs-on: ubuntu-latest + steps: + - name: Download built app + uses: actions/download-artifact@v4 + with: + name: build-artifact + path: build-artifact + ## Setup vars from Build Info from build job + - name: Setup Job env + run: | + ls -l + ## Set Vars + BUILD_NAME=$(jq -r '.build_name' < ./build-artifact/build-info.json) + BRANCH_NAME=$(jq -r '.branch_name' < ./build-artifact/build-info.json) + COMMIT_HASH=$(jq -r '.commit_hash' < ./build-artifact/build-info.json) + REPO_OWNER=$(jq -r '.repo_owner' < ./build-artifact/build-info.json) + REPO_NAME=$(jq -r '.repo_name' < ./build-artifact/build-info.json) + + ## Set Action Env + echo "BUILD_NAME=${BUILD_NAME}" >> $GITHUB_ENV + echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV + echo "COMMIT_HASH=${COMMIT_HASH}" >> $GITHUB_ENV + echo "REPO_OWNER=${REPO_OWNER}" >> $GITHUB_ENV + echo "REPO_NAME=${REPO_NAME}" >> $GITHUB_ENV + + ######## ERROR IF PR FROM FORK + if [ "$REPO_OWNER" != "NCIOCPL" ]; then + echo "YOU SHOULD NOT SEND PR FROM FORK!!!" + exit 1 + fi + ## We need to create the zip for netstorage + - name: Zip Build Artifact + run: | + pushd build-artifact + zip -r ../${BUILD_NAME}.zip * + popd + - name: Upload artifact to netstorage + uses: nciocpl/netstorage-upload-action@v1.0.0 + with: + hostname: ${{ secrets.launchables_ns_hostname }} + cp-code: ${{ secrets.launchables_ns_cpcode }} + key-name: ${{ secrets.launchables_ns_keyname }} + key: ${{ secrets.launchables_ns_key }} + index-zip: true + local-path: ${{ format('{0}.zip', env.BUILD_NAME) }} + ## Note this action automatically prepends the cpcode to the path. + destination-path: ${{ format('/{0}/{1}.zip', env.REPO_NAME, env.BUILD_NAME) }} + - name: Clear Site Cache + uses: nciocpl/akamai-purge-action@v1.0.2 + with: + hostname: ${{ secrets.launchables_eg_hostname }} + client-token: ${{ secrets.launchables_eg_client_token }} + client-secret: ${{ secrets.launchables_eg_client_secret }} + access-token: ${{ secrets.launchables_eg_access_token }} + type: 'cpcodes' + ref: ${{ format('{0},{1}', secrets.launchables_ns_cpcode, secrets.launchables_prop_cpcode) }}