feat: expose git sha in versioning api

This commit is contained in:
diced 2025-05-06 01:14:13 -07:00
parent 90aef3dce1
commit 5ab36a08b2
No known key found for this signature in database
GPG key ID: 436B2B0FA0DCA354
6 changed files with 44 additions and 7 deletions

View file

@ -46,6 +46,8 @@ jobs:
cache-from: type=gha cache-from: type=gha
cache-to: type=gha,mode=max cache-to: type=gha,mode=max
provenance: false provenance: false
build-args: |
ZIPLINE_GIT_SHA=${{ steps.sha.outputs.short_sha }}
tags: | tags: |
ghcr.io/diced/zipline:${{ steps.version.outputs.zipline_version }}-${{ matrix.arch }} ghcr.io/diced/zipline:${{ steps.version.outputs.zipline_version }}-${{ matrix.arch }}
ghcr.io/diced/zipline:${{ steps.version.outputs.zipline_version }}-${{ steps.sha.outputs.short_sha }}-${{ matrix.arch }} ghcr.io/diced/zipline:${{ steps.version.outputs.zipline_version }}-${{ steps.sha.outputs.short_sha }}-${{ matrix.arch }}

View file

@ -40,6 +40,8 @@ jobs:
cache-from: type=gha cache-from: type=gha
cache-to: type=gha,mode=max cache-to: type=gha,mode=max
provenance: false provenance: false
build-args: |
ZIPLINE_GIT_SHA=${{ steps.sha.outputs.short_sha }}
tags: | tags: |
ghcr.io/diced/zipline:trunk-${{ matrix.arch }} ghcr.io/diced/zipline:trunk-${{ matrix.arch }}
ghcr.io/diced/zipline:trunk-${{ steps.sha.outputs.short_sha }}-${{ matrix.arch }} ghcr.io/diced/zipline:trunk-${{ steps.sha.outputs.short_sha }}-${{ matrix.arch }}

View file

@ -42,6 +42,7 @@ COPY --from=builder /zipline/mimes.json ./mimes.json
COPY --from=builder /zipline/code.json ./code.json COPY --from=builder /zipline/code.json ./code.json
COPY --from=builder /zipline/generated ./generated COPY --from=builder /zipline/generated ./generated
RUN pnpm build:prisma RUN pnpm build:prisma
# clean # clean
@ -49,4 +50,7 @@ RUN rm -rf /tmp/* /root/*
ENV NODE_ENV=production ENV NODE_ENV=production
ARG ZIPLINE_GIT_SHA
ENV ZIPLINE_GIT_SHA=${ZIPLINE_GIT_SHA:-"unknown"}
CMD ["node", "--enable-source-maps", "build/server"] CMD ["node", "--enable-source-maps", "build/server"]

View file

@ -19,7 +19,8 @@
"db:prototype": "prisma db push --skip-generate && prisma generate --no-hints", "db:prototype": "prisma db push --skip-generate && prisma generate --no-hints",
"db:migrate": "prisma migrate dev --create-only", "db:migrate": "prisma migrate dev --create-only",
"docker:engine": "colima start --mount $PWD/themes:w --mount $PWD/uploads:w --mount $PWD/public:w", "docker:engine": "colima start --mount $PWD/themes:w --mount $PWD/uploads:w --mount $PWD/public:w",
"docker:compose:dev:up": "docker-compose --file docker-compose.dev.yml up --build -d", "docker:compose:dev:build": "docker-compose --file docker-compose.dev.yml build --build-arg ZIPLINE_GIT_SHA=$(git rev-parse HEAD)",
"docker:compose:dev:up": "docker-compose --file docker-compose.dev.yml up -d",
"docker:compose:dev:down": "docker-compose --file docker-compose.dev.yml down", "docker:compose:dev:down": "docker-compose --file docker-compose.dev.yml down",
"docker:compose:dev:logs": "docker-compose --file docker-compose.dev.yml logs -f" "docker:compose:dev:logs": "docker-compose --file docker-compose.dev.yml logs -f"
}, },

29
src/lib/version.ts Normal file
View file

@ -0,0 +1,29 @@
// TODO: implement version checking against the API at https://zipline.diced.sh
import { version } from '../../package.json';
export function gitSha() {
const envValue = process.env.ZIPLINE_GIT_SHA;
if (envValue && envValue !== 'unknown') return envValue;
try {
const { execSync } = require('child_process');
const commitHash = execSync('git rev-parse --short HEAD').toString().trim();
return commitHash;
} catch (error) {
console.error('Error getting git commit hash:', error);
return null;
}
}
export function getVersion(): {
version: string;
sha: string | null;
} {
const sha = gitSha();
return {
version,
sha,
};
}

View file

@ -1,7 +1,6 @@
import { administratorMiddleware } from '@/server/middleware/administrator';
import { userMiddleware } from '@/server/middleware/user'; import { userMiddleware } from '@/server/middleware/user';
import fastifyPlugin from 'fastify-plugin'; import fastifyPlugin from 'fastify-plugin';
import { version } from '../../../../package.json'; import { getVersion } from '@/lib/version';
export type ApiVersionResponse = { export type ApiVersionResponse = {
version: string; version: string;
@ -10,10 +9,10 @@ export type ApiVersionResponse = {
export const PATH = '/api/version'; export const PATH = '/api/version';
export default fastifyPlugin( export default fastifyPlugin(
(server, _, done) => { (server, _, done) => {
server.get(PATH, { preHandler: [userMiddleware, administratorMiddleware] }, async (_, res) => { server.get(PATH, { preHandler: [userMiddleware] }, async (_, res) => {
return res.send({ const details = getVersion();
version,
}); return res.send(details);
}); });
done(); done();