From f81c492b1007dd6da8473367853405b0d6e2c9d8 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Mon, 24 Aug 2026 22:21:10 +0200 Subject: [PATCH] chore(ci): remove dead Forgejo/Codeberg CI configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GitHub is the only host this organisation publishes to. No local checkout has a Codeberg git remote, so nothing is pushed there and no workflow under .forgejo/ has ever run for this repository. Issue templates: the 4 templates under `.forgejo/issue_template/` were already ported to `.github/ISSUE_TEMPLATE/` and were verified present there before deletion (including `feature-request.yml`, which the in-product "Request a feature" deep-link targets by that exact filename). Release workflows: the deleted `.forgejo/workflows/` release jobs (release-beta.yml release-stable.yml ) are superseded by `.github/workflows/release.yml`, which is the live release path for this repository. .github/workflows/ is untouched โ€” that is the live CI. Any CODEBERG_TOKEN reference lived only inside the deleted files and goes with them. Removes 9 file(s) under .forgejo/. --- .forgejo/issue_template/bug-report.yml | 92 ------------- .forgejo/issue_template/feature-request.yml | 125 ------------------ .forgejo/issue_template/technical-task.yml | 92 ------------- .forgejo/issue_template/user-story.yml | 74 ----------- .forgejo/workflows/documentation.yml | 25 ---- .forgejo/workflows/l10n-parity.yml | 25 ---- .../workflows/pre-merge-check-strict.yaml | 70 ---------- .forgejo/workflows/release-beta.yml | 13 -- .forgejo/workflows/release-stable.yml | 17 --- 9 files changed, 533 deletions(-) delete mode 100644 .forgejo/issue_template/bug-report.yml delete mode 100644 .forgejo/issue_template/feature-request.yml delete mode 100644 .forgejo/issue_template/technical-task.yml delete mode 100644 .forgejo/issue_template/user-story.yml delete mode 100644 .forgejo/workflows/documentation.yml delete mode 100644 .forgejo/workflows/l10n-parity.yml delete mode 100644 .forgejo/workflows/pre-merge-check-strict.yaml delete mode 100644 .forgejo/workflows/release-beta.yml delete mode 100644 .forgejo/workflows/release-stable.yml diff --git a/.forgejo/issue_template/bug-report.yml b/.forgejo/issue_template/bug-report.yml deleted file mode 100644 index efe108018..000000000 --- a/.forgejo/issue_template/bug-report.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: "๐Ÿ› Bug Report" -description: "Iets werkt niet zoals verwacht" -title: "[BUG] " -labels: ["bug", "needs-triage"] -assignees: [] -body: - - type: markdown - attributes: - value: | - ## Bug Report - Beschrijf het probleem zo concreet mogelijk zodat het reproduceerbaar is. - - - type: textarea - id: description - attributes: - label: "Beschrijving" - description: "Wat gaat er mis?" - placeholder: "Bij het uploaden van een PDF groter dan 10MB crasht de anonymizer." - validations: - required: true - - - type: textarea - id: reproduce - attributes: - label: "Stappen om te reproduceren" - value: | - 1. Ga naar ... - 2. Doe ... - 3. Zie fout ... - validations: - required: true - - - type: textarea - id: expected - attributes: - label: "Verwacht gedrag" - placeholder: "Het document wordt anonimiseerd en gedownload." - validations: - required: true - - - type: textarea - id: actual - attributes: - label: "Werkelijk gedrag" - placeholder: "HTTP 500 na ~30 seconden, geen output." - validations: - required: true - - - type: textarea - id: environment - attributes: - label: "Omgeving" - value: | - - Namespace/omgeving: - - Versie/image tag: - - Browser (indien van toepassing): - validations: - required: false - - - type: textarea - id: logs - attributes: - label: "Logs / Screenshots" - description: "Plak relevante logs of voeg screenshots toe" - render: shell - validations: - required: false - - - type: textarea - id: acceptance-criteria - attributes: - label: "Acceptatiecriteria (fix)" - value: | - - [ ] Bug is niet meer reproduceerbaar - - [ ] Regressietest toegevoegd - - [ ] Fix getest in acceptatieomgeving - - [ ] Geen nieuwe security findings - - [ ] Code gereviewd (4-eyes) - validations: - required: true - - - type: dropdown - id: severity - attributes: - label: "Severity" - options: - - "๐Ÿ”ด Critical โ€” productie ligt plat" - - "๐ŸŸ  High โ€” grote impact, workaround aanwezig" - - "๐ŸŸก Medium โ€” beperkte impact" - - "๐ŸŸข Low โ€” cosmetic / minor" - validations: - required: true diff --git a/.forgejo/issue_template/feature-request.yml b/.forgejo/issue_template/feature-request.yml deleted file mode 100644 index 41b4c44a4..000000000 --- a/.forgejo/issue_template/feature-request.yml +++ /dev/null @@ -1,125 +0,0 @@ -name: "โœจ Feature request" -description: "Suggest a feature or improvement. Fields below feed a draft OpenSpec proposal." -title: "[FEATURE] " -labels: ["enhancement", "feature", "needs-triage"] -type: "Feature" -body: - - type: markdown - attributes: - value: | - ## Suggest a feature - - Thanks for telling us what you need. **Triage happens within 24 hours.** - - The fields below feed an OpenSpec proposal directly if the suggestion - is accepted. The more concrete you are, the faster it ships. - - Prefer Dutch? Vul de velden in het Nederlands in โ€” that's fine, we triage in both. - - - type: textarea - id: problem - attributes: - label: "Problem" - description: "What can't you do today? What's the friction? Write it from your perspective โ€” one or two sentences is plenty." - placeholder: "I want to filter contacts by last interaction date but the list view doesn't support it. I end up exporting to CSV and sorting in a spreadsheet." - validations: - required: true - - - type: textarea - id: proposed-solution - attributes: - label: "Proposed solution" - description: "How would you like it to work? Sketches, links, references welcome. \"I'm not sure\" is also a valid answer โ€” we'll figure it out together." - placeholder: "A date-range filter in the contacts list sidebar, defaulting to last 30 days, persisted per user." - validations: - required: true - - - type: textarea - id: who-benefits - attributes: - label: "Who benefits" - description: "Which user role or workflow does this serve? Be specific." - placeholder: "Account managers tracking client engagement, especially before renewal conversations." - validations: - required: true - - - type: dropdown - id: priority-to-you - attributes: - label: "How important is this to you?" - description: "Honest self-assessment. Helps us prioritise." - options: - - "Nice to have" - - "Would use weekly" - - "Would use daily" - - "Blocking me right now" - validations: - required: true - - - type: textarea - id: context - attributes: - label: "Anything else?" - description: "Edge cases, alternatives you've considered, things to avoid, related capabilities, anything that didn't fit in the boxes above." - placeholder: "Out of scope: per-team default filter (could be later). Avoid: hiding the filter behind a settings page โ€” needs to be one click from the list." - - - type: markdown - attributes: - value: | - ### Context - - The fields below are auto-filled when you suggest a feature from inside - the app. They capture where you were when the idea hit so we can scope - the spec without a second round of questions. - - **We show them to you here on purpose**: you can see exactly what we - send and edit or clear any field before you submit. Leave them blank if - you're filing directly from GitHub โ€” we'll still triage it. - - - type: input - id: app - attributes: - label: "App" - description: "Auto-filled by the in-product modal. The Nextcloud app you were using." - placeholder: "pipelinq" - - - type: input - id: page - attributes: - label: "Page" - description: "Auto-filled. The manifest page id + route you were on when you opened the modal." - placeholder: "clients-detail (/clients/abc-123)" - - - type: input - id: surface - attributes: - label: "Modal or widget" - description: "Auto-filled. Any modal, dialog, dashboard widget, or sidebar tab open at the moment the modal launched. Helps us pinpoint UI-attached suggestions." - placeholder: "edit-client-modal ยท or ยท dashboard widget: open-leads" - - - type: input - id: object - attributes: - label: "Object in focus" - description: "Auto-filled. The OpenRegister register + schema + UUID the page was viewing, if any. Lets us trace the suggestion to a real data shape." - placeholder: "pipelinq ยท Client ยท 2f9d-โ€ฆ-abc" - - - type: input - id: spec-ref - attributes: - label: "Related capability" - description: "Auto-filled if the page or widget declares a `specRef`. Connects the suggestion to the existing OpenSpec for that capability." - placeholder: "client-management" - - - type: markdown - attributes: - value: | - --- - - ### What happens next - - 1. **Within 24 hours**: a maintainer reads this and replies with one of `ready-to-build`, `needs-design`, `parking-lot`, or `wont-build` (with a reason). - 2. **If `ready-to-build`**: an OpenSpec proposal is auto-drafted from these fields. Hydra picks it up and opens a draft PR within days. - 3. **When it ships**: you're credited on the spec, you get a `Co-Authored-By:` trailer on the merge commit, and you appear on the app's contributors page. - - Read the full flow at the [Users are the moat](https://docs.conduction.nl/strategy/users-are-the-moat) strategy doc. diff --git a/.forgejo/issue_template/technical-task.yml b/.forgejo/issue_template/technical-task.yml deleted file mode 100644 index 661b18885..000000000 --- a/.forgejo/issue_template/technical-task.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: "โš™๏ธ Technische Taak" -description: "Infra, refactor, technische schuld of ops-werk" -title: "[TECH] " -labels: ["technical", "needs-refinement"] -assignees: [] -body: - - type: markdown - attributes: - value: | - ## Technische Taak - Gebruik dit template voor infra-wijzigingen, refactoring, technische schuld of operationeel werk zonder directe gebruikerswaarde. - - - type: textarea - id: description - attributes: - label: "Beschrijving" - description: "Wat moet er gedaan worden en waarom?" - placeholder: "Migreer de WOO-platform PVC's naar S3 primary storage op Fuga Cloud." - validations: - required: true - - - type: textarea - id: motivation - attributes: - label: "Motivatie / Aanleiding" - description: "Welk probleem lost dit op? Waarom nu?" - placeholder: "Huidige lokale PVC's lopen vol en zijn niet HA. Zie ook issue #123." - validations: - required: false - - - type: textarea - id: approach - attributes: - label: "Aanpak (globaal)" - description: "Hoe gaan we dit oplossen? Welke keuzes zijn al gemaakt?" - placeholder: | - 1. Backup bestaande data - 2. S3 bucket aanmaken op Fuga Cloud - 3. Nextcloud occ storage:update uitvoeren - 4. Smoke test per namespace - validations: - required: false - - - type: textarea - id: acceptance-criteria - attributes: - label: "Acceptatiecriteria" - value: | - - [ ] Taak uitvoerbaar via Ansible/Terraform (geen handmatige stappen) - - [ ] Gedocumenteerd in runbook of ADR - - [ ] Getest in acceptatieomgeving vรณรณr productie - - [ ] Rollback-procedure beschreven - - [ ] Geen downtime buiten afgesproken window - - [ ] Gereviewd (4-eyes) - - [ ] Geen nieuwe security findings - validations: - required: true - - - type: textarea - id: risks - attributes: - label: "Risico's / Afhankelijkheden" - placeholder: "Afhankelijk van beschikbaarheid acceptatieomgeving. Risico: dataverlies bij fout in migratiescript." - validations: - required: false - - - type: dropdown - id: category - attributes: - label: "Categorie" - options: - - "Infra / ops" - - "Refactor" - - "Technische schuld" - - "Security" - - "Performance" - - "CI/CD" - - "Documentatie" - validations: - required: true - - - type: dropdown - id: priority - attributes: - label: "Prioriteit" - options: - - "๐Ÿ”ด Critical" - - "๐ŸŸ  High" - - "๐ŸŸก Medium" - - "๐ŸŸข Low" - validations: - required: true diff --git a/.forgejo/issue_template/user-story.yml b/.forgejo/issue_template/user-story.yml deleted file mode 100644 index 0860501a5..000000000 --- a/.forgejo/issue_template/user-story.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: "โœจ User Story" -description: "Nieuwe functionaliteit vanuit gebruikersperspectief" -title: "Als [rol] wil ik [actie] zodat [waarde]" -labels: ["user-story", "needs-refinement"] -assignees: [] -body: - - type: markdown - attributes: - value: | - ## User Story - Beschrijf de gewenste functionaliteit vanuit het perspectief van de gebruiker. - - - type: textarea - id: story - attributes: - label: "Story" - description: "Als [rol] wil ik [actie] zodat [waarde]" - placeholder: "Als gemeentemedewerker wil ik een document kunnen anonimiseren zodat ik het veilig kan delen." - validations: - required: true - - - type: textarea - id: context - attributes: - label: "Context / Achtergrond" - description: "Waarom is dit nodig? Wat is de aanleiding?" - placeholder: "WOO-verzoeken vereisen anonimisering vรณรณr publicatie..." - validations: - required: false - - - type: textarea - id: acceptance-criteria - attributes: - label: "Acceptatiecriteria" - description: "Definition of Done โ€” vink af wat van toepassing is" - value: | - - [ ] Functionaliteit werkt zoals beschreven in de story - - [ ] Er zijn unit tests aanwezig - - [ ] Er zijn integratietests aanwezig - - [ ] Documentatie is bijgewerkt - - [ ] Code is gereviewd (4-eyes) - - [ ] Geen nieuwe security findings (SAST/Trivy) - - [ ] Getest in acceptatieomgeving - validations: - required: true - - - type: textarea - id: out-of-scope - attributes: - label: "Buiten scope" - description: "Wat doen we expliciet NIET in dit issue?" - placeholder: "Geen bulk-verwerking, geen UI-wijzigingen." - validations: - required: false - - - type: dropdown - id: priority - attributes: - label: "Prioriteit" - options: - - "๐Ÿ”ด Critical" - - "๐ŸŸ  High" - - "๐ŸŸก Medium" - - "๐ŸŸข Low" - validations: - required: true - - - type: input - id: story-points - attributes: - label: "Story points (optioneel)" - placeholder: "3" - validations: - required: false diff --git a/.forgejo/workflows/documentation.yml b/.forgejo/workflows/documentation.yml deleted file mode 100644 index 5ccba1ce2..000000000 --- a/.forgejo/workflows/documentation.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Publish docs - -# Docs deploy ONLY from the dedicated `documentation` branch โ€” decoupled from main/development -# so doc edits never trigger releases and code releases never trigger doc builds. No cron. -on: - push: - branches: [documentation] - pull_request: - branches: [documentation] - workflow_dispatch: - -jobs: - build: - uses: Conduction/.github/.forgejo/workflows/documentation-build.yml@main - with: - source-folder: docs - secrets: inherit - - deploy: - needs: build - if: github.event_name != 'pull_request' - uses: Conduction/.github/.forgejo/workflows/documentation-deploy.yml@main - with: - cf-project-name: launchpad-docs - secrets: inherit diff --git a/.forgejo/workflows/l10n-parity.yml b/.forgejo/workflows/l10n-parity.yml deleted file mode 100644 index 3fbbf583a..000000000 --- a/.forgejo/workflows/l10n-parity.yml +++ /dev/null @@ -1,25 +0,0 @@ -# Translation-PARITY hard gate. -# -# Asserts every required locale (nl/de/fr/es/it) is at full parity with the -# English source โ€” no missing keys, no empty values โ€” for both the frontend -# (l10n/*.js) and backend (l10n/*.json) translation sets. Without this, a new -# English string ships and the other languages silently fall back to English. -# Pure Node, no NC, no npm install. -name: l10n-parity - -on: - pull_request: - push: - branches: [main, master, development] - -jobs: - l10n-parity: - name: l10n translation parity (nl/de/fr/es/it) - runs-on: codeberg-small - container: - image: node:20-alpine - steps: - - name: Checkout - uses: https://code.forgejo.org/actions/checkout@v4 - - name: Assert every required locale is at full parity - run: node tests/l10n/check-l10n-parity.js diff --git a/.forgejo/workflows/pre-merge-check-strict.yaml b/.forgejo/workflows/pre-merge-check-strict.yaml deleted file mode 100644 index 863f2b03e..000000000 --- a/.forgejo/workflows/pre-merge-check-strict.yaml +++ /dev/null @@ -1,70 +0,0 @@ -# Pre-merge quality gate โ€” enforced lint + phpcs + all Hydra gates on every PR. -# Required status check on protected branches. -# -# Runner/container mirror the proven release-semrel workflow: codeberg-medium + -# official php:8.3-cli + a base-tooling step. The old code.forgejo.org/oci/ci-php:8.3 -# image 404s ("manifest unknown"), which fast-failed every run at container-pull. -# -# The gate runs `composer lint` + `composer phpcs` directly: check:strict's -# psalm/phpstan/phpmd/test:all are wrapped in `|| echo skipping` so they never -# affect pass/fail (ADR-022 parks static analysis), and running them on the medium -# runner OOMs it. lint+phpcs is the identical enforced gate, fast and deterministic. - -name: pre-merge-check-strict - -on: - pull_request: - branches: - - development - - main - - beta - -jobs: - quality-gates: - runs-on: codeberg-medium - container: - image: php:8.3-cli - timeout-minutes: 15 - steps: - - name: Install base tooling - run: | - apt-get update - apt-get install -y --no-install-recommends \ - git curl ca-certificates gnupg jq unzip zip \ - libzip-dev libpng-dev python3 - # Node is required by actions/checkout@v4 (a JS action) which runs - # inside this php:8.3-cli container; the stock image ships no node. - curl -fsSL https://deb.nodesource.com/setup_20.x | bash - - apt-get install -y --no-install-recommends nodejs - docker-php-ext-install -j"$(nproc)" zip gd - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - - - name: Checkout PR - uses: https://github.com/actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install composer deps - run: composer install --no-interaction --no-progress --prefer-dist --ignore-platform-reqs - - - name: Run lint + phpcs (the enforced gate) - run: | - composer lint - composer phpcs - - - name: Clone Hydra (for gate runner) - uses: https://github.com/actions/checkout@v4 - with: - repository: Conduction/hydra - ref: development - path: .hydra - - - name: Run all Hydra gates (diff-scoped per ADR-020) - run: | - git fetch origin ${{ github.base_ref }}:${{ github.base_ref }} || true - bash .hydra/scripts/run-hydra-gates.sh --scope-to-diff --base origin/${{ github.base_ref }} . - - - name: Gate-19 e2e coverage report (informational) - if: always() - run: | - python3 .hydra/scripts/lib/check_e2e_coverage.py . --mode report || true diff --git a/.forgejo/workflows/release-beta.yml b/.forgejo/workflows/release-beta.yml deleted file mode 100644 index ed8215b18..000000000 --- a/.forgejo/workflows/release-beta.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: Beta Release - -on: - push: - branches: [beta] - workflow_dispatch: - -jobs: - release: - uses: Conduction/.github/.forgejo/workflows/release-semrel-beta.yml@main - with: - app-name: launchpad - secrets: inherit diff --git a/.forgejo/workflows/release-stable.yml b/.forgejo/workflows/release-stable.yml deleted file mode 100644 index 2f54bf1eb..000000000 --- a/.forgejo/workflows/release-stable.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Stable Release - -on: - push: - branches: [main] - workflow_dispatch: - -jobs: - release: - uses: Conduction/.github/.forgejo/workflows/release-stable.yml@main - with: - app-name: launchpad - secrets: - CODEBERG_TOKEN: ${{ secrets.CODEBERG_TOKEN }} - NEXTCLOUD_SIGNING_KEY: ${{ secrets.NEXTCLOUD_SIGNING_KEY }} - NEXTCLOUD_SIGNING_CERT: ${{ secrets.NEXTCLOUD_SIGNING_CERT }} - NEXTCLOUD_APPSTORE_TOKEN: ${{ secrets.NEXTCLOUD_APPSTORE_TOKEN }}