Skip to content

Improvements to video page #1875

Improvements to video page

Improvements to video page #1875

Workflow file for this run

name: Build & test
on:
pull_request:
paths:
- "backend/**"
- "frontend/**"
- "docs/docs/setup/config.toml"
- "util/dev-config/*"
- ".deployment/templates/config.toml"
- "util/dummy-login/dist/index.js"
- ".github/workflows/ci.yml"
- ".github/workflows/deploy.yml"
push:
branches:
- "*"
tags-ignore:
- "*"
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: --deny warnings
jobs:
main:
runs-on: ubuntu-20.04
services:
postgres:
image: postgres:11
env:
POSTGRES_USER: tobira
POSTGRES_PASSWORD: tobira
POSTGRES_DB: tobira
ports:
- 5432:5432
options: '--name tobira_pg'
steps:
- uses: actions/checkout@v3
- name: Restore backend cache
uses: Swatinem/rust-cache@v2
with:
workspaces: backend
# Frontend cache: only the NPM folder is cached, not the node_modules, as
# recommended here: https://github.com/actions/cache/blob/main/examples.md#node---npm
- name: Restore NPM cache
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('frontend/package-lock.json') }}
# Figure out build mode
- name: Determine build mode
run: |
if [[ "$GITHUB_REPOSITORY" == "elan-ev/tobira" ]] && [ "$GITHUB_REF" == "refs/heads/master" ]; then
echo "ci_cargo_flags=--release" >> $GITHUB_ENV
echo "ci_targetdir=target/release" >> $GITHUB_ENV
echo "ci_webpack_flags=production" >> $GITHUB_ENV
else
echo "ci_cargo_flags=--features=embed-in-debug" >> $GITHUB_ENV
echo "ci_targetdir=target/debug" >> $GITHUB_ENV
echo "ci_webpack_flags=development" >> $GITHUB_ENV
fi
# The actual building and testing!
- name: Installing frontend dependencies (npm ci)
working-directory: frontend
run: npm ci
- name: Generate GraphQL query types
working-directory: frontend
run: npx relay-compiler
- name: Lint frontend
working-directory: frontend
run: npx eslint --max-warnings 0 .
- name: Build frontend
working-directory: frontend
run: npx webpack --mode=${{ env.ci_webpack_flags }}
- name: Typecheck frontend
working-directory: frontend
run: npx tsc
- name: Build backend
working-directory: backend
run: cargo build ${{ env.ci_cargo_flags }}
- name: Test backend
working-directory: backend
run: cargo test
- name: Move Tobira binary
run: mv backend/${{ env.ci_targetdir }}/tobira tobira
- name: Compress Tobira binary
run: objcopy --compress-debug-sections tobira
- name: Make sure `schema.graphql` is up to date
run: ./tobira export-api-schema | diff -u --color=always - frontend/src/schema.graphql
- name: Make sure `docs/docs/setup/config.toml` is up to date
run: ./tobira write-config | diff -u --color=always - docs/docs/setup/config.toml
# Test DB migrations
- name: Download latest DB dump
run: curl --silent --output db-dump.xz https://s3.opencast-niedersachsen.de/tobira/db-dump-latest.xz
- name: Decompress DB dump
run: xz -d db-dump.xz
# We need to use the same version as the DB, so we use 'docker exec'
- name: Restore DB dump
run: |
docker exec -i tobira_pg pg_restore \
--dbname postgresql://tobira:tobira@localhost/postgres \
--clean \
--create \
--if-exists \
< db-dump || true
- name: Run migrations
run: ./tobira db migrate --config util/dev-config/config.toml
# Prepare the ID (used in the subdomain) for deployment. This has to be done
# here because in the `deploy` workflow, we don't have access to the correct
# `GITHUB_REF` anymore.
- name: Write deploy ID to file
run: ./.deployment/deploy-id.sh "$GITHUB_REF" > deploy-id
# Archive files to be used in the `deploy` workflow
- name: Archive deployment files as artifact
uses: actions/upload-artifact@v3
with:
name: test-deployment-files
path: |
tobira
util/dev-config/logo-large.svg
util/dev-config/logo-small.svg
util/dev-config/favicon.svg
deploy-id
.deployment/templates/config.toml
util/dummy-login/dist/index.js