Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
05c7663
feat(trackers): add Lat-Team (LT) tracker support
HichamLL04 Jul 9, 2026
657f3e6
Merge branch 'main' into lat-team
HichamLL04 Jul 10, 2026
081c78f
refactor(trackers): address review feedback for Lat-Team (LT) support
HichamLL04 Jul 11, 2026
1a1c0b8
Merge branch 'main' into lat-team
HichamLL04 Jul 11, 2026
0acf4d1
refactor!: replace Wails with canonical WebUI architecture
Audionut Jul 16, 2026
f6c9d5b
fix: tracker refinement
Audionut Jul 16, 2026
a62a119
fix: unify debug and dryrun
Audionut Jul 17, 2026
a03216a
refactor: standalone trackers
Audionut Jul 17, 2026
c99a3a8
fix: fill observability gap and implement screens-description tracker…
Audionut Jul 17, 2026
b11712c
fix: remove import
Audionut Jul 17, 2026
957635f
fix: another unneeded import
Audionut Jul 17, 2026
a6e8754
refactor: rules into rule authorizations
Audionut Jul 17, 2026
459f437
fix: adjust rule strictness
Audionut Jul 18, 2026
1ac3dde
fix: input page
Audionut Jul 18, 2026
c725fe8
chore: docstrings
Audionut Jul 18, 2026
bc0424e
fix(mtv): anyof id rule
Audionut Jul 18, 2026
9f3eb04
test(dupe): stabilize completion ordering
Audionut Jul 18, 2026
69e30b7
fix(tooling): scope gofix to changed files
Audionut Jul 18, 2026
926338a
fix(webui): restore tracker dry-run payloads
Audionut Jul 18, 2026
7d335e2
fix: address review findings
Audionut Jul 18, 2026
149ac27
test(cli): stabilize per-item timeout deadline check
Audionut Jul 19, 2026
6421196
fix: language rules
Audionut Jul 19, 2026
966248a
fix: remove old script handle
Audionut Jul 19, 2026
c5aa332
chore: merge main into refactor/internal
Audionut Jul 19, 2026
d2435e7
Merge branch 'pr-273' into lat-team and resolve conflicts
HichamLL04 Jul 21, 2026
12cc1c8
refactor(trackers): migrate LT (Lat-Team) to site-local tracker owner…
HichamLL04 Jul 21, 2026
e25a721
Merge branch 'main' into lat-team
HichamLL04 Jul 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 2 additions & 3 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
.git
.github
dist
gui/build
gui/frontend/node_modules
gui/frontend/dist
webui/node_modules
webui/dist
scripts
documentation
**/*_test.go
Expand Down
187 changes: 7 additions & 180 deletions .github/workflows/build-binaries.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,21 +69,21 @@ jobs:
with:
node-version: 24
cache: pnpm
cache-dependency-path: gui/frontend/pnpm-lock.yaml
cache-dependency-path: webui/pnpm-lock.yaml

- name: Install frontend dependencies
shell: bash
working-directory: gui/frontend
working-directory: webui
run: pnpm install --frozen-lockfile

- name: Build embedded web assets
shell: bash
working-directory: gui/frontend
working-directory: webui
run: pnpm run build:bundle

- name: Sync embedded web assets
shell: pwsh
run: pwsh -NoProfile -File ./scripts/sync-frontend-assets.ps1
run: pwsh -NoProfile -File ./scripts/sync-webui-assets.ps1

- name: Build CLI
shell: bash
Expand Down Expand Up @@ -168,181 +168,8 @@ jobs:
path: dist/packages/upbrr-cli-*-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.goarm != '' && format('v{0}', matrix.goarm) || '' }}${{ matrix.goos == 'windows' && '.zip' || '.tar.gz' }}
if-no-files-found: error

build-gui:
name: Build GUI (${{ matrix.platform }})
runs-on: ${{ matrix.runner }}
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
include:
- runner: windows-latest
platform: windows/amd64
artifact: windows-x64
- runner: windows-latest
platform: windows/arm64
artifact: windows-arm64
- runner: ubuntu-24.04
platform: linux/amd64
artifact: linux-x64
- runner: ubuntu-24.04-arm
platform: linux/arm64
artifact: linux-arm64
- runner: macos-15-intel
platform: darwin/amd64
artifact: macos-x64
- runner: macos-15
platform: darwin/arm64
artifact: macos-arm64

steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ inputs.release_tag || github.ref }}

- name: Setup Go
uses: actions/setup-go@v6
with:
go-version-file: go.mod
cache: true

- name: Setup pnpm
uses: pnpm/action-setup@v6
with:
version: 10.27.0

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 24
cache: pnpm
cache-dependency-path: gui/frontend/pnpm-lock.yaml

- name: Install GUI frontend dependencies
shell: bash
working-directory: gui/frontend
run: pnpm install --frozen-lockfile

- name: Typecheck and build GUI frontend assets
shell: bash
working-directory: gui/frontend
run: |
set -euo pipefail
pnpm run typecheck &
typecheck_pid=$!
pnpm run build:bundle &
build_pid=$!
wait "$typecheck_pid"
wait "$build_pid"

- name: Sync embedded GUI assets
shell: pwsh
run: pwsh -NoProfile -File ./scripts/sync-frontend-assets.ps1

- name: Install Linux GUI dependencies
if: startsWith(matrix.platform, 'linux/')
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
libgtk-3-dev \
libwebkit2gtk-4.1-dev \
libglib2.0-dev \
libx11-dev \
libxkbcommon-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
pkg-config \
patchelf

- name: Install Wails CLI
shell: bash
run: go install github.com/wailsapp/wails/v2/cmd/wails@v2.12.0

- name: Build GUI
shell: bash
env:
RELEASE_TAG: ${{ inputs.release_tag }}
REF_TYPE: ${{ github.ref_type }}
REF_NAME: ${{ github.ref_name }}
run: |
set -euo pipefail
version="$RELEASE_TAG"
if [[ -z "$version" && "$REF_TYPE" == "tag" ]]; then
version="$REF_NAME"
fi
if [[ -z "$version" ]]; then
version="dev"
fi
build_id="$(git rev-parse --short=12 HEAD)"
ldflags="-s -w -X main.version=${version} -X main.buildIdentifier=${build_id}"

cd gui
if [[ "${{ matrix.platform }}" == linux/* ]]; then
wails build -platform "${{ matrix.platform }}" -clean -trimpath -tags webkit2_41 -ldflags "$ldflags"
elif [[ "${{ matrix.platform }}" == "windows/arm64" ]]; then
# Wails bindings helper is built for target arch; skip on x64 runners for arm64 target.
wails build -platform "${{ matrix.platform }}" -clean -skipbindings -trimpath -ldflags "$ldflags"
else
wails build -platform "${{ matrix.platform }}" -clean -trimpath -ldflags "$ldflags"
fi

- name: Package GUI (Windows)
if: startsWith(matrix.platform, 'windows/')
shell: pwsh
env:
RELEASE_TAG: ${{ inputs.release_tag }}
REF_TYPE: ${{ github.ref_type }}
REF_NAME: ${{ github.ref_name }}
run: |
$version = $env:RELEASE_TAG
if (-not $version -and $env:REF_TYPE -eq "tag") {
$version = $env:REF_NAME
}
if (-not $version) {
$version = "dev"
}
New-Item -ItemType Directory -Force -Path dist/packages | Out-Null
$target = "${{ matrix.artifact }}"
$archive = "dist/packages/upbrr-gui-$version-$target.zip"
if (Test-Path $archive) {
Remove-Item $archive -Force
}
Compress-Archive -Path "gui/build/bin/*" -DestinationPath $archive -Force

- name: Package GUI (Linux/macOS)
if: ${{ !startsWith(matrix.platform, 'windows/') }}
shell: bash
env:
RELEASE_TAG: ${{ inputs.release_tag }}
REF_TYPE: ${{ github.ref_type }}
REF_NAME: ${{ github.ref_name }}
run: |
set -euo pipefail
mkdir -p dist/packages
version="$RELEASE_TAG"
if [[ -z "$version" && "$REF_TYPE" == "tag" ]]; then
version="$REF_NAME"
fi
if [[ -z "$version" ]]; then
version="dev"
fi
target="${{ matrix.artifact }}"
archive="dist/packages/upbrr-gui-${version}-${target}.tar.gz"
tar -C gui/build/bin -czf "$archive" .

- name: Upload GUI artifact
uses: actions/upload-artifact@v7
with:
name: gui-${{ matrix.artifact }}
path: dist/packages/upbrr-gui-*-${{ matrix.artifact }}${{ startsWith(matrix.platform, 'windows/') && '.zip' || '.tar.gz' }}
if-no-files-found: error

build-docker-amd64:
name: Build Docker Image (cli+gui linux/amd64)
name: Build Docker Image (CLI+WebUI linux/amd64)
runs-on: ubuntu-latest
timeout-minutes: 45
permissions:
Expand Down Expand Up @@ -424,7 +251,7 @@ jobs:
cache-to: type=gha,scope=build-docker-amd64,mode=min

build-docker-arm64:
name: Build Docker Image (cli+gui linux/arm64)
name: Build Docker Image (CLI+WebUI linux/arm64)
runs-on: ubuntu-24.04-arm
timeout-minutes: 45
permissions:
Expand Down Expand Up @@ -506,7 +333,7 @@ jobs:
cache-to: type=gha,scope=build-docker-arm64,mode=min

publish-docker-manifest:
name: Publish Docker Manifest (cli+gui)
name: Publish Docker Manifest (CLI+WebUI)
runs-on: ubuntu-latest
timeout-minutes: 20
needs:
Expand Down
20 changes: 10 additions & 10 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@ jobs:
with:
node-version: 24
cache: pnpm
cache-dependency-path: gui/frontend/pnpm-lock.yaml
cache-dependency-path: webui/pnpm-lock.yaml

- name: Install frontend dependencies
working-directory: gui/frontend
working-directory: webui
run: pnpm install --frozen-lockfile

# Prettier keeps its own per-file cache keyed on Prettier's version and the
Expand All @@ -70,29 +70,29 @@ jobs:
id: prettier-cache
uses: actions/cache/restore@v4
with:
path: gui/frontend/node_modules/.cache/prettier
key: prettier-${{ runner.os }}-${{ hashFiles('gui/frontend/package.json', 'gui/frontend/pnpm-lock.yaml', 'gui/frontend/.prettierrc*', 'gui/frontend/prettier.config.*') }}
path: webui/node_modules/.cache/prettier
key: prettier-${{ runner.os }}-${{ hashFiles('webui/package.json', 'webui/pnpm-lock.yaml', 'webui/.prettierrc*', 'webui/prettier.config.*') }}
restore-keys: |
prettier-${{ runner.os }}-

- name: Run frontend lint
working-directory: gui/frontend
working-directory: webui
run: pnpm run lint

- name: Run frontend dead-code lint
working-directory: gui/frontend
working-directory: webui
run: pnpm run lint:dead

- name: Run frontend typecheck
working-directory: gui/frontend
working-directory: webui
run: pnpm run typecheck

- name: Run frontend unit tests
working-directory: gui/frontend
working-directory: webui
run: pnpm run test:unit

- name: Check frontend formatting
working-directory: gui/frontend
working-directory: webui
run: pnpm run format:check

# Save only when the primary key wasn't an exact restore-hit so we don't retry
Expand All @@ -104,5 +104,5 @@ jobs:
if: always() && steps.prettier-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: gui/frontend/node_modules/.cache/prettier
path: webui/node_modules/.cache/prettier
key: ${{ steps.prettier-cache.outputs.cache-primary-key }}
10 changes: 5 additions & 5 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ jobs:
with:
node-version: 24
cache: pnpm
cache-dependency-path: gui/frontend/pnpm-lock.yaml
cache-dependency-path: webui/pnpm-lock.yaml

- name: Install frontend dependencies
working-directory: gui/frontend
working-directory: webui
run: pnpm install --frozen-lockfile

- name: Install Playwright browser
working-directory: gui/frontend
working-directory: webui
run: pnpm exec playwright install --with-deps chromium

- name: Run E2E
Expand All @@ -54,13 +54,13 @@ jobs:
uses: actions/upload-artifact@v7
with:
name: playwright-report
path: gui/frontend/playwright-report
path: webui/playwright-report
if-no-files-found: ignore

- name: Upload Playwright traces
if: failure()
uses: actions/upload-artifact@v7
with:
name: playwright-test-results
path: gui/frontend/test-results
path: webui/test-results
if-no-files-found: ignore
12 changes: 9 additions & 3 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ concurrency:
cancel-in-progress: true

jobs:
pathpolicy:
name: pathpolicy (${{ matrix.os }})
policies:
name: repository policies (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 5
strategy:
Expand All @@ -34,14 +34,20 @@ jobs:
go-version-file: go.mod
cache: true

- name: Run architecture ownership policy
run: go run ./cmd/architecturepolicy

- name: Run path portability policy
run: go run ./cmd/pathpolicy

- name: Run composite literal layout policy
run: go run ./cmd/literalpolicy

golangci:
name: golangci-lint
runs-on: ubuntu-latest
timeout-minutes: 10
needs: pathpolicy
needs: policies

steps:
- name: Checkout
Expand Down
6 changes: 0 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,6 @@ jobs:
path: release-artifacts
pattern: cli-*

- name: Download GUI artifacts
uses: actions/download-artifact@v5
with:
path: release-artifacts
pattern: gui-*

- name: Publish release assets
shell: bash
env:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/vuln.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: vuln
on:
workflow_dispatch:
schedule:
- cron: '17 8 * * 1'
- cron: "17 8 * * 1"

permissions:
contents: read
Expand Down Expand Up @@ -37,4 +37,4 @@ jobs:

- name: Run OSV dependency scan
if: ${{ !cancelled() }}
run: go run github.com/google/osv-scanner/v2/cmd/osv-scanner@${OSV_SCANNER_VERSION} scan source --lockfile go.mod --lockfile gui/frontend/pnpm-lock.yaml
run: go run github.com/google/osv-scanner/v2/cmd/osv-scanner@${OSV_SCANNER_VERSION} scan source --lockfile go.mod --lockfile webui/pnpm-lock.yaml
Loading