mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
fix: address prerelease workflow review issues
- Remove stale mauriceboe/nomad tags from docker-dev.yml - Fix APP_VERSION empty string fallback (?? -> ||) - Fix compareVersions to handle -pre.N suffixes correctly - Use highest existing N instead of tag count to avoid collision after cleanup - Add cleanup step to keep only last 5 prerelease tags per base version
This commit is contained in:
@@ -54,9 +54,9 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
echo "Target: $TARGET"
|
echo "Target: $TARGET"
|
||||||
|
|
||||||
# Count existing prerelease tags for this target and increment
|
# Find the highest existing prerelease N for this target and increment
|
||||||
N=$(git tag -l "v${TARGET}-pre.*" | wc -l)
|
LAST_N=$(git tag -l "v${TARGET}-pre.*" | sed 's/.*-pre\.//' | sort -n | tail -1)
|
||||||
N=$((N + 1))
|
N=$(( ${LAST_N:-0} + 1 ))
|
||||||
|
|
||||||
NEW_VERSION="${TARGET}-pre.${N}"
|
NEW_VERSION="${TARGET}-pre.${N}"
|
||||||
echo "VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT
|
echo "VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT
|
||||||
@@ -151,10 +151,25 @@ jobs:
|
|||||||
-t mauriceboe/trek:latest-pre \
|
-t mauriceboe/trek:latest-pre \
|
||||||
-t mauriceboe/trek:$MAJOR_TAG \
|
-t mauriceboe/trek:$MAJOR_TAG \
|
||||||
-t mauriceboe/trek:$VERSION \
|
-t mauriceboe/trek:$VERSION \
|
||||||
-t mauriceboe/nomad:latest-pre \
|
|
||||||
-t mauriceboe/nomad:$MAJOR_TAG \
|
|
||||||
-t mauriceboe/nomad:$VERSION \
|
|
||||||
"${digests[@]}"
|
"${digests[@]}"
|
||||||
|
|
||||||
- name: Inspect manifest
|
- name: Inspect manifest
|
||||||
run: docker buildx imagetools inspect mauriceboe/trek:latest-pre
|
run: docker buildx imagetools inspect mauriceboe/trek:latest-pre
|
||||||
|
|
||||||
|
- name: Clean up old prerelease tags
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
KEEP=5
|
||||||
|
VERSION=${{ needs.version-bump.outputs.version }}
|
||||||
|
BASE_VERSION="$(echo "$VERSION" | sed 's/-pre\..*//')"
|
||||||
|
git fetch --tags
|
||||||
|
mapfile -t ALL_TAGS < <(git tag -l "v${BASE_VERSION}-pre.*" | sort -t. -k4 -n)
|
||||||
|
TOTAL=${#ALL_TAGS[@]}
|
||||||
|
DELETE_COUNT=$((TOTAL - KEEP))
|
||||||
|
if [ "$DELETE_COUNT" -gt 0 ]; then
|
||||||
|
for TAG in "${ALL_TAGS[@]:0:$DELETE_COUNT}"; do
|
||||||
|
echo "Deleting old prerelease tag: $TAG"
|
||||||
|
git push origin --delete "$TAG"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|||||||
@@ -21,13 +21,25 @@ export function utcSuffix(ts: string | null | undefined): string | null {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function compareVersions(a: string, b: string): number {
|
export function compareVersions(a: string, b: string): number {
|
||||||
const pa = a.split('.').map(Number);
|
const parse = (v: string) => {
|
||||||
const pb = b.split('.').map(Number);
|
const [base, pre] = v.split('-pre.');
|
||||||
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
const parts = base.split('.').map(Number);
|
||||||
const na = pa[i] || 0, nb = pb[i] || 0;
|
const preN = pre !== undefined ? parseInt(pre, 10) : null;
|
||||||
|
return { parts, preN };
|
||||||
|
};
|
||||||
|
const pa = parse(a), pb = parse(b);
|
||||||
|
for (let i = 0; i < Math.max(pa.parts.length, pb.parts.length); i++) {
|
||||||
|
const na = pa.parts[i] || 0, nb = pb.parts[i] || 0;
|
||||||
if (na > nb) return 1;
|
if (na > nb) return 1;
|
||||||
if (na < nb) return -1;
|
if (na < nb) return -1;
|
||||||
}
|
}
|
||||||
|
// Equal base: stable > prerelease; higher preN wins among prereleases
|
||||||
|
if (pa.preN === null && pb.preN !== null) return 1;
|
||||||
|
if (pa.preN !== null && pb.preN === null) return -1;
|
||||||
|
if (pa.preN !== null && pb.preN !== null) {
|
||||||
|
if (pa.preN > pb.preN) return 1;
|
||||||
|
if (pa.preN < pb.preN) return -1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,7 +316,7 @@ export async function getGithubReleases(perPage: string = '10', page: string = '
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function checkVersion() {
|
export async function checkVersion() {
|
||||||
const currentVersion: string = process.env.APP_VERSION ?? require('../../package.json').version;
|
const currentVersion: string = process.env.APP_VERSION || require('../../package.json').version;
|
||||||
const isPrerelease = currentVersion.includes('-pre.');
|
const isPrerelease = currentVersion.includes('-pre.');
|
||||||
const fallback = { current: currentVersion, latest: currentVersion, update_available: false, is_docker: isDocker, is_prerelease: isPrerelease };
|
const fallback = { current: currentVersion, latest: currentVersion, update_available: false, is_docker: isDocker, is_prerelease: isPrerelease };
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user