Replace GitLab CI with Gitea Actions workflows
GitLab CE was migrated off to reduce memory pressure on the host, so .gitlab-ci.yml is dead. Split into one workflow file per site (shared, 40k-rankings, aos-rankings, kingmaker, scouting, events) since Gitea/ GitHub Actions path filters are workflow-level, not job-level like GitLab's rules.changes. Build+deploy are combined into a single job per site rather than separate build/deploy stages, since both run on the same host and there's no need to round-trip artifacts between them. The weekly ELO refresh job's schedule (Wed 02:00 Atlantic/Azores) is approximated as a fixed 02:00 UTC cron, since Actions cron has no DST handling. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
name: Deploy 40k-rankings
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'sites/40k-rankings/**'
|
||||
- 'shared/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: host
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
working-directory: sites/40k-rankings
|
||||
run: |
|
||||
npm ci
|
||||
npm run build
|
||||
- name: Deploy
|
||||
run: |
|
||||
rsync -avz --delete --exclude images --exclude footer.html sites/40k-rankings/dist/ /var/www/domains/gateway-gamers.net/40k-rankings/
|
||||
@@ -0,0 +1,23 @@
|
||||
name: Deploy aos-rankings
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'sites/aos-rankings/**'
|
||||
- 'shared/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: host
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
working-directory: sites/aos-rankings
|
||||
run: |
|
||||
npm ci
|
||||
npm run build
|
||||
- name: Deploy
|
||||
run: |
|
||||
rsync -avz --delete --exclude images --exclude footer.html sites/aos-rankings/dist/ /var/www/domains/gateway-gamers.net/aos-rankings/
|
||||
@@ -0,0 +1,23 @@
|
||||
name: Deploy events
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'sites/events/**'
|
||||
- 'shared/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: host
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
working-directory: sites/events
|
||||
run: |
|
||||
npm ci
|
||||
npm run build
|
||||
- name: Deploy
|
||||
run: |
|
||||
rsync -avz --delete --exclude images --exclude footer.html sites/events/dist/ /var/www/domains/gateway-gamers.net/events/
|
||||
@@ -0,0 +1,23 @@
|
||||
name: Deploy kingmaker
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'sites/kingmaker/**'
|
||||
- 'shared/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: host
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
working-directory: sites/kingmaker
|
||||
run: |
|
||||
npm ci
|
||||
npm run build
|
||||
- name: Deploy
|
||||
run: |
|
||||
rsync -avz --delete --exclude images --exclude footer.html sites/kingmaker/dist/ /var/www/domains/gateway-gamers.net/kingmaker/
|
||||
@@ -0,0 +1,23 @@
|
||||
name: Deploy scouting
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'sites/scouting/**'
|
||||
- 'shared/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: host
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build
|
||||
working-directory: sites/scouting
|
||||
run: |
|
||||
npm ci
|
||||
npm run build
|
||||
- name: Deploy
|
||||
run: |
|
||||
rsync -avz --delete --exclude images --exclude footer.html sites/scouting/dist/ /var/www/domains/gateway-gamers.net/scouting/
|
||||
@@ -0,0 +1,18 @@
|
||||
name: Deploy shared assets
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'shared/**'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: host
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Deploy shared assets
|
||||
run: |
|
||||
rsync -avz --delete shared/images/ /var/www/domains/gateway-gamers.net/shared/images/
|
||||
rsync -avz shared/footer.html /var/www/domains/gateway-gamers.net/shared/footer.html
|
||||
@@ -0,0 +1,30 @@
|
||||
name: Weekly ELO Sync
|
||||
|
||||
# Original GitLab pipeline schedule ran Wednesdays 02:00 Atlantic/Azores.
|
||||
# Actions cron is always UTC with no DST handling, so this is a fixed
|
||||
# approximation (02:00 UTC) rather than an exact equivalent year-round.
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 2 * * 3'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
refresh:
|
||||
runs-on: host
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Refresh ELO data
|
||||
working-directory: sites/40k-rankings/statcheck-elo-scraper
|
||||
run: python3 refresh_elo.py
|
||||
- name: Commit and push if changed
|
||||
env:
|
||||
GITEA_ACCESS_TOKEN: ${{ secrets.GITEA_ACCESS_TOKEN }}
|
||||
run: |
|
||||
git config user.email "gitea-actions@gateway-gamers.net"
|
||||
git config user.name "Gitea Actions"
|
||||
git remote set-url origin "https://mandalore:${GITEA_ACCESS_TOKEN}@gl.mando.club/mandalore/gateway-gamers.net.git"
|
||||
git add sites/40k-rankings/public/elo-data.json
|
||||
if ! git diff --cached --quiet; then
|
||||
git commit -m "data: refresh stat-check ELO rankings"
|
||||
git push origin HEAD:main
|
||||
fi
|
||||
-211
@@ -1,211 +0,0 @@
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
- refresh
|
||||
|
||||
.build_script: &build_script
|
||||
- cd sites/${SITE}
|
||||
- npm ci
|
||||
- npm run build
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# shared assets (images + footer.html) — deployed once to a shared dir that
|
||||
# every site's nginx server block points at via `alias`, so a photo/logo
|
||||
# update only has to land in one place instead of four.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
deploy:shared:
|
||||
stage: deploy
|
||||
script:
|
||||
- rsync -avz --delete shared/images/ /var/www/domains/gateway-gamers.net/shared/images/
|
||||
- rsync -avz shared/footer.html /var/www/domains/gateway-gamers.net/shared/footer.html
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- shared/**/*
|
||||
environment:
|
||||
name: production/shared
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 40k-rankings
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
build:40k-rankings:
|
||||
stage: build
|
||||
variables:
|
||||
SITE: 40k-rankings
|
||||
script: *build_script
|
||||
artifacts:
|
||||
paths:
|
||||
- sites/40k-rankings/dist/
|
||||
expire_in: 1 hour
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/40k-rankings/**/*
|
||||
- shared/**/*
|
||||
|
||||
deploy:40k-rankings:
|
||||
stage: deploy
|
||||
needs: ["build:40k-rankings"]
|
||||
script:
|
||||
- rsync -avz --delete --exclude images --exclude footer.html sites/40k-rankings/dist/ /var/www/domains/gateway-gamers.net/40k-rankings/
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/40k-rankings/**/*
|
||||
- shared/**/*
|
||||
environment:
|
||||
name: production
|
||||
url: https://40k-rankings.gateway-gamers.net
|
||||
|
||||
refresh-elo:
|
||||
stage: refresh
|
||||
image: python:3.12-slim
|
||||
variables:
|
||||
GIT_STRATEGY: clone
|
||||
script:
|
||||
- (cd sites/40k-rankings/statcheck-elo-scraper && python refresh_elo.py)
|
||||
- git config user.email "gitlab-ci@gateway-gamers.net"
|
||||
- git config user.name "GitLab CI"
|
||||
- git remote set-url origin "https://oauth2:${GITLAB_ACCESS_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git"
|
||||
- git add sites/40k-rankings/public/elo-data.json
|
||||
- |
|
||||
if ! git diff --cached --quiet; then
|
||||
git commit -m "data: refresh stat-check ELO rankings"
|
||||
git push origin HEAD:main
|
||||
fi
|
||||
only:
|
||||
- schedules
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# aos-rankings
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
build:aos-rankings:
|
||||
stage: build
|
||||
variables:
|
||||
SITE: aos-rankings
|
||||
script: *build_script
|
||||
artifacts:
|
||||
paths:
|
||||
- sites/aos-rankings/dist/
|
||||
expire_in: 1 hour
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/aos-rankings/**/*
|
||||
- shared/**/*
|
||||
|
||||
deploy:aos-rankings:
|
||||
stage: deploy
|
||||
needs: ["build:aos-rankings"]
|
||||
script:
|
||||
- rsync -avz --delete --exclude images --exclude footer.html sites/aos-rankings/dist/ /var/www/domains/gateway-gamers.net/aos-rankings/
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/aos-rankings/**/*
|
||||
- shared/**/*
|
||||
environment:
|
||||
name: production
|
||||
url: https://aos-rankings.gateway-gamers.net
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# kingmaker
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
build:kingmaker:
|
||||
stage: build
|
||||
variables:
|
||||
SITE: kingmaker
|
||||
script: *build_script
|
||||
artifacts:
|
||||
paths:
|
||||
- sites/kingmaker/dist/
|
||||
expire_in: 1 hour
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/kingmaker/**/*
|
||||
- shared/**/*
|
||||
|
||||
deploy:kingmaker:
|
||||
stage: deploy
|
||||
needs: ["build:kingmaker"]
|
||||
script:
|
||||
- rsync -avz --delete --exclude images --exclude footer.html sites/kingmaker/dist/ /var/www/domains/gateway-gamers.net/kingmaker/
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/kingmaker/**/*
|
||||
- shared/**/*
|
||||
environment:
|
||||
name: production
|
||||
url: https://kingmaker.gateway-gamers.net
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# scouting
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
build:scouting:
|
||||
stage: build
|
||||
variables:
|
||||
SITE: scouting
|
||||
script: *build_script
|
||||
artifacts:
|
||||
paths:
|
||||
- sites/scouting/dist/
|
||||
expire_in: 1 hour
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/scouting/**/*
|
||||
- shared/**/*
|
||||
|
||||
deploy:scouting:
|
||||
stage: deploy
|
||||
needs: ["build:scouting"]
|
||||
script:
|
||||
- rsync -avz --delete --exclude images --exclude footer.html sites/scouting/dist/ /var/www/domains/gateway-gamers.net/scouting/
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/scouting/**/*
|
||||
- shared/**/*
|
||||
environment:
|
||||
name: production
|
||||
url: https://scouting.gateway-gamers.net
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# events
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
build:events:
|
||||
stage: build
|
||||
variables:
|
||||
SITE: events
|
||||
script: *build_script
|
||||
artifacts:
|
||||
paths:
|
||||
- sites/events/dist/
|
||||
expire_in: 1 hour
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/events/**/*
|
||||
- shared/**/*
|
||||
|
||||
deploy:events:
|
||||
stage: deploy
|
||||
needs: ["build:events"]
|
||||
script:
|
||||
- rsync -avz --delete --exclude images --exclude footer.html sites/events/dist/ /var/www/domains/gateway-gamers.net/events/
|
||||
rules:
|
||||
- if: '$CI_COMMIT_BRANCH == "main"'
|
||||
changes:
|
||||
- sites/events/**/*
|
||||
- shared/**/*
|
||||
environment:
|
||||
name: production
|
||||
url: https://events.gateway-gamers.net
|
||||
Reference in New Issue
Block a user