Skip to content

Merge pull request #5206 from HSLdevcom/DT-6528 #2190

Merge pull request #5206 from HSLdevcom/DT-6528

Merge pull request #5206 from HSLdevcom/DT-6528 #2190

Workflow file for this run

name: Process push or PR
on:
push:
branches:
- v3
- prerel
- waltti
pull_request:
branches:
- v3
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.x]
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 }}
# 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.x]
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 }}
# 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.x]
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 }}
# 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
# 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.x ]
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 }}
# 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: Authenticate with registry
run: echo //registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN} > .npmrc
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
- 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 and 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
cache-to: type=gha,mode=max,oci-mediatypes=true,compression=zstd
push: true