Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b182c6e1c2 | ||
| 179b035c44 | |||
| 7a84ada939 | |||
| a09dcde365 | |||
| 39102d27a0 | |||
| 543edd3c66 |
2
.github/workflows/docker.yml
vendored
2
.github/workflows/docker.yml
vendored
@@ -2,7 +2,7 @@ name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
branches: [ "*" ]
|
||||
tags: [ "*" ]
|
||||
pull_request:
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
28
README.md
28
README.md
@@ -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.
|
||||
|
||||
@@ -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
25
dockup
@@ -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(
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
docker
|
||||
packaging
|
||||
dotenv
|
||||
fastapi
|
||||
|
||||
Reference in New Issue
Block a user