mirror of
https://gitlab.com/vyla-entertainment/home.git
synced 2026-11-09 19:57:20 -05:00
176 lines
5.2 KiB
YAML
176 lines
5.2 KiB
YAML
stages:
|
|
- build
|
|
- release
|
|
|
|
build:
|
|
stage: build
|
|
tags:
|
|
- saas-windows-medium-amd64
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "schedule"'
|
|
- if: '$CI_PIPELINE_SOURCE == "web"'
|
|
- if: '$CI_COMMIT_BRANCH == "main"'
|
|
changes:
|
|
- build-pipeline.js
|
|
- package.json
|
|
- config/**/*
|
|
- main.js
|
|
- service-manager.js
|
|
- patcher.js
|
|
- credential-manager.js
|
|
- crypto-utils.js
|
|
- update-client.js
|
|
- .gitlab-ci.yml
|
|
variables:
|
|
GITLAB_TOKEN: $VYLA_GITLAB_TOKEN
|
|
PLAYER_TMDB_KEY: $TMDB_KEY
|
|
PLAYER_API_KEY: $API_KEY
|
|
STREAM_API_TMDB_API_KEY: $TMDB_API_KEY
|
|
STREAM_API_GA_API_SECRET: $GA_API_SECRET
|
|
STREAM_API_GA_MEASUREMENT_ID: $GA_MEASUREMENT_ID
|
|
STREAM_API_TOKEN_SECRET: $TOKEN_SECRET
|
|
PLAYER_BASE_URL: $BASE_URL
|
|
STREAM_API_PROXY_URL: $PROXY_URL
|
|
STREAM_API_PROXY_STREAMS: $PROXY_STREAMS
|
|
STREAM_API_ENABLE_DEBUG_ROUTE: $ENABLE_DEBUG_ROUTE
|
|
PLAYER_BYPASS_AUTH: $BYPASS_AUTH
|
|
STREAM_API_BYPASS_AUTH: $BYPASS_AUTH
|
|
AUTH_PROXY_VITE_BASE_URL: $AUTH_PROXY_BASE_URL
|
|
AUTH_PROXY_VITE_API_KEY: $AUTH_PROXY_API_KEY
|
|
AUTH_PROXY_DEV_BYPASS_AUTH: $DEV_BYPASS_AUTH
|
|
AUTH_PROXY_PROXY_VITE_API_KEY: $PROXY_VITE_API_KEY
|
|
cache:
|
|
key:
|
|
files:
|
|
- package-lock.json
|
|
paths:
|
|
- node_modules/
|
|
script:
|
|
- npm ci
|
|
|
|
- |
|
|
$repos = @('frontend', 'player', 'stream-api', 'live-api-streampk', 'auth-proxy')
|
|
$last = @{}
|
|
if (Test-Path "last-shas.json") {
|
|
$last = Get-Content last-shas.json | ConvertFrom-Json -AsHashtable
|
|
}
|
|
|
|
$current = @{}
|
|
$changed = $false
|
|
|
|
foreach ($repo in $repos) {
|
|
$headers = @{
|
|
"PRIVATE-TOKEN" = "$env:GITLAB_TOKEN"
|
|
}
|
|
|
|
$uri = "https://gitlab.com/api/v4/projects/vyla-entertainment%2F$repo/repository/commits/main"
|
|
|
|
try {
|
|
$resp = Invoke-RestMethod -Uri $uri -Headers $headers
|
|
$sha = $resp.id
|
|
$current[$repo] = $sha
|
|
|
|
if (-not $last.ContainsKey($repo) -or $last[$repo] -ne $sha) {
|
|
Write-Host "Change detected in $repo (main): $sha"
|
|
$changed = $true
|
|
} else {
|
|
Write-Host "No change in $repo (main)"
|
|
}
|
|
} catch {
|
|
Write-Warning "Failed to fetch commit info for $repo. (Ensure token has api/read_repository scopes)."
|
|
}
|
|
}
|
|
|
|
$current | ConvertTo-Json | Set-Content last-shas.json
|
|
|
|
if ($env:CI_PIPELINE_SOURCE -ne "schedule") {
|
|
$changed = $true
|
|
}
|
|
|
|
if (-not $changed) {
|
|
Write-Host "No changes detected. Skipping build."
|
|
echo "CHANGED=false" >> build.env
|
|
exit 0
|
|
}
|
|
|
|
echo "CHANGED=true" >> build.env
|
|
|
|
- |
|
|
git config user.name "gitlab-ci[bot]"
|
|
git config user.email "gitlab-ci[bot]@gitlab.com"
|
|
git add last-shas.json
|
|
|
|
$gitStatus = git status --porcelain
|
|
if ($gitStatus) {
|
|
git remote set-url origin "https://oauth2:$env:GITLAB_TOKEN@gitlab.com/$env:CI_PROJECT_PATH.git"
|
|
git commit -m "chore: update last-known repo SHAs [skip ci]"
|
|
git push origin "HEAD:$env:CI_COMMIT_BRANCH"
|
|
}
|
|
|
|
- Write-Host "Starting secure build process..."
|
|
- node build-pipeline.js
|
|
|
|
- |
|
|
if (Test-Path "update-payload.zip") {
|
|
Write-Host "✓ Build artifact verified: update-payload.zip exists"
|
|
$size = (Get-Item update-payload.zip).Length
|
|
Write-Host " Size: $size bytes"
|
|
} else {
|
|
Write-Error "✗ Build artifact missing: update-payload.zip"
|
|
exit 1
|
|
}
|
|
|
|
if (Test-Path "manifest.json") {
|
|
Write-Host "✓ Manifest file verified"
|
|
Get-Content manifest.json | ConvertFrom-Json | ConvertTo-Json -Depth 10
|
|
} else {
|
|
Write-Error "✗ Manifest file missing"
|
|
exit 1
|
|
}
|
|
|
|
if (Test-Path "validation-report.json") {
|
|
Write-Host "✓ Validation report verified"
|
|
} else {
|
|
Write-Warning "⚠ Validation report missing (non-critical)"
|
|
}
|
|
|
|
- Write-Host "Packaging Electron application..."
|
|
- npm run dist
|
|
|
|
- echo "BUILD_VERSION=v$env:CI_PIPELINE_IID" >> build.env
|
|
|
|
artifacts:
|
|
reports:
|
|
dotenv: build.env
|
|
paths:
|
|
- update-payload.zip
|
|
- manifest.json
|
|
- validation-report.json
|
|
- dist/*.exe
|
|
- dist/*.exe.blockmap
|
|
expire_in: 30 days
|
|
|
|
release:
|
|
stage: release
|
|
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
|
tags:
|
|
- saas-linux-small-amd64
|
|
needs:
|
|
- job: build
|
|
artifacts: true
|
|
rules:
|
|
- if: '$CHANGED == "true" && $CI_COMMIT_BRANCH == "main"'
|
|
script:
|
|
- echo "Creating GitLab Release $BUILD_VERSION"
|
|
release:
|
|
name: 'Vyla Home Release $BUILD_VERSION'
|
|
tag_name: '$BUILD_VERSION'
|
|
description: 'Automated release for build $BUILD_VERSION'
|
|
assets:
|
|
links:
|
|
- name: 'update-payload.zip'
|
|
url: '$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_BRANCH/raw/update-payload.zip?job=build'
|
|
- name: 'manifest.json'
|
|
url: '$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_BRANCH/raw/manifest.json?job=build'
|
|
- name: 'Download All Build Artifacts (including Windows Installer)'
|
|
url: '$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_BRANCH/download?job=build' |