-
.github/workflows/build.yml<pre>@@ -0,0 +1,71 @@+name: Build WoltLab Suite 6.3 test build++on:+ schedule:+ - cron: "17 2 * * *"+ workflow_dispatch:+ inputs:+ force:+ description: "Build even if the source commit is unchanged"+ type: boolean+ default: false++permissions:+ contents: write++jobs:+ build:+ runs-on: ubuntu-latest+ timeout-minutes: 30+ steps:+ - uses: actions/checkout@v4++ - name: Fetch WoltLab source (branch 6.3)+ id: src+ run: |+ git clone --depth 1 --branch 6.3 https://github.com/WoltLab/WCF.git WCF+ sha="$(git -C WCF rev-parse --short=10 HEAD)"+ echo "sha=$sha" >> "$GITHUB_OUTPUT"+ echo "tag=6.3-alpha-$(date -u +%Y%m%d)-$sha" >> "$GITHUB_OUTPUT"+ if gh release list --limit 200 --json tagName --jq '.[].tagName' | grep -q -- "-$sha$"; then+ echo "changed=false" >> "$GITHUB_OUTPUT"+ else+ echo "changed=true" >> "$GITHUB_OUTPUT"+ fi+ env:+ GH_TOKEN: ${{ github.token }}++ - name: Stop when unchanged+ if: steps.src.outputs.changed == 'false' && inputs.force != true+ run: echo "Source commit ${{ steps.src.outputs.sha }} already built."++ - uses: actions/setup-node@v4+ if: steps.src.outputs.changed == 'true' || inputs.force == true+ with:+ node-version: 22++ - uses: shivammathur/setup-php@v2+ if: steps.src.outputs.changed == 'true' || inputs.force == true+ with:+ php-version: "8.5"++ - name: Build+ if: steps.src.outputs.changed == 'true' || inputs.force == true+ run: |+ (cd WCF/extra && npm ci)+ bash scripts/build.sh WCF out+ php -l out/install.php++ - name: Smoke test (archive contains the core package)+ if: steps.src.outputs.changed == 'true' || inputs.force == true+ run: tar -tzf out/WCFSetup.tar.gz | grep -q '^install/packages/com.woltlab.wcf.tar$'++ - name: Publish pre-release+ if: steps.src.outputs.changed == 'true' || inputs.force == true+ run: |+ gh release create "${{ steps.src.outputs.tag }}" out/WCFSetup.tar.gz out/install.php out/test.php out/SHA256SUMS \+ --prerelease --title "WoltLab Suite 6.3 alpha ${{ steps.src.outputs.sha }}" \+ --notes "Unofficial community test build of WoltLab/WCF branch 6.3 at commit ${{ steps.src.outputs.sha }}. Not for production. Requires PHP 8.4.23 to 8.5.x and HTTPS."+ bash scripts/prune-releases.sh+ env:+ GH_TOKEN: ${{ github.token }}
-
README.md<pre>@@ -0,0 +1,22 @@+# WoltLab Suite 6.3 test builds (unofficial)++Daily, automatically built installation archives of the WoltLab Suite 6.3 development branch+([WoltLab/WCF](https://github.com/WoltLab/WCF), LGPL-2.1). **Early alpha. Never use it in production.**+This is a community project by [YoureCom](https://yourecom.de) and is not affiliated with WoltLab GmbH.++## Install++1. Pick the newest pre-release under *Releases*.+2. Upload `install.php` and `WCFSetup.tar.gz` to an empty web directory (same folder).+3. Open `https://<your-domain>/install.php` and follow the wizard.++Requirements: PHP 8.4.23 to 8.5.x, MySQL/MariaDB, **HTTPS** (the wizard refuses plain HTTP).+Verify downloads with `sha256sum -c SHA256SUMS`. Updating an existing installation is not supported.++## How it works++`.github/workflows/build.yml` runs nightly, clones branch `6.3`, skips the run when that commit was+already built, runs `scripts/build.sh` (JS build, core package, `WCFSetup.tar.gz`) and publishes a+pre-release `6.3-alpha-<date>-<commit>`. `scripts/prune-releases.sh` keeps the last 7 builds plus one per week.++Report bugs in the build here. Bugs in the Suite itself belong to the Suite.
-
scripts/build.sh<pre>@@ -0,0 +1,28 @@+#!/usr/bin/env bash+# Builds WCFSetup.tar.gz + install.php from a WoltLab/WCF checkout.+# Usage: build.sh <WCF checkout> <output dir>+# Requires `npm ci` in <checkout>/extra beforehand (skip the JS build with SKIP_JS=1).+set -euo pipefail+SRC="$(cd "$1" && pwd)"; OUT="$2"; mkdir -p "$OUT"; OUT="$(cd "$OUT" && pwd)"+PKG="$(mktemp -d)"; trap 'rm -rf "$PKG" "$SRC/wcfsetup/install/packages/com.woltlab.wcf.tar"' EXIT++# 1) JS bundles+if [ "${SKIP_JS:-0}" != "1" ]; then (cd "$SRC/extra" && node _buildCore.js); fi++# 2) Core package com.woltlab.wcf.tar+cp -r "$SRC/com.woltlab.wcf/." "$PKG/"+tar -cf "$PKG/files.tar" -C "$SRC/wcfsetup/install/files" --exclude=./acp/templates .+tar -cf "$PKG/acptemplates.tar" -C "$SRC/wcfsetup/install/files/acp/templates" .+tar -cf "$PKG/templates.tar" -C "$SRC/com.woltlab.wcf/templates" .+rm -rf "$PKG/templates"+mkdir -p "$PKG/language" "$PKG/acp/database"+cp "$SRC"/wcfsetup/install/lang/*.xml "$PKG/language/"+cp "$SRC/wcfsetup/setup/db/install_com.woltlab.wcf.php" "$PKG/acp/database/"+mkdir -p "$SRC/wcfsetup/install/packages"+tar -cf "$SRC/wcfsetup/install/packages/com.woltlab.wcf.tar" -C "$PKG" .++# 3) WCFSetup.tar.gz (install/ + setup/) and install.php+tar -czf "$OUT/WCFSetup.tar.gz" -C "$SRC/wcfsetup" install setup+cp "$SRC/wcfsetup/install.php" "$SRC/wcfsetup/test.php" "$OUT/"+( cd "$OUT" && sha256sum WCFSetup.tar.gz install.php test.php > SHA256SUMS )+ls -la "$OUT"
-
scripts/prune-releases.sh<pre>@@ -0,0 +1,11 @@+#!/usr/bin/env bash+# Keeps the newest 7 test builds plus the newest build of each of the last 4 ISO weeks; deletes the rest.+set -euo pipefail+declare -A week_seen; keep=0+gh release list --limit 200 --json tagName,createdAt --jq 'sort_by(.createdAt)|reverse|.[]|select(.tagName|startswith("6.3-alpha-"))|[.tagName,.createdAt]|@tsv' |+while IFS=$'\t' read -r tag created; do+ keep=$((keep+1)); week="$(date -u -d "$created" +%G-%V)"+ if [ "$keep" -le 7 ]; then week_seen[$week]=1; continue; fi+ if [ -z "${week_seen[$week]:-}" ] && [ "${#week_seen[@]}" -lt 11 ]; then week_seen[$week]=1; continue; fi+ gh release delete "$tag" --cleanup-tag --yes+done