Revert "Reapply "Merge pull request #5584 from HSLdevcom/AB#203"" #3279
This file contains hidden or 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
| name: Process push or PR | |
| on: | |
| push: | |
| branches: | |
| - v3 | |
| - next | |
| - hotfix | |
| pull_request: | |
| branches: | |
| - v3 | |
| permissions: | |
| id-token: write # For npm publish job | |
| contents: read | |
| env: | |
| # We tell Playwright not to download browser binaries because we use microsoft/playwright-github-action. | |
| # https://github.com/microsoft/playwright/blob/v1.16.2/installation-tests/installation-tests.sh#L200-L216 | |
| PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1' | |
| jobs: | |
| # install dependencies, build shared components, cache both for subsequent jobs | |
| install: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [20.18] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| registry-url: 'https://registry.npmjs.org/' | |
| # https://github.com/actions/cache/blob/8f1e2e02865c42348f9baddbbaafb1841dce610a/examples.md#node---yarn-2 | |
| - name: Cache node_modules | |
| id: cache-node-modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: '**/node_modules' | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
| - name: Cache .yarn/cache | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| uses: actions/cache@v4 | |
| with: | |
| path: '.yarn/cache' | |
| key: yarn-v3-cache-${{ github.ref_name }} | |
| restore-keys: yarn-v3-cache-v3 | |
| - name: Install dependencies | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| run: yarn install --immutable | |
| - name: cache shared components | |
| id: cache-shared-components | |
| uses: actions/cache@v4 | |
| with: | |
| path: 'digitransit-*' | |
| key: ${{ runner.os }}-shared-components-${{ hashFiles('digitransit-*') }} | |
| - name: build shared components | |
| if: ${{ steps.cache-shared-components.outputs.cache-hit != 'true' }} | |
| run: yarn run build-workspaces | |
| lint: | |
| needs: install | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [20.18] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: "Set time zone to Europe/Helsinki" | |
| uses: zcong1993/setup-timezone@master | |
| with: | |
| timezone: "Europe/Helsinki" | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| registry-url: 'https://registry.npmjs.org/' | |
| # https://github.com/actions/cache/blob/8f1e2e02865c42348f9baddbbaafb1841dce610a/examples.md#node---yarn-2 | |
| - name: Cache node_modules | |
| id: cache-node-modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: '**/node_modules' | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
| - name: Cache .yarn/cache | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| uses: actions/cache@v4 | |
| with: | |
| path: '.yarn/cache' | |
| key: yarn-v3-cache-${{ github.ref_name }} | |
| restore-keys: yarn-v3-cache-v3 | |
| - name: Install dependencies | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| run: yarn install --immutable | |
| - name: cache shared components | |
| id: cache-shared-components | |
| uses: actions/cache@v4 | |
| with: | |
| path: 'digitransit-*' | |
| key: ${{ runner.os }}-shared-components-${{ hashFiles('digitransit-*') }} | |
| - name: Build shared components | |
| if: ${{ steps.cache-shared-components.outputs.cache-hit != 'true' }} | |
| run: yarn run build-workspaces | |
| - name: Run linters | |
| run: yarn lint | |
| # - name: lint SVG sprites using xmllint | |
| # run: | | |
| # sudo apt update | |
| # sudo apt install -y libxml2-utils | |
| # xmllint --nonet --noout static/assets/svg-sprite.*.svg | |
| unit-test: | |
| needs: install | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [20.18] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: "Set time zone to Europe/Helsinki" | |
| uses: zcong1993/setup-timezone@master | |
| with: | |
| timezone: "Europe/Helsinki" | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| registry-url: 'https://registry.npmjs.org' | |
| # https://github.com/actions/cache/blob/8f1e2e02865c42348f9baddbbaafb1841dce610a/examples.md#node---yarn-2 | |
| - name: Cache node_modules | |
| id: cache-node-modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: '**/node_modules' | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
| - name: Cache .yarn/cache | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| uses: actions/cache@v4 | |
| with: | |
| path: '.yarn/cache' | |
| key: yarn-v3-cache-${{ github.ref_name }} | |
| restore-keys: yarn-v3-cache-v3 | |
| - name: Install dependencies | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| run: yarn install --immutable | |
| - name: cache shared components | |
| id: cache-shared-components | |
| uses: actions/cache@v4 | |
| with: | |
| path: 'digitransit-*' | |
| key: ${{ runner.os }}-shared-components-${{ hashFiles('digitransit-*') }} | |
| - name: Build shared components | |
| if: ${{ steps.cache-shared-components.outputs.cache-hit != 'true' }} | |
| run: yarn run build-workspaces | |
| - name: cache built Relay queries | |
| id: cache-relay | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ./__generated__ | |
| **/__generated__ | |
| key: ${{ runner.os }}-relay-${{ github.sha }} | |
| - name: build Relay queries | |
| if: ${{ steps.cache-relay.outputs.cache-hit != 'true' }} | |
| run: | | |
| yarn run relay | |
| - name: Run unit tests | |
| run: yarn run test-unit | |
| generate-sbom: | |
| needs: | |
| - lint | |
| - unit-test | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [20.18] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: "Set time zone to Europe/Helsinki" | |
| uses: zcong1993/setup-timezone@master | |
| with: | |
| timezone: "Europe/Helsinki" | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| registry-url: 'https://registry.npmjs.org/' | |
| # https://github.com/actions/cache/blob/8f1e2e02865c42348f9baddbbaafb1841dce610a/examples.md#node---yarn-2 | |
| - name: Cache node_modules | |
| id: cache-node-modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: '**/node_modules' | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
| - name: Cache .yarn/cache | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| uses: actions/cache@v4 | |
| with: | |
| path: '.yarn/cache' | |
| key: yarn-v3-cache-${{ github.ref_name }} | |
| restore-keys: yarn-v3-cache-v3 | |
| - name: Install dependencies | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| run: yarn install --immutable | |
| - name: cache shared components | |
| id: cache-shared-components | |
| uses: actions/cache@v4 | |
| with: | |
| path: 'digitransit-*' | |
| key: ${{ runner.os }}-shared-components-${{ hashFiles('digitransit-*') }} | |
| - name: Build shared components | |
| if: ${{ steps.cache-shared-components.outputs.cache-hit != 'true' }} | |
| run: yarn run build-workspaces | |
| - name: Generate SBOM | |
| run: yarn dlx -q @cyclonedx/[email protected] --output-file ${{ github.repository }}-${{ github.sha }}.json | |
| - name: Save SBOM artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: sbom-artifact | |
| path: ${{ github.repository }}-${{ github.sha }}.json | |
| # This is only done when pushing to v3 | |
| publish-npm: | |
| if: github.ref == 'refs/heads/v3' | |
| needs: | |
| - lint | |
| - unit-test | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [ 20.18 ] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: "Set time zone to Europe/Helsinki" | |
| uses: zcong1993/setup-timezone@master | |
| with: | |
| timezone: "Europe/Helsinki" | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| registry-url: 'https://registry.npmjs.org' | |
| # https://github.com/actions/cache/blob/8f1e2e02865c42348f9baddbbaafb1841dce610a/examples.md#node---yarn-2 | |
| - name: Cache node_modules | |
| id: cache-node-modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: '**/node_modules' | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
| - name: Cache .yarn/cache | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| uses: actions/cache@v4 | |
| with: | |
| path: '.yarn/cache' | |
| key: yarn-v3-cache-${{ github.ref_name }} | |
| restore-keys: yarn-v3-cache-v3 | |
| - name: Install dependencies | |
| if: ${{ steps.cache-node-modules.outputs.cache-hit != 'true' }} | |
| run: yarn install --immutable | |
| - name: cache shared components | |
| id: cache-shared-components | |
| uses: actions/cache@v4 | |
| with: | |
| path: 'digitransit-*' | |
| key: ${{ runner.os }}-shared-components-${{ hashFiles('digitransit-*') }} | |
| - name: Build shared components | |
| if: ${{ steps.cache-shared-components.outputs.cache-hit != 'true' }} | |
| run: yarn run build-workspaces | |
| - name: cache built Relay queries | |
| id: cache-relay | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ./__generated__ | |
| **/__generated__ | |
| key: ${{ runner.os }}-relay-${{ github.sha }} | |
| - name: build Relay queries | |
| if: ${{ steps.cache-relay.outputs.cache-hit != 'true' }} | |
| run: | | |
| yarn run relay | |
| - name: Update npm | |
| run: npm install -g npm@latest | |
| - name: disregard changed yarn.lock | |
| run: git update-index --assume-unchanged yarn.lock | |
| - name: Publish shared components to npm | |
| run: | | |
| { | |
| echo 'publish-logs<<EOF' >> $GITHUB_OUTPUT | |
| yarn digitransit-npm-autopublish >> $GITHUB_OUTPUT | |
| echo 'EOF' >> $GITHUB_OUTPUT | |
| } | |
| shell: bash | |
| id: publish | |
| - name: Parse publish logs | |
| if: steps.publish.outputs.publish-logs != '' | |
| run: | | |
| { | |
| echo 'published-packages<<EOF' >> $GITHUB_OUTPUT | |
| echo "${{ steps.publish.outputs.publish-logs }}" | grep -A100 'Successfully published' >> $GITHUB_OUTPUT | |
| echo 'EOF' >> $GITHUB_OUTPUT | |
| } | |
| shell: bash | |
| id: log-parse | |
| - name: Send published packages to slack | |
| if: steps.log-parse.outputs.published-packages != '' | |
| run: | | |
| ./.github/workflows/scripts/slack_message.sh | |
| env: | |
| SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }} | |
| SLACK_ACCESS_TOKEN: ${{ secrets.SLACK_ACCESS_TOKEN }} | |
| PUBLISHED_PACKAGES: ${{ steps.log-parse.outputs.published-packages }} | |
| shell: bash | |
| docker-push: | |
| if: github.event_name == 'push' | |
| needs: | |
| - lint | |
| - unit-test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set time zone to Europe/Helsinki | |
| uses: zcong1993/setup-timezone@master | |
| with: | |
| timezone: "Europe/Helsinki" | |
| - name: Create buildInfo.js file | |
| run: | | |
| echo -e "export const COMMIT_ID = \"${GITHUB_SHA}\";\nexport const BUILD_TIME = \"$(date -Iminutes -u)\";" >app/buildInfo.js | |
| - name: Configure Docker Buildx | |
| uses: docker/setup-buildx-action@v2 | |
| - name: Log in to DockerHub | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKER_USER }} | |
| password: ${{ secrets.DOCKER_AUTH }} | |
| - name: compute Docker image tags | |
| id: docker-tags | |
| run: | | |
| echo "branch-tag=${GITHUB_REF##*/}" >>$GITHUB_OUTPUT | |
| echo "permanent-tag=${GITHUB_REF##*/}-$(date +"%Y-%m-%dT%H.%M.%S")-${GITHUB_SHA:0:7}" >>$GITHUB_OUTPUT | |
| - name: build Docker image | |
| uses: docker/build-push-action@v4 | |
| with: | |
| context: . | |
| tags: | | |
| hsldevcom/digitransit-ui:${{ steps.docker-tags.outputs.branch-tag }} | |
| hsldevcom/digitransit-ui:${{ steps.docker-tags.outputs.permanent-tag }} | |
| # https://github.com/docker/build-push-action/blob/9472e9021074a3cb3279ba431598b8836d40433f/docs/advanced/cache.md#github-cache | |
| # https://github.com/moby/buildkit#registry-push-image-and-cache-separately | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max,oci-mediatypes=true,compression=zstd | |
| push: false | |
| # https://docs.docker.com/build/ci/github-actions/test-before-push/ | |
| load: true | |
| - name: run integration tests | |
| run: | | |
| ./test/integration/test.sh ${{ steps.docker-tags.outputs.branch-tag }} | |
| - name: push Docker image | |
| uses: docker/build-push-action@v4 | |
| with: | |
| context: . | |
| tags: | | |
| hsldevcom/digitransit-ui:${{ steps.docker-tags.outputs.branch-tag }} | |
| hsldevcom/digitransit-ui:${{ steps.docker-tags.outputs.permanent-tag }} | |
| # https://github.com/docker/build-push-action/blob/9472e9021074a3cb3279ba431598b8836d40433f/docs/advanced/cache.md#github-cache | |
| # https://github.com/moby/buildkit#registry-push-image-and-cache-separately | |
| cache-from: type=gha | |
| push: true |