diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3c7f660 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +indent_style = tab +tab_width = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +end_of_line = lf +max_line_length = off + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/.github/workflows/ocpl_cm_standards_check.yml b/.github/workflows/ocpl_cm_standards_check.yml new file mode 100644 index 0000000..105bc06 --- /dev/null +++ b/.github/workflows/ocpl_cm_standards_check.yml @@ -0,0 +1,14 @@ +name: OCPL Configuration Management Standards Check + +on: + pull_request: + types: [opened, reopened, synchronize, ready_for_review] + +permissions: + contents: read + +jobs: + commitlint_remote: + uses: nciocpl/.github/.github/workflows/ocpl_cm_standards_check.yml@workflow/v4 + with: + config_ref: workflow/v4 diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 0000000..5b8ec39 --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,181 @@ +name: Workflow +on: + workflow_call: + +permissions: + contents: read + +jobs: + build: + permissions: + contents: read + packages: read # For npm install from GH Packages + pull-requests: write # For adding comments to PRs + 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 + - name: Add Comment on Where to Test + uses: actions/github-script@v8 + # Only comment on PRs, and only when first updated. + if: startsWith(github.repository, 'NCIOCPL') && github.event_name == 'pull_request' && github.event.action == 'opened' + env: + BUILD_NAME: ${{steps.set_vars.outputs.build_name}} + REPO_NAME: ${{steps.set_vars.outputs.repo_name}} + with: + github-token: ${{secrets.GITHUB_TOKEN}} + ## NOTE: The script below is JavaScript + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: ` + ## Viewing Information + * [The testing site](https://static-dev.cancer.gov/launchables/${ process.env.REPO_NAME }/${ process.env.BUILD_NAME }/index.html) + ` + }) + ## This clones and checks out. + - name: Checkout branch + uses: actions/checkout@v6 + ## Setup node and npm caching. + - name: Setup Node + uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + cache: 'npm' + registry-url: https://npm.pkg.github.com + scope: '@nciocpl' + cache-dependency-path: '**/package-lock.json' + ## Install using CI + - name: Install Dependencies + run: npm ci + env: + CI: true + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ## Lint the code + #- name: Run Lint + # run: yarn lint + # env: + # CI: true + ## Now test the code + #- name: Run Tests + # run: yarn test + # env: + # CI: true + ## 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@v5 + with: + name: build-artifact + path: dist/ + + + deploy-test: + name: Deploy built artifacts to test server + ## Only do this if the repo is in 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@v6 + 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) }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw?