Compare commits

...

10 Commits

Author SHA1 Message Date
release-bot
7a5d423dcb chore(release): bump version to v26.03.21.f [skip ci] 2026-03-21 23:13:49 +00:00
c4296137b3 Merge branch 'main' of https://git.adcmnetworks.co.uk/alexander.lyall/computing-box.git
All checks were successful
Changelog + Release on main / changelog_and_release (push) Successful in 9m48s
2026-03-21 23:08:17 +00:00
d980671266 feat(ui): update branding assets and switch logo to webp format
- Add new webp logo and favicon assets
- Replace svg logo references with webp across layouts and pages
- Add favicon.ico and favicon.webp for browser compatibility
- Update BaseLayout to include favicon link

Signed-off-by: Alexander Lyall <alex@adcm.uk>
2026-03-21 23:08:04 +00:00
release-bot
52d129f50a chore(release): bump version to v26.03.21.e [skip ci] 2026-03-21 22:55:39 +00:00
c8b43a3f8f fix(release): exclude current tag from previous tag lookup and handle empty result
All checks were successful
Changelog + Release on main / changelog_and_release (push) Successful in 9m57s
- Exclude newly created tag from PREV_TAG detection to avoid self-referencing ranges
- Add fallback to prevent workflow failure when no previous tag exists
- Update Node version in workflow configuration

Signed-off-by: Alexander Lyall <alex@adcm.uk>
2026-03-21 22:50:21 +00:00
63e2c267fb Merge pull request 'chore(deps): update dependency node to v22.22.1' (#22) from renovate/node-22.x into main
Some checks failed
Changelog + Release on main / changelog_and_release (push) Failing after 39s
Reviewed-on: #22
2026-03-21 22:47:57 +00:00
renovate[bot]
14c2dfdb20 chore(deps): update dependency node to v22.22.1
All checks were successful
Pre-release on non-main branches / prerelease (push) Successful in 30s
2026-03-21 22:46:49 +00:00
68f1ed5d81 chore: add git-cliff configuration
Some checks failed
Changelog + Release on main / changelog_and_release (push) Failing after 33s
feat(release): implement incremental changelog and versioned release workflow

- Generate changelog from previous release tag to HEAD
- Replace full-history changelog with incremental git-cliff usage
- Add automatic version bump from date-based tag
- Commit and push version updates (package.json and lockfile)
- Refactor workflow order to align changelog, versioning, and build
- Improve Node setup and add version checks
- Introduce cliff.toml configuration for grouped changelog output
- Add generated version.json for runtime version display
- Update footer layout to include dynamic version and release link

Signed-off-by: Alexander Lyall <alex@adcm.uk>
2026-03-21 22:45:22 +00:00
release-bot
875ab670d5 chore(release): bump version to v26.03.21.d [skip ci] 2026-03-21 22:24:55 +00:00
43cef42c3b Merge pull request 'chore(deps): update actions/setup-node action to v6' (#21) from renovate/actions-setup-node-6.x into main
All checks were successful
Changelog + Release on main / changelog_and_release (push) Successful in 10m57s
Reviewed-on: #21
2026-03-21 22:18:31 +00:00
11 changed files with 162 additions and 97 deletions

View File

@@ -15,7 +15,7 @@ jobs:
with:
fetch-depth: 0
- name: Stop if this is the bot changelog commit
- name: Stop if this is the bot changelog/version commit
shell: bash
run: |
set -e
@@ -36,58 +36,6 @@ jobs:
sudo install /tmp/git-cliff-*/git-cliff /usr/local/bin/git-cliff
git-cliff --version
- name: Generate CHANGELOG.md (Keep a Changelog)
shell: bash
run: |
set -e
git-cliff --config cliff.toml --output CHANGELOG.md
test -s CHANGELOG.md
- name: Commit and push CHANGELOG.md if changed (CHANGELOG_PAT)
shell: bash
env:
CHANGELOG_PAT: ${{ secrets.CHANGELOG_PAT }}
run: |
set -e
if git diff --quiet -- CHANGELOG.md; then
echo "No changelog changes."
else
git config user.name "changelog-bot"
git config user.email "changelog-bot@users.noreply.local"
git add CHANGELOG.md
git commit -m "docs(changelog): update changelog [skip ci]"
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#')"
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
- name: Extract newest changelog section for release body
shell: bash
run: |
set -e
awk '
/^## / { if (seen) exit; seen=1 }
seen { print }
' CHANGELOG.md > RELEASE_NOTES.md
sed -i 's/[[:space:]]*$//' RELEASE_NOTES.md
test -s RELEASE_NOTES.md
echo "---- RELEASE_NOTES.md ----"
head -n 60 RELEASE_NOTES.md
echo "--------------------------"
- name: Prepare YY.MM.DD letter-suffix tag + release name
shell: bash
run: |
@@ -139,13 +87,89 @@ jobs:
echo "Release name: $RELEASE_NAME"
echo "Release URL: $RELEASE_URL"
- name: Find previous release tag
shell: bash
run: |
set -e
PREV_TAG="$(
git tag --list 'v*' \
| grep -E '^v[0-9]{2}\.[0-9]{2}\.[0-9]{2}[a-z]$' \
| grep -Fxv "$TAG" \
| sort -V \
| tail -n 1 \
|| true
)"
if [ -n "$PREV_TAG" ]; then
echo "PREV_TAG=$PREV_TAG" >> "$GITHUB_ENV"
echo "Previous release tag: $PREV_TAG"
else
echo "PREV_TAG=" >> "$GITHUB_ENV"
echo "No previous release tag found."
fi
- name: Generate CHANGELOG.md from previous release to HEAD
shell: bash
run: |
set -e
if [ -n "${PREV_TAG}" ]; then
echo "Generating changelog from ${PREV_TAG}..HEAD"
git-cliff --config cliff.toml "${PREV_TAG}..HEAD" --output CHANGELOG.md
else
echo "Generating changelog from full history"
git-cliff --config cliff.toml --output CHANGELOG.md
fi
test -s CHANGELOG.md
echo "---- CHANGELOG.md ----"
head -n 120 CHANGELOG.md
echo "----------------------"
- name: Commit and push CHANGELOG.md if changed (CHANGELOG_PAT)
shell: bash
env:
CHANGELOG_PAT: ${{ secrets.CHANGELOG_PAT }}
run: |
set -e
if git diff --quiet -- CHANGELOG.md; then
echo "No changelog changes."
else
git config user.name "changelog-bot"
git config user.email "changelog-bot@users.noreply.local"
git add CHANGELOG.md
git commit -m "docs(changelog): update changelog [skip ci]"
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
authed_url="$(echo "$origin_url" | sed -E "s#^https://#https://oauth2:${CHANGELOG_PAT}@#")"
git push "$authed_url" HEAD:main
fi
- name: Prepare release notes
shell: bash
run: |
set -e
cp CHANGELOG.md RELEASE_NOTES.md
test -s RELEASE_NOTES.md
echo "---- RELEASE_NOTES.md ----"
head -n 120 RELEASE_NOTES.md
echo "--------------------------"
- 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
@@ -177,6 +201,12 @@ jobs:
node-version: 25
cache: npm
- name: Check Node version
shell: bash
run: |
node -v
npm -v
- name: Install dependencies
shell: bash
run: |
@@ -195,6 +225,34 @@ jobs:
echo "package-lock.json version:"
node -p "require('./package-lock.json').version"
- 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)"
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
- name: Build Astro site
shell: bash
run: |
@@ -306,34 +364,4 @@ jobs:
-F "attachment=@${ZIP_PATH}" \
>/dev/null
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
echo "✅ Release created: ${RELEASE_NAME} (tag: ${TAG}) with asset uploaded"

