Skip to content

CI use Node version from package.json (#379) #802

CI use Node version from package.json (#379)

CI use Node version from package.json (#379) #802

Workflow file for this run

name: CI
on:
push:
branches:
- main
pull_request:
merge_group:
env:
DOCKER_IMAGE: ghcr.io/nordeck/matrix-barcamp-widget
jobs:
build:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 15
outputs:
docker-tag: ${{ steps.meta.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
# required for changesets
fetch-depth: '0'
# don't persist the credentials so the changesets action doesn't use the
# github actions token but the git token provided via environment variable
persist-credentials: false
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
cache: 'yarn'
- name: yarn install
run: yarn install --frozen-lockfile
- name: prettier:check
run: yarn prettier:check
- name: depcheck
run: yarn depcheck
- name: lint
run: yarn lint
- name: type checking and declarations
run: yarn tsc
- name: check translations
run: yarn translate --fail-on-update
- name: test
run: yarn test:all
- name: build
run: yarn build
- name: generate disclaimer
run: yarn generate-disclaimer
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Generate Docker metadata
id: meta
uses: docker/metadata-action@v5
env:
DOCKER_METADATA_PR_HEAD_SHA: true
with:
images: ${{ env.DOCKER_IMAGE }}
labels: |
org.opencontainers.image.title=Matrix BarCamp
org.opencontainers.image.description=A widget for organizing barcamps in matrix chat rooms
org.opencontainers.image.vendor=Nordeck IT + Consulting GmbH
tags: |
type=sha,prefix=
- name: Build and push
uses: docker/build-push-action@v5
id: dockerBuild
with:
push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'pull_request' && secrets.GH_APP_OS_APP_ID != '' }}
context: .
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64,linux/s390x
- name: Generate GitHub token
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
id: generate_token
uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a # @v2.1.0
with:
app_id: ${{ secrets.GH_APP_OS_APP_ID }}
private_key: ${{ secrets.GH_APP_OS_PRIVATE_KEY }}
- name: Create Release Pull Request or Publish Packages
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
uses: changesets/action@aba318e9165b45b7948c60273e0b72fce0a64eb9 # @v1.4.7
with:
publish: yarn changeset tag
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
e2e:
runs-on: ubuntu-latest
timeout-minutes: 25
strategy:
fail-fast: false
matrix:
browser: ['chromium', 'firefox', 'webkit']
outputs:
docker-tag: ${{ steps.meta.outputs.version }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
cache: 'yarn'
- name: yarn install
run: yarn install --frozen-lockfile
- name: build
run: yarn build
- name: generate disclaimer
run: yarn generate-disclaimer
- name: Login to ghcr.io
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker build
uses: docker/build-push-action@v5
id: dockerBuild
with:
context: .
- name: Install Playwright Browsers
run: npx playwright install --with-deps ${{ matrix.browser }}
- name: Run Playwright tests
env:
IMAGE_ID: ${{ steps.dockerBuild.outputs.imageid }}
run: yarn playwright test --project=${{ matrix.browser }}
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report-${{ matrix.browser }}
path: playwright-report/
retention-days: 7
deploy:
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
name: Deploy to Dev
runs-on: ubuntu-latest
timeout-minutes: 5
needs:
- build
- e2e
steps:
- name: Generate GitHub token
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
id: generate_token
uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a # @v2.1.0
with:
app_id: ${{ secrets.GH_APP_OS_APP_ID }}
private_key: ${{ secrets.GH_APP_OS_PRIVATE_KEY }}
- name: Trigger Workflow
uses: actions/github-script@v7
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
github.rest.actions.createWorkflowDispatch({
owner: 'nordeck',
repo: '${{ secrets.GITOPS_DEPLOY_REPOSITORY }}',
workflow_id: 'deployment.yml',
ref: 'main',
inputs: {
environment: '${{ secrets.GITOPS_DEPLOY_ENVIRONMENT}}',
application: 'matrix-barcamp',
tag: '${{ github.sha }}'
}
})