You've already forked computing-box
Compare commits
3 Commits
v26.03.21.
...
v26.03.21-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29dd867bcb | ||
|
dba93b67fd
|
|||
|
5d23d0639e
|
@@ -76,14 +76,11 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
# Extract the first "## ..." section (newest section) from CHANGELOG.md
|
||||
# Includes the "## ..." heading and everything until the next "## ..." heading.
|
||||
awk '
|
||||
/^## / { if (seen) exit; seen=1 }
|
||||
seen { print }
|
||||
' CHANGELOG.md > RELEASE_NOTES.md
|
||||
|
||||
# Clean trailing whitespace/newlines a bit
|
||||
sed -i 's/[[:space:]]*$//' RELEASE_NOTES.md
|
||||
|
||||
test -s RELEASE_NOTES.md
|
||||
@@ -91,27 +88,11 @@ jobs:
|
||||
head -n 60 RELEASE_NOTES.md
|
||||
echo "--------------------------"
|
||||
|
||||
- name: Create export zip (Computing:Box Website.zip)
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
if [ ! -d "dist" ]; then
|
||||
echo "❌ dist/ folder not found in repo root"
|
||||
ls -la
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -f "Computing:Box Website.zip"
|
||||
(cd dist && zip -r "../Computing:Box Website.zip" .)
|
||||
test -s "Computing:Box Website.zip"
|
||||
ls -lh "Computing:Box Website.zip"
|
||||
|
||||
- name: Prepare YY.MM.DD letter-suffix tag + release name
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
|
||||
# Version: YY.MM.DD (UTC). Swap to `date +...` if you prefer UK-local runner time.
|
||||
VERSION="$(date -u +'%y.%m.%d')"
|
||||
PREFIX="v${VERSION}."
|
||||
|
||||
@@ -135,12 +116,106 @@ jobs:
|
||||
TAG="${PREFIX}${next_letter}"
|
||||
RELEASE_NAME="Computing:Box v${VERSION}.${next_letter}"
|
||||
|
||||
origin_url="$(git remote get-url origin)"
|
||||
|
||||
if echo "$origin_url" | grep -q "^git@"; then
|
||||
host="$(echo "$origin_url" | sed -E 's#git@([^:]+):.*#\1#')"
|
||||
path="$(echo "$origin_url" | sed -E 's#git@[^:]+:(.*)#\1#')"
|
||||
origin_url="https://$host/$path"
|
||||
fi
|
||||
|
||||
base="$(echo "$origin_url" | sed -E 's#(https?://[^/]+)/.*#\1#')"
|
||||
repo_path="$(echo "$origin_url" | sed -E 's#https?://[^/]+/##')"
|
||||
repo_path="$(echo "$repo_path" | sed -E 's/\.git$//')"
|
||||
|
||||
RELEASE_URL="${base}/${repo_path}/releases/tag/${TAG}"
|
||||
|
||||
echo "TAG=$TAG" >> "$GITHUB_ENV"
|
||||
echo "RELEASE_NAME=$RELEASE_NAME" >> "$GITHUB_ENV"
|
||||
echo "ZIP_PATH=Computing:Box Website.zip" >> "$GITHUB_ENV"
|
||||
echo "RELEASE_URL=$RELEASE_URL" >> "$GITHUB_ENV"
|
||||
|
||||
echo "Using tag: $TAG"
|
||||
echo "Release name: $RELEASE_NAME"
|
||||
echo "Release URL: $RELEASE_URL"
|
||||
|
||||
- name: Derive semver package version from tag
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
|
||||
# Convert:
|
||||
# v25.03.21a -> 25.3.21-a
|
||||
PACKAGE_VERSION="$(echo "$TAG" | sed -E 's/^v([0-9]{2})\.0?([0-9]{1,2})\.0?([0-9]{1,2})([a-z])$/\1.\2.\3-\4/')"
|
||||
|
||||
if [ -z "$PACKAGE_VERSION" ]; then
|
||||
echo "❌ Failed to derive PACKAGE_VERSION from TAG=$TAG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "PACKAGE_VERSION=$PACKAGE_VERSION" >> "$GITHUB_ENV"
|
||||
echo "Using package version: $PACKAGE_VERSION"
|
||||
|
||||
- name: Generate version file for Astro footer
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
mkdir -p src/generated
|
||||
cat > src/generated/version.json <<EOF
|
||||
{
|
||||
"version": "${TAG}",
|
||||
"url": "${RELEASE_URL}"
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "Generated src/generated/version.json"
|
||||
cat src/generated/version.json
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 25
|
||||
cache: npm
|
||||
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
npm ci
|
||||
|
||||
- name: Update package.json and package-lock.json version
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
npm version "$PACKAGE_VERSION" --no-git-tag-version
|
||||
|
||||
echo "package.json version:"
|
||||
node -p "require('./package.json').version"
|
||||
|
||||
echo "package-lock.json version:"
|
||||
node -p "require('./package-lock.json').version"
|
||||
|
||||
- name: Build Astro site
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
npm run build
|
||||
test -d dist
|
||||
|
||||
- name: Create export zip (Computing:Box Website.zip)
|
||||
shell: bash
|
||||
run: |
|
||||
set -e
|
||||
if [ ! -d "dist" ]; then
|
||||
echo "❌ dist/ folder not found in repo root"
|
||||
ls -la
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -f "Computing:Box Website.zip"
|
||||
(cd dist && zip -r "../Computing:Box Website.zip" .)
|
||||
test -s "Computing:Box Website.zip"
|
||||
ls -lh "Computing:Box Website.zip"
|
||||
|
||||
- name: Create and push tag (CHANGELOG_PAT)
|
||||
shell: bash
|
||||
@@ -153,7 +228,6 @@ jobs:
|
||||
|
||||
origin_url="$(git remote get-url origin)"
|
||||
|
||||
# Convert SSH origin to HTTPS if needed
|
||||
if echo "$origin_url" | grep -q "^git@"; then
|
||||
host="$(echo "$origin_url" | sed -E 's#git@([^:]+):.*#\1#')"
|
||||
path="$(echo "$origin_url" | sed -E 's#git@[^:]+:(.*)#\1#')"
|
||||
@@ -198,7 +272,7 @@ jobs:
|
||||
"tag_name": tag,
|
||||
"target_commitish": "main",
|
||||
"name": name,
|
||||
"body": body, # newest section only
|
||||
"body": body,
|
||||
"draft": False,
|
||||
"prerelease": False,
|
||||
}
|
||||
@@ -232,4 +306,34 @@ jobs:
|
||||
-F "attachment=@${ZIP_PATH}" \
|
||||
>/dev/null
|
||||
|
||||
echo "✅ Release created: ${RELEASE_NAME} (tag: ${TAG}) with asset uploaded"
|
||||
echo "✅ Release created: ${RELEASE_NAME} (tag: ${TAG}) with asset uploaded"
|
||||
|
||||
- name: Commit and push version bump (CHANGELOG_PAT)
|
||||
shell: bash
|
||||
env:
|
||||
CHANGELOG_PAT: ${{ secrets.CHANGELOG_PAT }}
|
||||
run: |
|
||||
set -e
|
||||
|
||||
if git diff --quiet -- package.json package-lock.json; then
|
||||
echo "No version changes to commit."
|
||||
else
|
||||
git config user.name "release-bot"
|
||||
git config user.email "release-bot@users.noreply.local"
|
||||
|
||||
git add package.json package-lock.json
|
||||
git commit -m "chore(release): bump version to ${PACKAGE_VERSION} [skip ci]"
|
||||
|
||||
origin_url="$(git remote get-url origin)"
|
||||
|
||||
# Convert SSH → HTTPS if needed
|
||||
if echo "$origin_url" | grep -q "^git@"; then
|
||||
host="$(echo "$origin_url" | sed -E 's#git@([^:]+):.*#\1#')"
|
||||
path="$(echo "$origin_url" | sed -E 's#git@[^:]+:(.*)#\1#')"
|
||||
origin_url="https://$host/$path"
|
||||
fi
|
||||
|
||||
authed_url="$(echo "$origin_url" | sed -E "s#^https://#https://oauth2:${CHANGELOG_PAT}@#")"
|
||||
|
||||
git push "$authed_url" HEAD:main
|
||||
fi
|
||||
87
package-lock.json
generated
87
package-lock.json
generated
@@ -680,6 +680,9 @@
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -696,6 +699,9 @@
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -712,6 +718,9 @@
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -728,6 +737,9 @@
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -744,6 +756,9 @@
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -760,6 +775,9 @@
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -776,6 +794,9 @@
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -792,6 +813,9 @@
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -808,6 +832,9 @@
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -830,6 +857,9 @@
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -852,6 +882,9 @@
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -874,6 +907,9 @@
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -896,6 +932,9 @@
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -918,6 +957,9 @@
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -940,6 +982,9 @@
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -962,6 +1007,9 @@
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1172,6 +1220,9 @@
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1185,6 +1236,9 @@
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1198,6 +1252,9 @@
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1211,6 +1268,9 @@
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1224,6 +1284,9 @@
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1237,6 +1300,9 @@
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1250,6 +1316,9 @@
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1263,6 +1332,9 @@
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1276,6 +1348,9 @@
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1289,6 +1364,9 @@
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1302,6 +1380,9 @@
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1315,6 +1396,9 @@
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
@@ -1328,6 +1412,9 @@
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
---
|
||||
import "../styles/global.css";
|
||||
import versionInfo from "../generated/version.json";
|
||||
|
||||
const version = versionInfo.version;
|
||||
const releaseUrl = versionInfo.url;
|
||||
const { title = "Computing:Box" } = Astro.props;
|
||||
---
|
||||
|
||||
@@ -60,6 +64,12 @@ const { title = "Computing:Box" } = Astro.props;
|
||||
<a href="/legal-code" style="margin-left: 32px; color: var(--muted); text-decoration: underline;">Legal Code</a>
|
||||
</div>
|
||||
<div>Computer Science Concept Simulators</div>
|
||||
<div>
|
||||
Version:
|
||||
<a href={releaseUrl} target="_blank" rel="noopener noreferrer">
|
||||
{version}
|
||||
</a>
|
||||
</div>
|
||||
<div>© {new Date().getFullYear()} Computing:Box • Created with ♥ by Mr A Lyall</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
Reference in New Issue
Block a user