35
cliff.toml Normal file
View File

@@ -0,0 +1,35 @@
[changelog]
header = """
# Changelog
"""
body = """
{% for group, commits in commits | group_by(attribute="group") %}
## {{ group }}
{% for commit in commits %}
- {{ commit.message | upper_first }}
{% endfor %}
{% endfor %}
"""
footer = ""
[git]
conventional_commits = false
filter_unconventional = false
split_commits = false
topo_order = true
# IMPORTANT: match your tag format
tag_pattern = "^v[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}[a-z]$"
commit_parsers = [
{ message = "^feat", group = "🚀 Features" },
{ message = "^fix", group = "🐛 Fixes" },
{ message = "^refactor", group = "♻️ Refactoring" },
{ message = "^docs", group = "📚 Documentation" },
{ message = "^chore", group = "💼 Other" },
# catch-all so NOTHING is dropped
{ message = ".*", group = "💼 Other" },
]

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "computing-box",
"version": "2.0.0",
"version": "26.3.2-1.f",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "computing-box",
"version": "2.0.0",
"version": "26.3.2-1.f",
"dependencies": {
"astro": "^6.0.8"
}

View File

@@ -1,7 +1,7 @@
{
"name": "computing-box",
"type": "module",
"version": "2.0.0",
"version": "26.3.2-1.f",
"scripts": {
"dev": "astro dev",
"build": "astro build",

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
public/images/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
public/images/favicon.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

View File

@@ -0,0 +1,4 @@
{
"version": "dev",
"url": "#"
}

View File

@@ -33,12 +33,13 @@ const { title = "Computing:Box" } = Astro.props;
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700;800;900&display=swap" rel="stylesheet">
<link rel="icon" type="image/x-icon" href="/images/favicon.ico" />
</head>
<body>
<header class="siteNav">
<div class="navInner">
<a class="brand" href="/">
<img class="brandLogo" src="/images/computing-box-logo.svg" alt="Computing:Box logo" />
<img class="brandLogo" src="/images/computing-box-logo.webp" alt="Computing:Box logo" />
<span class="brandName">Computing:Box</span>
</a>
@@ -64,13 +65,10 @@ 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:
<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>
</a> • © {new Date().getFullYear()} Computing:Box • Created with ♥ by Mr A Lyall</div>
</div>
</footer>
</body>

View File

@@ -6,7 +6,7 @@ import BaseLayout from "../layouts/BaseLayout.astro";
<article style="max-width: 1100px; margin: 0 auto; width: 100%;">
<div style="text-align: center; margin-bottom: 60px;">
<img src="/images/computing-box-logo.svg" alt="Computing:Box Logo" style="width: 250px; border-radius: 20px; box-shadow: 0 12px 40px rgba(0,0,0,0.5);" />
<img src="/images/computing-box-logo.webp" alt="Computing:Box Logo" style="width: 250px; border-radius: 20px; box-shadow: 0 12px 40px rgba(0,0,0,0.5);" />
<h1 class="brandName" style="font-size: 42px; margin-top: 20px; color: var(--text);">The New Computing:Box Experience</h1>
</div>

View File

@@ -17,7 +17,7 @@ import BaseLayout from "../layouts/BaseLayout.astro";
</div>
<div style="flex: 1; text-align: right;">
<img src="/images/computing-box-logo.svg" alt="Computing Box Logo" style="width: 100%; max-width: 450px; filter: drop-shadow(0 0 50px rgba(40, 240, 122, 0.15));" />
<img src="/images/computing-box-logo.webp" alt="Computing Box Logo" style="width: 100%; max-width: 450px; filter: drop-shadow(0 0 50px rgba(40, 240, 122, 0.15));" />
</div>
</div>
</BaseLayout>