Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,6 @@ jobs:
tags: |
${{ steps.meta.outputs.tags }}
ghcr.io/${{ steps.meta.outputs.tags }}
platforms: linux/amd64,linux/arm64,linux/arm/v7
platforms: linux/amd64,linux/arm64,linux/arm64/v8
cache-from: type=gha
cache-to: type=gha,mode=max
6 changes: 3 additions & 3 deletions .github/workflows/docker-latest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
run: |
VERSION=$(node -p "require('./package.json').version")
echo "VERSION=$VERSION" >> $GITHUB_ENV

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

Expand All @@ -44,7 +44,7 @@ jobs:
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
Expand All @@ -62,4 +62,4 @@ jobs:
cyfershepard/jellystat:${{ env.VERSION }}
ghcr.io/cyfershepard/jellystat:latest
ghcr.io/cyfershepard/jellystat:${{ env.VERSION }}
platforms: linux/amd64,linux/arm64,linux/arm/v7
platforms: linux/amd64,linux/arm64,linux/arm64/v8
7 changes: 4 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Stage 1: Build the application
FROM node:22.21.1-bookworm-slim AS builder
FROM node:26-bookworm-slim AS builder

WORKDIR /app

Expand All @@ -14,11 +14,12 @@ COPY entry.sh ./
RUN npm run build

# Stage 2: Create the production image
FROM node:22.21.1-bookworm-slim
FROM node:26-bookworm-slim

RUN apt-get update && \
apt-get upgrade -yqq --no-install-recommends && \
apt-get install -yqq --no-install-recommends wget && \
apt-get autoremove && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

Expand Down
61 changes: 16 additions & 45 deletions backend/version-control.js
Original file line number Diff line number Diff line change
@@ -1,64 +1,35 @@
const GitHub = require("github-api");
const axios = require("axios");
const packageJson = require("../package.json");
const { compareVersions } = require("compare-versions");
const memoizee = require("memoizee");

const REPO_OWNER = "cyfershepard";
const REPO_NAME = "Jellystat";

async function checkForUpdates() {
const currentVersion = packageJson.version;
const repoOwner = "cyfershepard";
const repoName = "Jellystat";
const gh = new GitHub();

let result = { current_version: packageJson.version, latest_version: "", message: "", update_available: false };

let latestVersion;
let result = { current_version: currentVersion, latest_version: "", message: "", update_available: false };

try {
const path = "package.json";

const response = await gh.getRepo(repoOwner, repoName).getContents("main", path);
const content = response.data.content;
const decodedContent = Buffer.from(content, "base64").toString();
latestVersion = JSON.parse(decodedContent).version;
const response = await axios.get(
`https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/contents/package.json`,
{ headers: { Accept: "application/vnd.github.raw+json" } }
);
const latestVersion = response.data.version;

if (compareVersions(latestVersion, currentVersion) > 0) {
// console.log(`A new version V.${latestVersion} of ${repoName} is available.`);
result = {
current_version: packageJson.version,
latest_version: latestVersion,
message: `${repoName} has an update ${latestVersion}`,
update_available: true,
};
result = { current_version: currentVersion, latest_version: latestVersion, message: `${REPO_NAME} has an update ${latestVersion}`, update_available: true };
} else if (compareVersions(latestVersion, currentVersion) < 0) {
// console.log(`${repoName} is using a beta version.`);
result = {
current_version: packageJson.version,
latest_version: latestVersion,
message: `${repoName} is using a beta version`,
update_available: false,
};
result = { current_version: currentVersion, latest_version: latestVersion, message: `${REPO_NAME} is using a beta version`, update_available: false };
} else {
// console.log(`${repoName} is up to date.`);
result = {
current_version: packageJson.version,
latest_version: latestVersion,
message: `${repoName} is up to date`,
update_available: false,
};
result = { current_version: currentVersion, latest_version: latestVersion, message: `${REPO_NAME} is up to date`, update_available: false };
}
} catch (error) {
console.error(`Failed to fetch releases for ${repoName}: ${error.message}`);
result = {
current_version: packageJson.version,
latest_version: "N/A",
message: `Failed to fetch releases for ${repoName}: ${error.message}`,
update_available: false,
};
console.error(`Failed to fetch releases for ${REPO_NAME}: ${error.message}`);
result = { current_version: currentVersion, latest_version: "N/A", message: `Failed to fetch releases for ${REPO_NAME}: ${error.message}`, update_available: false };
}

return result;
}

const memoizedCheckForUpdates = memoizee(checkForUpdates, { maxAge: 300000, promise: true });

module.exports = { checkForUpdates: memoizedCheckForUpdates };
module.exports = { checkForUpdates: memoizee(checkForUpdates, { maxAge: 300000, promise: true }) };
Loading
Loading