From 0969a853b7561061d4b58faab6fa1382c53dc9ff Mon Sep 17 00:00:00 2001 From: "Daniel Graf (aider-ce)" Date: Mon, 22 Jun 2026 19:05:10 +0200 Subject: [PATCH 1/2] docs: update release process to use controlled-release workflow --- docs/RELEASE_PROCESS.md | 53 +++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/docs/RELEASE_PROCESS.md b/docs/RELEASE_PROCESS.md index 0c60307b4..fa9ec0be9 100644 --- a/docs/RELEASE_PROCESS.md +++ b/docs/RELEASE_PROCESS.md @@ -1,22 +1,38 @@ -## 🚦 Release Gate & Tag Cleanup +## 🚦 Release Process -This project uses a single-branch flow (`main` → tag → publish). Pushing a version tag triggers a CI workflow that **pauses for manual verification** before building Docker images or publishing assets. +This project uses a **controlled-release** workflow. Releases are triggered manually from the GitHub Actions UI by selecting a source branch and entering a version number. The workflow creates a draft release, opens a verification issue, and pauses for manual approval before building Docker images and publishing assets. + +## How to Start a Release + +1. Navigate to **Actions** in your repository. +2. In the left sidebar, click the **controlled-release** workflow. +3. Click **Run workflow** (drop‑down button on the right). +4. Choose the **source branch** (usually `main`). +5. Enter the **version** (e.g., `3.5.1` – without the leading `v`). +6. Click **Run workflow**. + +The workflow will: +- Create a Git tag matching the version you supplied (e.g., `v3.5.1`). +- Build the project’s JAR. +- Create a draft GitHub Release with auto‑generated release notes. +- Create a **verification issue** whose title matches the version number. +- Pause at the `release-gate` environment, waiting for manual approval. ## How to Approve the Release -Once you push a version tag (e.g., `v4.2.0`), the release workflow automatically pauses at the `release-gate` environment and waits for manual verification. Follow these steps to approve and continue the build: +Once the workflow pauses, you must manually verify the build and approve the deployment to continue. ### 1. Complete Manual Verification - Run the application locally or on a test instance using Docker Compose -- Walk through the verification checklist (auth flows, map/tiles, live mode, import pipeline, multi-user isolation, i18n/units, etc.) -- Update the auto-created GitHub issue titled with the version number with your findings or confirm all checklist items are completed +- Walk through the verification checklist (auth flows, map/tiles, live mode, import pipeline, multi‑user isolation, i18n/units, etc.) +- Update the auto‑created verification issue with your findings or confirm all checklist items are completed - Do not approve until all critical paths are verified ### 2. Approve via GitHub UI (Recommended) 1. Navigate to **Actions** in your repository -2. Click the pending workflow run named `release / Build Release` triggered by your tag +2. Click the pending workflow run named `controlled-release / Build Release` 3. In the workflow summary, locate the job that shows `Waiting` -4. Click **Review deployments** in the top-right corner +4. Click **Review deployments** in the top‑right corner 5. Select **Approve and deploy** 6. Optionally add a comment (e.g., `Checklist verified, all systems nominal.`) and confirm 7. The workflow will immediately resume from where it paused @@ -32,18 +48,18 @@ gh run approve "$RUN_ID" ``` Note: Your GitHub account must be listed as a required reviewer for the `release-gate` environment for CLI approval to succeed. -### What Happens After Approval -- The workflow resumes, builds the JAR, pushes multi-arch Docker images to Docker Hub and GHCR, and publishes the GitHub Release -- The verification issue is automatically closed with a success comment linking to the workflow run -- Check the **Actions** tab to confirm all steps completed successfully -- You can now share the release notes and notify users +## What Happens After Approval +- The workflow resumes, pushes multi‑arch Docker images to Docker Hub and GHCR, and publishes the GitHub Release. +- The verification issue is automatically closed with a success comment linking to the workflow run. +- Check the **Actions** tab to confirm all steps completed successfully. +- You can now share the release notes and notify users. -### Environment Management -- Add or remove approvers: `Settings -> Environments -> release-gate -> Required reviewers` -- Enable `Prevent self-approval` in the same menu if you require a second maintainer to verify +## Environment Management +- Add or remove approvers: `Settings → Environments → release-gate → Required reviewers` +- Enable `Prevent self‑approval` in the same menu if you require a second maintainer to verify - Approvals are tied to the environment, not individual runs, so permissions persist across releases -### What happens if I don't approve? +## What happens if I don't approve? - The workflow stays in a `Waiting` state. - **The tag is NOT deleted automatically.** Git tags are permanent references. - If you decide to abort the release, you must cancel the workflow run and delete the tag manually: @@ -53,5 +69,6 @@ Note: Your GitHub account must be listed as a required reviewer for the `release gh run cancel # Delete the tag locally & remotely -git tag -d v4.2.0 -git push origin --delete v4.2.0 \ No newline at end of file +git tag -d v3.5.1 +git push origin --delete v3.5.1 +``` From 5aa4e3144428d4b461153fdad9c471ff6c38fac2 Mon Sep 17 00:00:00 2001 From: Daniel Graf Date: Mon, 22 Jun 2026 19:08:54 +0200 Subject: [PATCH 2/2] chore(some-docs-updates): remove unused import & bump Spring Boot version - Removed unused `Instant` import in `GeoJsonApiController` - Upgraded Spring Boot version to `3.5.15` in `pom.xml` --- pom.xml | 2 +- .../reitti/controller/api/GeoJsonApiController.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index dc8552396..edbfcc7e7 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.14 + 3.5.15 com.dedicatedcode diff --git a/src/main/java/com/dedicatedcode/reitti/controller/api/GeoJsonApiController.java b/src/main/java/com/dedicatedcode/reitti/controller/api/GeoJsonApiController.java index 1fa83592e..b77e03cdf 100644 --- a/src/main/java/com/dedicatedcode/reitti/controller/api/GeoJsonApiController.java +++ b/src/main/java/com/dedicatedcode/reitti/controller/api/GeoJsonApiController.java @@ -21,7 +21,6 @@ import java.time.LocalDate; import java.time.ZoneId; import java.time.ZonedDateTime; -import java.time.Instant; import java.util.HashMap; import java.util.Map;