Skip to content

feat: resource updates overview page #2674

feat: resource updates overview page

feat: resource updates overview page #2674

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main, "release/**"]
permissions:
contents: read
actions: read
checks: write
pull-requests: write
id-token: write
concurrency:
group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}"
cancel-in-progress: true
jobs:
go-tests:
name: Go Tests (${{ matrix.module.name }})
runs-on: depot-ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
module:
- name: backend
path: backend
timeout: 30
gcc: true
cgo_enabled: "1"
- name: cli
path: cli
timeout: 10
gcc: false
cgo_enabled: "1"
- name: types
path: types
timeout: 10
gcc: false
cgo_enabled: "1"
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Just
uses: extractions/setup-just@v3
- name: Set up Depot CLI
if: matrix.module.gcc
uses: depot/setup-action@v1
- name: Setup Go
uses: actions/setup-go@v6
with:
go-version-file: ${{ matrix.module.path }}/go.mod
cache: true
cache-dependency-path: ${{ matrix.module.path }}/go.sum
- name: Install GCC
if: matrix.module.gcc
run: |
sudo apt-get update
sudo apt-get install -y gcc
- name: Download modules
run: just deps install go
- name: Run unit tests
env:
CGO_ENABLED: ${{ matrix.module.cgo_enabled }}
run: just test ${{ matrix.module.name }}
- name: Upload coverage artifact
if: always()
uses: actions/upload-artifact@v7
with:
name: ${{ matrix.module.name }}-coverage
path: ${{ matrix.module.path }}/coverage.txt
go-linter:
name: Go Linter (${{ matrix.module.name }})
runs-on: depot-ubuntu-latest
strategy:
fail-fast: false
matrix:
module:
- name: backend
args: --build-tags=exclude_frontend --config=../.github/.golangci.yml
- name: cli
args: --config=../.github/.golangci.yml
- name: types
args: --config=../.github/.golangci.yml
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version-file: ${{ matrix.module.name }}/go.mod
cache-dependency-path: ${{ matrix.module.name }}/go.sum
- name: Run Golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: latest
args: ${{ matrix.module.args }}
working-directory: ${{ matrix.module.name }}
only-new-issues: false
deadcode:
name: Go Deadcode Analysis
if: github.event.pull_request.head.repo.owner.login == 'getarcaneapp'
runs-on: depot-ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Go
uses: actions/setup-go@v6
with:
go-version-file: backend/go.mod
cache-dependency-path: backend/go.sum
- name: Install deadcode
run: go install golang.org/x/tools/cmd/deadcode@latest
- name: Add deadcode problem matcher
run: echo "::add-matcher::.github/matchers/deadcode-matcher.json"
- name: Run deadcode analysis
id: deadcode
working-directory: backend
continue-on-error: true
run: |
OUTPUT=$(deadcode ./... 2>&1 || true)
echo "$OUTPUT"
COUNT=$(echo "$OUTPUT" | grep -c "unreachable func" || true)
if [ -z "$COUNT" ]; then COUNT=0; fi
echo "count=$COUNT" >> $GITHUB_OUTPUT
echo "output<<EOF" >> $GITHUB_OUTPUT
echo "$OUTPUT" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Find Comment
uses: peter-evans/find-comment@v4
id: fc
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: "github-actions[bot]"
body-includes: "## 🔍 Deadcode Analysis"
- name: Delete comment if no deadcode found
if: steps.deadcode.outputs.count == '0' && steps.fc.outputs.comment-id != ''
uses: actions/github-script@v8
with:
script: |
github.rest.issues.deleteComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: ${{ steps.fc.outputs.comment-id }}
})
- name: Comment deadcode results
if: steps.deadcode.outputs.count != '0'
uses: peter-evans/create-or-update-comment@v5
with:
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
## 🔍 Deadcode Analysis
Found **${{ steps.deadcode.outputs.count }}** unreachable functions in the backend.
<details>
<summary>View details</summary>
```
${{ steps.deadcode.outputs.output }}
```
Only remove deadcode that you know is 100% no longer used.
</details>
> Analysis from commit ${{ github.sha }}
edit-mode: replace
svelte-check:
name: Svelte Type Check
runs-on: depot-ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup pnpm
uses: pnpm/action-setup@v5
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 25
cache: pnpm
- name: Setup Just
uses: extractions/setup-just@v3
- name: Install Fontend Dependencies
run: just deps install frontend
- name: Add svelte-check problem matcher
run: echo "::add-matcher::.github/matchers/svelte-check-matcher.json"
- name: Build frontend
run: just build single frontend
- name: Run svelte-check
run: just lint frontend
e2e-tests:
name: E2E Tests (${{ matrix.database.name }})
if: ${{ github.head_ref != 'l10n_crowdin' }}
runs-on: depot-ubuntu-latest
permissions:
contents: read
actions: write
id-token: write
strategy:
fail-fast: false
matrix:
database:
- name: sqlite
compose_file: setup/compose.yaml
port: 3000
- name: postgres
compose_file: setup/compose-postgres.yaml
port: 3001
- name: proxy
compose_file: setup/compose-proxy.yaml
port: 3002
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup pnpm
uses: pnpm/action-setup@v5
with:
run_install: false
- name: Setup Just
uses: extractions/setup-just@v3
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 25
cache: pnpm
- name: Set up Depot CLI
uses: depot/setup-action@v1
- name: Setup depot buildx driver
run: depot configure-docker
- name: Cache Playwright Browsers
uses: actions/cache@v5
id: playwright-cache
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ hashFiles('tests/pnpm-lock.yaml', 'tests/package.json') }}
restore-keys: |
${{ runner.os }}-playwright-
- name: Pull and save test images
run: |
docker pull ghcr.io/linuxserver/nginx:latest
docker pull ghcr.io/linuxserver/radarr:nightly
docker save ghcr.io/linuxserver/nginx:latest ghcr.io/linuxserver/radarr:nightly > /tmp/test-images.tar
- name: Setup and Install Playwright Dependencies
run: just deps install tests
- name: Run Playwright E2E tests
run: just test e2e
env:
COMPOSE_FILE: ${{ matrix.database.compose_file }}
BASE_URL: http://localhost:${{ matrix.database.port }}
- name: Upload Playwright HTML report
if: always()
uses: actions/upload-artifact@v7
with:
name: playwright-report-${{ matrix.database.name }}
path: tests/.report
include-hidden-files: true
retention-days: 15