fix: use Docker v2 registry API for tag listing
Some checks failed
Build & Release / build (push) Has been cancelled
Some checks failed
Build & Release / build (push) Has been cancelled
The DO management API has a caching layer that delays tag visibility after push. The v2 registry API returns tags immediately. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,13 +5,20 @@ import { join } from "path";
|
|||||||
import { config } from "../lib/config";
|
import { config } from "../lib/config";
|
||||||
|
|
||||||
export async function getLatestChartVersion(): Promise<string> {
|
export async function getLatestChartVersion(): Promise<string> {
|
||||||
// Query backend image tags instead of Helm chart tags — DO API is unreliable for OCI helm artifacts
|
// Use Docker v2 registry API — the DO management API has a caching layer that delays tag visibility
|
||||||
const res = await fetch("https://api.digitalocean.com/v2/registry/lunarfront/repositories/lunarfront-app/tags?page=1&per_page=100", {
|
// Step 1: Get a bearer token via the registry auth endpoint
|
||||||
headers: { Authorization: `Bearer ${config.doToken}` },
|
const authRes = await fetch(
|
||||||
|
"https://api.digitalocean.com/v2/registry/auth?service=registry.digitalocean.com&scope=repository:lunarfront/lunarfront-app:pull",
|
||||||
|
{ headers: { Authorization: `Basic ${btoa(`token:${config.doToken}`)}` } },
|
||||||
|
);
|
||||||
|
const { token: bearerToken } = await authRes.json() as { token: string };
|
||||||
|
|
||||||
|
// Step 2: List tags via v2 API (returns all tags immediately after push)
|
||||||
|
const res = await fetch("https://registry.digitalocean.com/v2/lunarfront/lunarfront-app/tags/list", {
|
||||||
|
headers: { Authorization: `Bearer ${bearerToken}` },
|
||||||
});
|
});
|
||||||
const data = await res.json() as { tags: { tag: string }[] };
|
const data = await res.json() as { tags: string[] };
|
||||||
const versions = (data.tags ?? [])
|
const versions = (data.tags ?? [])
|
||||||
.map(t => t.tag)
|
|
||||||
.filter(t => /^\d+\.\d+\.\d+$/.test(t))
|
.filter(t => /^\d+\.\d+\.\d+$/.test(t))
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
const [aMaj, aMin, aPat] = a.split(".").map(Number);
|
const [aMaj, aMin, aPat] = a.split(".").map(Number);
|
||||||
|
|||||||
Reference in New Issue
Block a user