6 Commits

Author SHA1 Message Date
ramius
b182c6e1c2 Merge pull request #2 from ramiuslr/feat/strict_version_and_tag
Feat/strict version and tag
2025-05-21 16:42:55 +02:00
179b035c44 Add example to readme 2025-05-21 16:36:49 +02:00
7a84ada939 Use python slim image 2025-05-21 16:32:15 +02:00
a09dcde365 Add other bad keywords to exclusions 2025-05-12 14:51:38 +02:00
39102d27a0 Enable fastest shutdown in docker 2025-05-03 11:18:47 +02:00
543edd3c66 Filter for non production keywords in tags 2025-04-18 11:02:26 +02:00
6 changed files with 61 additions and 5 deletions

View File

@@ -2,7 +2,7 @@ name: ci
on:
push:
branches: [ "master" ]
branches: [ "*" ]
tags: [ "*" ]
pull_request:

View File

@@ -1,11 +1,16 @@
# Init image
FROM python:3
FROM python:slim
WORKDIR /app
# Install requirements
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
RUN wget -O /usr/bin/regctl https://github.com/regclient/regclient/releases/latest/download/regctl-linux-amd64
RUN python - <<EOF
from urllib.request import urlopen;
from pathlib import Path;
Path("/usr/bin/regctl").write_bytes(urlopen("https://github.com/regclient/regclient/releases/latest/download/regctl-linux-amd64").read())
EOF
RUN chmod 755 /usr/bin/regctl
# Import app

View File

@@ -10,6 +10,34 @@ Get the provided `compose.yaml`.
docker compose up -d
```
All images are exposed to `http://0.0.0.0:8000/all` in JSON format.
If you want to get only images needing update, look at `http://0.0.0.0:8000/updates`.
Here is a quick example of what you get on the `/all` endpoint (dockup don't have local tag because it is a locally built image):
```json
[
{
"name": "dockup",
"repo": "dockup-dockup",
"local_tag": "latest",
"remote_tag": null
},
{
"name": "wikijs-wiki-1",
"repo": "ghcr.io/requarks/wiki",
"local_tag": "2.5.307",
"remote_tag": "2.5.307"
},
{
"name": "wikijs-db-1",
"repo": "postgres",
"local_tag": "17.4-alpine",
"remote_tag": "17.5-alpine"
}
]
```
# Requirements
This program needs [regctl](https://github.com/regclient/regclient.git).
It is shipped with container image by default, however you'll need to install it by yourself if running script directly.

View File

@@ -3,6 +3,7 @@ name: dockup
services:
dockup:
image: ramiuslr/dockup:latest # You should set a fixed tag
# build: . # Use this for local development setup
container_name: dockup
restart: always
ports:

25
dockup
View File

@@ -4,15 +4,31 @@ import http.server
import json
import logging
import os
import signal
import socketserver
import subprocess
import sys
import time
from threading import Lock, Thread
import docker
from dotenv import load_dotenv
from fastapi import FastAPI
from packaging.version import InvalidVersion, Version, parse
# Enable quick restart in docker
app = FastAPI()
def shutdown_handler(signum, frame):
logging.info("Received shutdown signal")
sys.exit(0)
signal.signal(signal.SIGTERM, shutdown_handler)
signal.signal(signal.SIGINT, shutdown_handler)
# Global variables
data_lock = Lock()
g_data = []
@@ -120,8 +136,13 @@ def get_remote_tags(images):
for tag in tags:
# Skip mismatched suffixes
if local_suffix and not tag.endswith(local_suffix):
continue
if local_suffix:
if not tag.endswith(local_suffix):
continue
else:
# Skip tags with suffixes if local has none
if "-" in tag:
continue
# Validate version structure
if is_valid_semver(

View File

@@ -1,3 +1,4 @@
docker
packaging
dotenv
fastapi