name: Invidious CI on: schedule: - cron: "0 0 * * *" # Every day at 00:00 push: branches: - "master" - "api-only" pull_request: branches: "*" paths-ignore: - "*.md" - LICENCE - TRANSLATION - invidious.service - .git* - .editorconfig - screenshots/* - assets/** - locales/* - config/** - .github/ISSUE_TEMPLATE/* - kubernetes/** jobs: build: container: image: node:20-bookworm name: "build - crystal: ${{ matrix.crystal }}, stable: ${{ matrix.stable }}" continue-on-error: ${{ !matrix.stable }} strategy: fail-fast: false matrix: stable: [true] crystal: - 1.9.2 - 1.10.1 - 1.11.2 - 1.12.1 include: - crystal: nightly stable: false steps: - uses: actions/checkout@v4 with: submodules: true - name: Install Crystal uses: crystal-lang/install-crystal@v1.8.0 with: crystal: ${{ matrix.crystal }} - name: Cache Shards uses: actions/cache@v3 with: path: ./lib key: shards-${{ hashFiles('shard.lock') }} - name: Install Shards run: | if ! shards check; then shards install fi - name: Run tests run: crystal spec - name: Run lint run: | if ! crystal tool format --check; then crystal tool format git diff exit 1 fi - name: Build run: crystal build --warnings all --error-on-warnings --error-trace src/invidious.cr build-docker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build Docker run: docker compose build --build-arg release=0 - name: Run Docker run: docker compose up -d - name: Test Docker run: while curl -Isf http://localhost:3000; do sleep 1; done build-docker-arm64: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: platforms: arm64 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Docker ARM64 image uses: docker/build-push-action@v5 with: context: . file: docker/Dockerfile.arm64 platforms: linux/arm64/v8 build-args: release=0 - name: Test Docker run: while curl -Isf http://localhost:3000; do sleep 1; done ameba_lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: true - name: Install Crystal uses: crystal-lang/install-crystal@v1.8.0 with: crystal: latest - name: Cache Shards uses: actions/cache@v3 with: path: | ./lib ./bin key: shards-${{ hashFiles('shard.lock') }} - name: Install Shards run: shards install - name: Run Ameba linter run: bin/ameba