You've already forked computing-box
Compare commits
22 Commits
v26.03.01-
...
v26.03.21-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14c2dfdb20 | ||
|
68f1ed5d81
|
|||
|
|
875ab670d5 | ||
| 43cef42c3b | |||
|
|
29dd867bcb | ||
|
dba93b67fd
|
|||
|
5d23d0639e
|
|||
|
535c62b838
|
|||
| bcac9f3310 | |||
|
|
3a624cb5cd | ||
| 12f605e987 | |||
|
|
cc3d6f0e48 | ||
|
61b24dc309
|
|||
|
d4ffe30f9b
|
|||
|
93542748e6
|
|||
|
98671cdeee
|
|||
| e74a20ca81 | |||
|
|
4b21391232 | ||
| 5708a184d5 | |||
|
af131fc58a
|
|||
|
|
4a0e4d306a | ||
|
aa9e071d40
|
@@ -15,7 +15,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Stop if this is the bot changelog commit
|
- name: Stop if this is the bot changelog/version commit
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
@@ -36,82 +36,11 @@ jobs:
|
|||||||
sudo install /tmp/git-cliff-*/git-cliff /usr/local/bin/git-cliff
|
sudo install /tmp/git-cliff-*/git-cliff /usr/local/bin/git-cliff
|
||||||
git-cliff --version
|
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
|
|
||||||
# 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
|
|
||||||
echo "---- RELEASE_NOTES.md ----"
|
|
||||||
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
|
- name: Prepare YY.MM.DD letter-suffix tag + release name
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Version: YY.MM.DD (UTC). Swap to `date +...` if you prefer UK-local runner time.
|
|
||||||
VERSION="$(date -u +'%y.%m.%d')"
|
VERSION="$(date -u +'%y.%m.%d')"
|
||||||
PREFIX="v${VERSION}."
|
PREFIX="v${VERSION}."
|
||||||
|
|
||||||
@@ -135,12 +64,214 @@ jobs:
|
|||||||
TAG="${PREFIX}${next_letter}"
|
TAG="${PREFIX}${next_letter}"
|
||||||
RELEASE_NAME="Computing:Box v${VERSION}.${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 "TAG=$TAG" >> "$GITHUB_ENV"
|
||||||
echo "RELEASE_NAME=$RELEASE_NAME" >> "$GITHUB_ENV"
|
echo "RELEASE_NAME=$RELEASE_NAME" >> "$GITHUB_ENV"
|
||||||
echo "ZIP_PATH=Computing:Box Website.zip" >> "$GITHUB_ENV"
|
echo "ZIP_PATH=Computing:Box Website.zip" >> "$GITHUB_ENV"
|
||||||
|
echo "RELEASE_URL=$RELEASE_URL" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
echo "Using tag: $TAG"
|
echo "Using tag: $TAG"
|
||||||
echo "Release name: $RELEASE_NAME"
|
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]$' \
|
||||||
|
| sort -V \
|
||||||
|
| tail -n 1
|
||||||
|
)"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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: 22.22.1
|
||||||
|
cache: npm
|
||||||
|
|
||||||
|
- name: Check Node version
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
node -v
|
||||||
|
npm -v
|
||||||
|
|
||||||
|
- 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: 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: |
|
||||||
|
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)
|
- name: Create and push tag (CHANGELOG_PAT)
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -153,7 +284,6 @@ jobs:
|
|||||||
|
|
||||||
origin_url="$(git remote get-url origin)"
|
origin_url="$(git remote get-url origin)"
|
||||||
|
|
||||||
# Convert SSH origin to HTTPS if needed
|
|
||||||
if echo "$origin_url" | grep -q "^git@"; then
|
if echo "$origin_url" | grep -q "^git@"; then
|
||||||
host="$(echo "$origin_url" | sed -E 's#git@([^:]+):.*#\1#')"
|
host="$(echo "$origin_url" | sed -E 's#git@([^:]+):.*#\1#')"
|
||||||
path="$(echo "$origin_url" | sed -E 's#git@[^:]+:(.*)#\1#')"
|
path="$(echo "$origin_url" | sed -E 's#git@[^:]+:(.*)#\1#')"
|
||||||
@@ -198,7 +328,7 @@ jobs:
|
|||||||
"tag_name": tag,
|
"tag_name": tag,
|
||||||
"target_commitish": "main",
|
"target_commitish": "main",
|
||||||
"name": name,
|
"name": name,
|
||||||
"body": body, # newest section only
|
"body": body,
|
||||||
"draft": False,
|
"draft": False,
|
||||||
"prerelease": False,
|
"prerelease": False,
|
||||||
}
|
}
|
||||||
|
|||||||
35
cliff.toml
Normal file
35
cliff.toml
Normal 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" },
|
||||||
|
]
|
||||||
1863
package-lock.json
generated
1863
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "computing-box",
|
"name": "computing-box",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "2.0.0",
|
"version": "26.3.2-1.d",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev",
|
"dev": "astro dev",
|
||||||
"build": "astro build",
|
"build": "astro build",
|
||||||
@@ -9,6 +9,6 @@
|
|||||||
"astro": "astro"
|
"astro": "astro"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"astro": "^5.18.0"
|
"astro": "^6.0.8"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 732 KiB After Width: | Height: | Size: 1.4 MiB |
4
src/generated/version.json
Normal file
4
src/generated/version.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"version": "dev",
|
||||||
|
"url": "#"
|
||||||
|
}
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
---
|
---
|
||||||
import "../styles/global.css";
|
import "../styles/global.css";
|
||||||
|
import versionInfo from "../generated/version.json";
|
||||||
|
|
||||||
|
const version = versionInfo.version;
|
||||||
|
const releaseUrl = versionInfo.url;
|
||||||
const { title = "Computing:Box" } = Astro.props;
|
const { title = "Computing:Box" } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -60,7 +64,10 @@ const { title = "Computing:Box" } = Astro.props;
|
|||||||
<a href="/legal-code" style="margin-left: 32px; color: var(--muted); text-decoration: underline;">Legal Code</a>
|
<a href="/legal-code" style="margin-left: 32px; color: var(--muted); text-decoration: underline;">Legal Code</a>
|
||||||
</div>
|
</div>
|
||||||
<div>Computer Science Concept Simulators</div>
|
<div>Computer Science Concept Simulators</div>
|
||||||
<div>© {new Date().getFullYear()} Computing:Box • Created with ♥ by Mr A Lyall</div>
|
<div> Version:
|
||||||
|
<a href={releaseUrl} target="_blank" rel="noopener noreferrer">
|
||||||
|
{version}
|
||||||
|
</a> • © {new Date().getFullYear()} Computing:Box • Created with ♥ by Mr A Lyall</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Reference in New Issue
Block a user