Skip to content

Commit dd1b264

Browse files
committed
Release Candidate 3.0.0-rc.1
This Release Candidate includes: ## New RC Infrastructure - Added release-candidate.yml workflow for automated RC builds - Created RELEASE-CANDIDATE.md documentation with complete RC process guide ## Version Updates - Updated all box.json files to 3.0.0-rc.1 - Updated wheels-core dependencies to ^3.0.0-rc.1 - Added RC section to CHANGELOG.md ## RC Workflow Features - Triggers on release/**-rc.* branches - Validates RC version format - Publishes to ForgeBox as prerelease - Creates GitHub prerelease with artifacts - Includes comprehensive validation checks This RC is ready for community testing before the final 3.0.0 release.
1 parent 5dff1db commit dd1b264

File tree

6 files changed

+563
-5
lines changed

6 files changed

+563
-5
lines changed
Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
# Release Candidate Workflow
2+
# This workflow builds and publishes Release Candidates for testing before final releases
3+
# Triggers on release candidate branches (e.g., release/3.0.0-rc.1)
4+
5+
name: Wheels Release Candidate
6+
7+
on:
8+
push:
9+
branches:
10+
- 'release/**-rc.*'
11+
12+
env:
13+
WHEELS_PRERELEASE: true
14+
15+
jobs:
16+
#############################################
17+
# Build & Publish Release Candidate
18+
#############################################
19+
build:
20+
name: Build & Publish Release Candidate
21+
runs-on: ubuntu-latest
22+
steps:
23+
- name: Checkout Repository
24+
id: Checkout-Repository
25+
uses: actions/checkout@v4
26+
with:
27+
fetch-depth: 1
28+
29+
- name: Setup Environment Variables For Build Process
30+
id: Calculate-Version-And-Branch
31+
run: |
32+
cd ./templates/base/src
33+
pwd
34+
cat box.json
35+
36+
# Extract version from box.json (should be something like 3.0.0-rc.1)
37+
VERSION=$(cat box.json | jq '.version' -r)
38+
echo "WHEELS_VERSION=${VERSION}+${{ github.run_number }}" >> $GITHUB_ENV
39+
40+
# Extract branch name
41+
BRANCH="${GITHUB_REF#refs/heads/}"
42+
echo "BRANCH=${BRANCH}" >> $GITHUB_ENV
43+
44+
echo "Building Release Candidate: ${VERSION}"
45+
echo "Branch: ${BRANCH}"
46+
47+
- name: Make build scripts executable
48+
run: |
49+
chmod +x tools/build/scripts/*.sh
50+
ls -la tools/build/scripts/
51+
52+
#############################################
53+
# Validate Release Candidate
54+
#############################################
55+
56+
- name: Validate Release Candidate Version
57+
run: |
58+
echo "=========================================="
59+
echo "Validating Release Candidate"
60+
echo "=========================================="
61+
62+
# Check that version contains -rc.
63+
if ! echo "$WHEELS_VERSION" | grep -q "\-rc\."; then
64+
echo "ERROR: Version must contain '-rc.X' suffix for release candidates"
65+
echo "Current version: $WHEELS_VERSION"
66+
exit 1
67+
fi
68+
69+
# Check that CHANGELOG contains RC entry
70+
BASE_VERSION="${WHEELS_VERSION%%+*}"
71+
if ! grep -q "# \[${BASE_VERSION}\]" CHANGELOG.md; then
72+
echo "ERROR: CHANGELOG.md must contain entry for ${BASE_VERSION}"
73+
exit 1
74+
fi
75+
76+
echo "✓ Release Candidate validation passed"
77+
78+
#############################################
79+
# Prepare and Publish to ForgeBox
80+
#############################################
81+
82+
- name: Prepare Wheels Base Template for ForgeBox
83+
run: |
84+
./tools/build/scripts/prepare-base.sh "${{ env.WHEELS_VERSION }}" "${{ env.BRANCH }}" "${{ github.run_number }}" "${{ env.WHEELS_PRERELEASE }}"
85+
86+
- name: Prepare Wheels Core for ForgeBox
87+
run: |
88+
./tools/build/scripts/prepare-core.sh "${{ env.WHEELS_VERSION }}" "${{ env.BRANCH }}" "${{ github.run_number }}" "${{ env.WHEELS_PRERELEASE }}"
89+
90+
- name: Prepare Wheels CLI for ForgeBox
91+
run: |
92+
./tools/build/scripts/prepare-cli.sh "${{ env.WHEELS_VERSION }}" "${{ env.BRANCH }}" "${{ github.run_number }}" "${{ env.WHEELS_PRERELEASE }}"
93+
94+
- name: Prepare Wheels Starter App for ForgeBox
95+
run: |
96+
./tools/build/scripts/prepare-starterApp.sh "${{ env.WHEELS_VERSION }}"
97+
98+
- name: Install CommandBox
99+
run: |
100+
curl -fsSl https://downloads.ortussolutions.com/debs/gpg | sudo gpg --dearmor -o /usr/share/keyrings/ortussolutions.gpg
101+
echo "deb [signed-by=/usr/share/keyrings/ortussolutions.gpg] https://downloads.ortussolutions.com/debs/noarch /" | sudo tee /etc/apt/sources.list.d/ortussolutions.list
102+
sudo apt-get update && sudo apt-get install -y commandbox
103+
104+
#############################################
105+
# Validate Packages Before Publishing
106+
#############################################
107+
108+
- name: Validate Package Structure and Versions
109+
run: |
110+
echo "=========================================="
111+
echo "Validating RC Packages Before ForgeBox Publish"
112+
echo "=========================================="
113+
114+
validate_package() {
115+
local PACKAGE_DIR=$1
116+
local PACKAGE_NAME=$2
117+
118+
echo ""
119+
echo "Validating $PACKAGE_NAME..."
120+
121+
if [ ! -d "$PACKAGE_DIR" ]; then
122+
echo "ERROR: Directory $PACKAGE_DIR does not exist!"
123+
exit 1
124+
fi
125+
126+
if [ ! -f "$PACKAGE_DIR/box.json" ]; then
127+
echo "ERROR: box.json not found in $PACKAGE_DIR!"
128+
exit 1
129+
fi
130+
131+
if ! jq empty "$PACKAGE_DIR/box.json" 2>/dev/null; then
132+
echo "ERROR: Invalid JSON in $PACKAGE_DIR/box.json"
133+
exit 1
134+
fi
135+
136+
local VERSION=$(jq -r '.version' "$PACKAGE_DIR/box.json")
137+
echo " Version: $VERSION"
138+
139+
if [[ "$VERSION" != "${{ env.WHEELS_VERSION }}" ]]; then
140+
echo " WARNING: Version mismatch! Expected ${{ env.WHEELS_VERSION }}, got $VERSION"
141+
fi
142+
143+
local FILE_COUNT=$(find "$PACKAGE_DIR" -type f | wc -l)
144+
echo " Files: $FILE_COUNT"
145+
146+
if [ "$FILE_COUNT" -eq 0 ]; then
147+
echo "ERROR: No files found in package directory!"
148+
exit 1
149+
fi
150+
151+
echo " ✓ Package validated successfully"
152+
}
153+
154+
validate_package "build-wheels-base" "Wheels Base Template"
155+
validate_package "build-wheels-core/wheels" "Wheels Core"
156+
validate_package "build-wheels-cli/wheels-cli" "Wheels CLI"
157+
validate_package "build-wheels-starterApp" "Wheels Starter App"
158+
159+
echo ""
160+
echo "=========================================="
161+
echo "All RC packages validated successfully!"
162+
echo "=========================================="
163+
164+
- name: Publish All Packages to ForgeBox
165+
run: |
166+
./tools/build/scripts/publish-to-forgebox.sh "wheels-dev" "${{ secrets.FORGEBOX_PASS }}" "true"
167+
168+
#############################################
169+
# Build Artifacts for GitHub
170+
#############################################
171+
172+
- name: Build All Wheels Artifacts
173+
run: |
174+
./tools/build/scripts/build-base.sh "${{ env.WHEELS_VERSION }}" "${{ env.BRANCH }}" "${{ github.run_number }}" "${{ env.WHEELS_PRERELEASE }}"
175+
./tools/build/scripts/build-core.sh "${{ env.WHEELS_VERSION }}" "${{ env.BRANCH }}" "${{ github.run_number }}" "${{ env.WHEELS_PRERELEASE }}"
176+
./tools/build/scripts/build-cli.sh "${{ env.WHEELS_VERSION }}" "${{ env.BRANCH }}" "${{ github.run_number }}" "${{ env.WHEELS_PRERELEASE }}"
177+
./tools/build/scripts/build-cli.sh "${{ env.WHEELS_VERSION }}"
178+
179+
- name: Upload Wheels Base Template Artifact
180+
uses: actions/upload-artifact@v4
181+
with:
182+
name: rc-build-artifacts-base-template
183+
path: |
184+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-base-template-*.zip
185+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-base-template-*.md5
186+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-base-template-*.sha512
187+
188+
- name: Upload Wheels Core Artifact
189+
uses: actions/upload-artifact@v4
190+
with:
191+
name: rc-build-artifacts-core
192+
path: |
193+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-core-*.zip
194+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-core-*.md5
195+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-core-*.sha512
196+
197+
- name: Upload Wheels CLI Artifact
198+
uses: actions/upload-artifact@v4
199+
with:
200+
name: rc-build-artifacts-cli
201+
path: |
202+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-cli-*.zip
203+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-cli-*.md5
204+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-cli-*.sha512
205+
206+
- name: Upload Wheels Starter App Artifact
207+
uses: actions/upload-artifact@v4
208+
with:
209+
name: rc-build-artifacts-starter-app
210+
path: |
211+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-starter-app-*.zip
212+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-starter-app-*.md5
213+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-starter-app-*.sha512
214+
215+
- name: Upload All Wheels Artifacts (Combined)
216+
uses: actions/upload-artifact@v4
217+
with:
218+
name: rc-build-artifacts-all
219+
path: |
220+
artifacts/**/*
221+
222+
- name: Upload Workflow Logs
223+
if: always()
224+
uses: actions/upload-artifact@v4
225+
with:
226+
name: logs-release-candidate
227+
path: |
228+
${{ runner.temp }}/_runner_diag/
229+
${{ runner.temp }}/_github_workflow/
230+
231+
#############################################
232+
# Create GitHub Prerelease
233+
#############################################
234+
235+
- name: Extract Release Notes from CHANGELOG
236+
id: extract-release-notes
237+
run: |
238+
# Extract the RC release notes from CHANGELOG.md
239+
BASE_VERSION="${WHEELS_VERSION%%+*}"
240+
awk "/^# \[${BASE_VERSION}\]/,/^---$/ {print}" CHANGELOG.md | sed '1d;$d' > release-notes.md
241+
echo "Release notes extracted to release-notes.md"
242+
cat release-notes.md
243+
244+
- name: Create GitHub Prerelease
245+
uses: softprops/action-gh-release@v1
246+
with:
247+
tag_name: v${{ env.WHEELS_VERSION }}
248+
name: Wheels ${{ env.WHEELS_VERSION }} (Release Candidate)
249+
body_path: release-notes.md
250+
draft: false
251+
prerelease: true
252+
files: |
253+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-base-template-*.zip
254+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-base-template-*.md5
255+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-base-template-*.sha512
256+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-core-*.zip
257+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-core-*.md5
258+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-core-*.sha512
259+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-cli-*.zip
260+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-cli-*.md5
261+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-cli-*.sha512
262+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-starter-app-*.zip
263+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-starter-app-*.md5
264+
artifacts/wheels/${{ env.WHEELS_VERSION }}/wheels-starter-app-*.sha512

CHANGELOG.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
----
99

10+
# [3.0.0-rc.1](https://github.com/wheels-dev/wheels/releases/tag/v3.0.0-rc.1) => 2025-10-07
11+
12+
**Release Candidate 1 for Wheels 3.0.0**
13+
14+
This is a pre-release version for community testing. Please report any issues to [GitHub Issues](https://github.com/wheels-dev/wheels/issues).
15+
16+
### What's New in 3.0.0
17+
18+
This release represents a major milestone with significant architectural improvements and new features:
19+
20+
### Testing Focus Areas
21+
22+
Please help test these critical areas:
23+
- Fresh installations on all supported CFML engines
24+
- Upgrades from 2.x versions
25+
- Plugin compatibility
26+
- Database operations and migrations
27+
- CLI command functionality
28+
29+
---
30+
1031
# [3.0.0](https://github.com/wheels-dev/wheels/releases/tag/v3.0.0) => TBD
1132

1233
**Note**: Update release date when publishing final release

0 commit comments

Comments
 (0)