Compare commits

...
3 Commits
Author SHA1 Message Date
3252a8 1d43606446 docs: drop manual image build instructions from README 2026-06-10 23:10:27 +03:00
3252a8 5ca1ecfce6 test: parse installer download host instead of substring check
Extract the raw_url() template from install.sh and compare the parsed
hostname to raw.githubusercontent.com. Resolves the CodeQL "incomplete
URL substring sanitization" alert on the old substring assertion.
2026-06-10 23:09:38 +03:00
3252a8 86ac925b19 ci: move dev Docker Hub publishing back to GitHub Actions
Publish dev images to both GHCR and Docker Hub from the dev workflow
and drop the GitLab CI pipeline, so all images are built by GitHub
Actions only.
2026-06-10 22:55:43 +03:00
4 changed files with 6 additions and 87 deletions
+1 -2
View File
@@ -1,7 +1,7 @@
name: Dev images name: Dev images
# On every push to the dev branch, build all three images and push them to # On every push to the dev branch, build all three images and push them to
# GHCR tagged `dev`. Docker Hub dev images are published by GitLab CI. # GHCR and Docker Hub tagged `dev`.
on: on:
push: push:
@@ -22,5 +22,4 @@ jobs:
with: with:
push: true push: true
tag_mode: dev tag_mode: dev
publish_dockerhub: false
secrets: inherit secrets: inherit
-72
View File
@@ -1,72 +0,0 @@
stages:
- docker
workflow:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
- when: never
variables:
DOCKER_BUILDKIT: "1"
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
GIT_DEPTH: "0"
docker-dev:
stage: docker
image: docker:27.5.1
services:
- name: docker:27.5.1-dind
alias: docker
interruptible: true
parallel:
matrix:
- TARGET: backend
IMAGE: remnawave-minishop-backend
- TARGET: worker
IMAGE: remnawave-minishop-worker
- TARGET: frontend
IMAGE: remnawave-minishop-frontend
before_script:
- apk add --no-cache git
- test -n "$DOCKERHUB_USERNAME"
- test -n "$DOCKERHUB_TOKEN"
- echo "$DOCKERHUB_TOKEN" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin
- docker buildx create --name gitlab-builder --driver docker-container --use
- docker buildx inspect --bootstrap
script:
- git fetch origin dev --tags
- |
if [ "$(git rev-parse HEAD)" != "$(git rev-parse origin/dev)" ]; then
echo "A newer dev commit exists; skipping Docker Hub build for $IMAGE."
exit 0
fi
- |
provenance="${REMNAWAVE_MINISHOP_BUILD_PROVENANCE:-}"
if [ -z "$provenance" ]; then
dockerhub_owner="$(printf '%s' "${DOCKERHUB_USERNAME:-}" | tr '[:upper:]' '[:lower:]')"
if [ "${CI_PROJECT_PATH:-}" = "3252a8/remnawave-minishop" ] || [ "$dockerhub_owner" = "3252a8" ]; then
provenance="official"
else
provenance="custom"
fi
fi
docker buildx build \
--load \
--platform linux/amd64 \
--file deploy/docker/Dockerfile \
--target "$TARGET" \
--build-arg "CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME" \
--build-arg "REMNAWAVE_MINISHOP_BUILD_PROVENANCE=$provenance" \
--build-arg "BUILDKIT_INLINE_CACHE=1" \
--cache-from "type=registry,ref=$DOCKERHUB_USERNAME/$IMAGE:dev" \
--tag "$DOCKERHUB_USERNAME/$IMAGE:dev" \
.
- git fetch origin dev --tags
- |
if [ "$(git rev-parse HEAD)" != "$(git rev-parse origin/dev)" ]; then
echo "A newer dev commit exists; skipping Docker Hub push for $IMAGE."
exit 0
fi
- docker push "$DOCKERHUB_USERNAME/$IMAGE:dev"
-12
View File
@@ -139,15 +139,3 @@ IMAGE_TAG=3.1.0 docker compose up -d
- `docker.io/3252a8/remnawave-minishop-backend` - `docker.io/3252a8/remnawave-minishop-backend`
- `docker.io/3252a8/remnawave-minishop-worker` - `docker.io/3252a8/remnawave-minishop-worker`
- `docker.io/3252a8/remnawave-minishop-frontend` - `docker.io/3252a8/remnawave-minishop-frontend`
Сборка и публикация сразу в GHCR и Docker Hub:
```bash
docker login ghcr.io
docker login docker.io
IMAGE_TAG=v3.4.3 bash scripts/docker-build-push-images.sh
```
## Поддержать проект
- Crypto: `USDT/Other ERC-20 0xeD506D44aae634fEc0E01C8835744fBedb7B2a44 (Ethereum/Polygon/Gnosis)`
+5 -1
View File
@@ -1,6 +1,8 @@
import re
import shutil import shutil
import subprocess import subprocess
from pathlib import Path from pathlib import Path
from urllib.parse import urlsplit
import pytest import pytest
@@ -33,7 +35,9 @@ def test_shell_installer_downloads_raw_files_and_runs_import_in_container():
script = INSTALL_SCRIPT.read_text(encoding="utf-8") script = INSTALL_SCRIPT.read_text(encoding="utf-8")
assert script.startswith("#!/bin/sh") assert script.startswith("#!/bin/sh")
assert "raw.githubusercontent.com" in script raw_url_template = re.search(r"printf '(https://[^']+)' \"\$repo\"", script)
assert raw_url_template is not None
assert urlsplit(raw_url_template.group(1)).hostname == "raw.githubusercontent.com"
assert "git clone" not in script assert "git clone" not in script
assert "backend python backend/scripts/import_legacy.py" in script assert "backend python backend/scripts/import_legacy.py" in script
assert "Optional source Remnashop .env path" in script assert "Optional source Remnashop .env path" in script