From 32f3fda5fe81d08e85f62f91e85d9219c7d9d04a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 10:33:17 +0000 Subject: [PATCH 1/2] Initial plan From 46fd3b6a951699ba198fa5630f54809e00e2c27d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Feb 2026 10:35:22 +0000 Subject: [PATCH 2/2] docs: Document staging deployment approach in README Co-authored-by: LukasWallrich <60155545+LukasWallrich@users.noreply.github.com> --- README.md | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/README.md b/README.md index d5137e66357..22e64129e86 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,68 @@ Please note that it's very important to us that we maintain a positive and suppo This is the website for the **Framework for Open and Reproducible Research Training (FORRT)**, built with [hugo](https://gohugo.io/), and deployed with [Github Actions](https://docs.github.com/en/actions). You can find the website at [forrt.org](https://forrt.org/). See CONTRIBUTING.md for more information on how to contribute. +## Deployment & Staging + +The FORRT website uses a dual deployment strategy to ensure quality and enable collaborative testing: + +### Production Deployment + +- **URL**: [https://forrt.org](https://forrt.org) +- **Workflow**: `.github/workflows/deploy.yaml` +- **Trigger**: Pushes to `master` branch +- **Target**: GitHub Pages (`gh-pages` branch) +- **Purpose**: Serves the live, production website + +### Staging Deployment + +- **URL**: [https://staging.forrt.org](https://staging.forrt.org) +- **Workflow**: `.github/workflows/staging-aggregate.yaml` +- **Trigger**: Pull requests to `master`, monthly schedule (1st of each month), or manual dispatch +- **Target**: External repository (`forrtproject/webpage-staging`) +- **Purpose**: Preview combined changes from all open PRs + +#### How Staging Works + +The staging deployment uses an **aggregation strategy** to provide a unified preview environment: + +1. **Automatic Aggregation**: When any PR is opened, synchronized, or reopened, the workflow: + - Collects all open, non-draft PRs targeting `master` + - Creates a temporary aggregation branch from `master` + - Attempts to merge each PR in sequence + +2. **Conflict Handling**: + - PRs that merge cleanly are included in the staging build + - PRs with merge conflicts are skipped but logged + - The deployment continues with all compatible PRs + +3. **Deployment Comments**: Each PR receives an automated comment indicating: + - ✅ Successfully deployed (for PRs without conflicts) + - ⚠️ Skipped due to conflicts (for conflicting PRs) + - Deployment timestamp and staging URL + +4. **Queuing & Timeouts**: + - Workflow uses concurrency control to queue builds (not cancel) + - Job timeouts (10-20 minutes) prevent indefinite blocking + - Draft PRs are filtered out to avoid unnecessary builds + +5. **Branch Cleanup**: + - Keeps only the 5 most recent staging branches + - Automatically cleans up older staging-aggregate branches + +#### Viewing Staging Changes + +- Visit [https://staging.forrt.org](https://staging.forrt.org) to see the combined state of all open, compatible PRs +- Note: Staging shows aggregated changes from **all** open PRs, not individual PR changes +- PRs with merge conflicts won't appear in staging until conflicts are resolved + +#### Monthly Reports + +On the 1st of each month, an automated deployment report is created as a GitHub issue with: +- Total PRs processed +- Successfully merged PRs +- Skipped PRs (with conflict information) +- Deployment statistics + ## License Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.