Skip to content

AXON-1462-Add-feedback-submission-confirmation #4691

AXON-1462-Add-feedback-submission-confirmation

AXON-1462-Add-feedback-submission-confirmation #4691

Workflow file for this run

name: Build
permissions:
contents: read
packages: read
actions: write
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
setup-dependencies:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Cache npm dependencies
uses: actions/cache@v4
with:
path: |
~/.npm
node_modules
key: npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-${{ runner.os }}-
- name: Install dependencies
run: npm ci
- name: Compress node_modules
run: tar -czf node_modules.tar.gz node_modules
- name: Upload node_modules for reuse
uses: actions/upload-artifact@v4
with:
name: node-modules
path: node_modules.tar.gz
retention-days: 1
lint:
needs: [setup-dependencies]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Download node_modules
uses: actions/download-artifact@v4
with:
name: node-modules
- name: Extract node_modules
run: tar -xzf node_modules.tar.gz
- name: Run vulnerability audit
# "There is no Vulnerability in Media Viewer after 48.5.4. since it was fixed by patching, but npm audit still reports it.",
# So that switched to audit-ci with allowlist
run: npm run audit-ci
- name: Run linter
run: npm run lint
test-unit:
needs: [setup-dependencies]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Download node_modules
uses: actions/download-artifact@v4
with:
name: node-modules
- name: Extract node_modules
run: tar -xzf node_modules.tar.gz
- name: Run unit tests
run: npm test
build-extension:
needs: [setup-dependencies]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Download node_modules
uses: actions/download-artifact@v4
with:
name: node-modules
- name: Extract node_modules
run: tar -xzf node_modules.tar.gz
- name: Package the extension
run: npm run extension:package
- name: Upload extension package
uses: actions/upload-artifact@v4
with:
name: extension-package
path: atlascode-*.vsix
retention-days: 1
test-e2e:
needs: [build-extension]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- jira-cloud
- jira-dc
- bitbucket-cloud
- bitbucket-dc
env:
ATLASCODE_FX3_API_KEY: ${{ secrets.ATLASCODE_FX3_API_KEY }}
ATLASCODE_FX3_ENVIRONMENT: ${{ vars.ATLASCODE_FX3_ENVIRONMENT }}
ATLASCODE_FX3_TARGET_APP: ${{ vars.ATLASCODE_FX3_TARGET_APP }}
ATLASCODE_FX3_TIMEOUT: ${{ vars.ATLASCODE_FX3_TIMEOUT }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Download node_modules
uses: actions/download-artifact@v4
with:
name: node-modules
- name: Extract node_modules
run: tar -xzf node_modules.tar.gz
- name: Download extension package
uses: actions/download-artifact@v4
with:
name: extension-package
- name: Generate SSL certs for E2E test
run: npm run test:e2e:sslcerts
- name: Fetch E2E image
run: |
docker pull ghcr.io/atlassian/atlascode-e2e:latest
docker tag ghcr.io/atlassian/atlascode-e2e:latest atlascode-e2e
- name: Run E2E (${{ matrix.target }})
run: npm run test:e2e:docker
env:
TARGET: ${{ matrix.target }}
- name: Upload E2E artifacts (${{ matrix.target }})
if: always()
uses: actions/upload-artifact@v4
with:
name: e2e-test-results-${{ matrix.target }}
path: ./test-results
retention-days: 1
if-no-files-found: ignore
finalize:
needs: [setup-dependencies, lint, test-unit, build-extension, test-e2e]
runs-on: ubuntu-latest
if: always()
steps:
- name: Delete node_modules artifact
if: ${{ !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
uses: geekyeggo/delete-artifact@v5
with:
name: node-modules
failOnError: false
- name: Delete extension package artifact
if: ${{ !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
uses: geekyeggo/delete-artifact@v5
with:
name: extension-package
failOnError: false
- name: Check if all jobs succeeded
run: |
results='${{ toJSON(needs.*.result) }}'
if echo "$results" | jq -e 'any(. != "success")' > /dev/null; then
echo "One or more jobs failed:"
echo " setup-dependencies: ${{ needs.setup-dependencies.result }}"
echo " lint: ${{ needs.lint.result }}"
echo " test-unit: ${{ needs.test-unit.result }}"
echo " build-extension: ${{ needs.build-extension.result }}"
echo " test-e2e: ${{ needs.test-e2e.result }}"
echo "Artifacts are retained for 1 day to allow rerunning failed jobs"
exit 1
fi
echo "All steps completed successfully"