cleanup
preparation for initial review, moves all container stuff to lib_sxng_container.sh and reverts changes from fork CI testing
This commit is contained in:
parent
be04143b2a
commit
4314b0e0f2
1
.github/workflows/checker.yml
vendored
1
.github/workflows/checker.yml
vendored
@ -43,5 +43,4 @@ jobs:
|
|||||||
run: make V=1 install
|
run: make V=1 install
|
||||||
|
|
||||||
- name: Search checker
|
- name: Search checker
|
||||||
continue-on-error: true
|
|
||||||
run: make search.checker
|
run: make search.checker
|
||||||
|
33
.github/workflows/container.yml
vendored
33
.github/workflows/container.yml
vendored
@ -26,9 +26,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
# TODO: Uncomment
|
if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
|
||||||
# if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
|
|
||||||
if: false
|
|
||||||
name: Build (${{ matrix.arch }})
|
name: Build (${{ matrix.arch }})
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
@ -49,6 +47,13 @@ jobs:
|
|||||||
# Organization GHCR
|
# Organization GHCR
|
||||||
packages: write
|
packages: write
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
version_string: ${{ steps.build.outputs.version_string }}
|
||||||
|
version_tag: ${{ steps.build.outputs.version_tag }}
|
||||||
|
docker_tag: ${{ steps.build.outputs.docker_tag }}
|
||||||
|
git_url: ${{ steps.build.outputs.git_url }}
|
||||||
|
git_branch: ${{ steps.build.outputs.git_branch }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
@ -88,9 +93,10 @@ jobs:
|
|||||||
password: "${{ secrets.GITHUB_TOKEN }}"
|
password: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
|
id: build
|
||||||
env:
|
env:
|
||||||
OVERRIDE_ARCH: "${{ matrix.arch }}"
|
OVERRIDE_ARCH: "${{ matrix.arch }}"
|
||||||
run: make ci.container.build
|
run: make podman.build
|
||||||
|
|
||||||
test:
|
test:
|
||||||
name: Test (${{ matrix.arch }})
|
name: Test (${{ matrix.arch }})
|
||||||
@ -134,16 +140,17 @@ jobs:
|
|||||||
- name: Test
|
- name: Test
|
||||||
env:
|
env:
|
||||||
OVERRIDE_ARCH: "${{ matrix.arch }}"
|
OVERRIDE_ARCH: "${{ matrix.arch }}"
|
||||||
GIT_URL: "${{ steps.build.outputs.git_url }}"
|
GIT_URL: "${{ needs.build.outputs.git_url }}"
|
||||||
run: make ci.container.test
|
run: make container.test
|
||||||
|
|
||||||
release:
|
release:
|
||||||
# TODO: Uncomment before merge
|
if: github.repository_owner == 'searxng' && github.ref_name == 'master'
|
||||||
# if: github.repository_owner == 'searxng'
|
|
||||||
if: false
|
|
||||||
name: Release
|
name: Release
|
||||||
runs-on: ubuntu-24.04-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
needs: test
|
needs:
|
||||||
|
- build
|
||||||
|
- test
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- if: env.DOCKERHUB_USERNAME != ''
|
- if: env.DOCKERHUB_USERNAME != ''
|
||||||
name: Checkout
|
name: Checkout
|
||||||
@ -170,6 +177,6 @@ jobs:
|
|||||||
- if: env.DOCKERHUB_USERNAME != ''
|
- if: env.DOCKERHUB_USERNAME != ''
|
||||||
name: Release
|
name: Release
|
||||||
env:
|
env:
|
||||||
GIT_URL: "${{ steps.build.outputs.git_url }}"
|
GIT_URL: "${{ needs.build.outputs.git_url }}"
|
||||||
DOCKER_TAG: "${{ steps.build.outputs.docker_tag }}"
|
DOCKER_TAG: "${{ needs.build.outputs.docker_tag }}"
|
||||||
run: make ci.container.push
|
run: make container.push
|
||||||
|
4
.github/workflows/documentation.yml
vendored
4
.github/workflows/documentation.yml
vendored
@ -24,9 +24,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
# TODO: Uncomment
|
if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
|
||||||
# if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
|
|
||||||
if: false
|
|
||||||
name: Release
|
name: Release
|
||||||
runs-on: ubuntu-24.04-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
permissions:
|
permissions:
|
||||||
|
119
.github/workflows/integration.yml
vendored
119
.github/workflows/integration.yml
vendored
@ -9,7 +9,7 @@ on:
|
|||||||
- master
|
- master
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- container-gha
|
- master
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref_name }}
|
group: ${{ github.workflow }}-${{ github.ref_name }}
|
||||||
@ -23,8 +23,6 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
# TODO: Remove this
|
|
||||||
if: false
|
|
||||||
name: Python ${{ matrix.python-version }}
|
name: Python ${{ matrix.python-version }}
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
@ -61,11 +59,14 @@ jobs:
|
|||||||
run: make V=1 ci.test
|
run: make V=1 ci.test
|
||||||
|
|
||||||
theme:
|
theme:
|
||||||
# TODO: Remove this
|
|
||||||
if: false
|
|
||||||
name: Theme
|
name: Theme
|
||||||
runs-on: ubuntu-24.04-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
steps:
|
steps:
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "${{ env.PYTHON_VERSION }}"
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@ -82,44 +83,6 @@ jobs:
|
|||||||
key: "nodejs-${{ runner.arch }}-${{ hashFiles('./.nvmrc', './package.json') }}"
|
key: "nodejs-${{ runner.arch }}-${{ hashFiles('./.nvmrc', './package.json') }}"
|
||||||
path: "./client/simple/node_modules/"
|
path: "./client/simple/node_modules/"
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: make themes.all
|
|
||||||
|
|
||||||
# TODO: Remove this
|
|
||||||
container-build:
|
|
||||||
# TODO: Uncomment
|
|
||||||
# if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
|
|
||||||
name: Build (${{ matrix.arch }})
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- arch: amd64
|
|
||||||
os: ubuntu-24.04
|
|
||||||
emulation: false
|
|
||||||
- arch: arm64
|
|
||||||
os: ubuntu-24.04-arm
|
|
||||||
emulation: false
|
|
||||||
- arch: armv7
|
|
||||||
os: ubuntu-24.04-arm
|
|
||||||
emulation: true
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
# Organization GHCR
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: "${{ env.PYTHON_VERSION }}"
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
persist-credentials: "false"
|
|
||||||
|
|
||||||
- name: Setup cache Python
|
- name: Setup cache Python
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
@ -127,72 +90,8 @@ jobs:
|
|||||||
restore-keys: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-"
|
restore-keys: "python-${{ env.PYTHON_VERSION }}-${{ runner.arch }}-"
|
||||||
path: "./local/"
|
path: "./local/"
|
||||||
|
|
||||||
- name: Setup cache container mounts
|
- name: Setup venv
|
||||||
uses: actions/cache@v4
|
run: make V=1 install
|
||||||
with:
|
|
||||||
key: "container-mounts-${{ matrix.arch }}-${{ hashFiles('./Dockerfile*') }}"
|
|
||||||
restore-keys: "container-mounts-${{ matrix.arch }}-"
|
|
||||||
path: |
|
|
||||||
/var/tmp/buildah-cache/
|
|
||||||
/var/tmp/buildah-cache-*/
|
|
||||||
|
|
||||||
- if: ${{ matrix.emulation }}
|
|
||||||
name: Setup QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Login to GHCR
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: "ghcr.io"
|
|
||||||
username: "${{ github.repository_owner }}"
|
|
||||||
password: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
env:
|
run: make themes.all
|
||||||
OVERRIDE_ARCH: "${{ matrix.arch }}"
|
|
||||||
run: make ci.container.build
|
|
||||||
|
|
||||||
# TODO: Remove this
|
|
||||||
container-test:
|
|
||||||
name: Test (${{ matrix.arch }})
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
needs: container-build
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- arch: amd64
|
|
||||||
os: ubuntu-24.04
|
|
||||||
emulation: false
|
|
||||||
- arch: arm64
|
|
||||||
os: ubuntu-24.04-arm
|
|
||||||
emulation: false
|
|
||||||
- arch: armv7
|
|
||||||
os: ubuntu-24.04-arm
|
|
||||||
emulation: true
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
# Organization GHCR
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
persist-credentials: "false"
|
|
||||||
|
|
||||||
- if: ${{ matrix.emulation }}
|
|
||||||
name: Setup QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Login to GHCR
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: "ghcr.io"
|
|
||||||
username: "${{ github.repository_owner }}"
|
|
||||||
password: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
env:
|
|
||||||
OVERRIDE_ARCH: "${{ matrix.arch }}"
|
|
||||||
run: make ci.container.test
|
|
||||||
|
4
.github/workflows/l10n.yml
vendored
4
.github/workflows/l10n.yml
vendored
@ -26,9 +26,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update:
|
update:
|
||||||
# TODO: Uncomment
|
if: github.repository_owner == 'searxng' && github.event.workflow_run.conclusion == 'success'
|
||||||
# if: github.repository_owner == 'searxng' && github.event.workflow_run.conclusion == 'success'
|
|
||||||
if: false
|
|
||||||
name: Update
|
name: Update
|
||||||
runs-on: ubuntu-24.04-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
permissions:
|
permissions:
|
||||||
|
@ -43,8 +43,6 @@ RUN apt-get update \
|
|||||||
&& apt-get install -y --no-install-recommends \
|
&& apt-get install -y --no-install-recommends \
|
||||||
# healthcheck
|
# healthcheck
|
||||||
wget \
|
wget \
|
||||||
# lxml (ARMv7)
|
|
||||||
libxslt1.1 \
|
|
||||||
# uwsgi
|
# uwsgi
|
||||||
libpcre3 \
|
libpcre3 \
|
||||||
libxml2 \
|
libxml2 \
|
||||||
|
@ -16,7 +16,7 @@ WORKDIR /usr/local/searxng/
|
|||||||
|
|
||||||
COPY ./requirements.txt ./requirements.txt
|
COPY ./requirements.txt ./requirements.txt
|
||||||
|
|
||||||
RUN --mount=type=cache,id=pip,target=$HOME/.cache/pip python -m venv ./venv \
|
RUN --mount=type=cache,id=pip,target=/root/.cache/pip python -m venv ./venv \
|
||||||
&& . ./venv/bin/activate \
|
&& . ./venv/bin/activate \
|
||||||
&& pip install -r requirements.txt \
|
&& pip install -r requirements.txt \
|
||||||
&& pip install "uwsgi~=2.0"
|
&& pip install "uwsgi~=2.0"
|
||||||
@ -45,6 +45,10 @@ FROM docker.io/library/python:3.13-slim
|
|||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends \
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
# healthcheck
|
||||||
|
wget \
|
||||||
|
# lxml (ARMv7)
|
||||||
|
libxslt1.1 \
|
||||||
# uwsgi
|
# uwsgi
|
||||||
libpcre3 \
|
libpcre3 \
|
||||||
libxml2 \
|
libxml2 \
|
||||||
@ -97,8 +101,6 @@ VOLUME $DATA_PATH
|
|||||||
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
USER searxng:searxng
|
|
||||||
|
|
||||||
HEALTHCHECK CMD wget --quiet --tries=1 --spider http://localhost:8080/healthz || exit 1
|
HEALTHCHECK CMD wget --quiet --tries=1 --spider http://localhost:8080/healthz || exit 1
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/searxng/dockerfiles/docker-entrypoint.sh"]
|
ENTRYPOINT ["/usr/local/searxng/dockerfiles/docker-entrypoint.sh"]
|
||||||
|
7
Makefile
7
Makefile
@ -77,8 +77,9 @@ test.shell:
|
|||||||
MANAGE += weblate.translations.commit weblate.push.translations
|
MANAGE += weblate.translations.commit weblate.push.translations
|
||||||
MANAGE += data.all data.traits data.useragents data.locales data.currencies
|
MANAGE += data.all data.traits data.useragents data.locales data.currencies
|
||||||
MANAGE += docs.html docs.live docs.gh-pages docs.prebuild docs.clean
|
MANAGE += docs.html docs.live docs.gh-pages docs.prebuild docs.clean
|
||||||
|
MANAGE += podman.build
|
||||||
MANAGE += docker.build docker.buildx
|
MANAGE += docker.build docker.buildx
|
||||||
MANAGE += container.build container.buildx
|
MANAGE += container.build container.test container.push
|
||||||
MANAGE += gecko.driver
|
MANAGE += gecko.driver
|
||||||
MANAGE += node.env node.env.dev node.clean
|
MANAGE += node.env node.env.dev node.clean
|
||||||
MANAGE += py.build py.clean
|
MANAGE += py.build py.clean
|
||||||
@ -88,7 +89,6 @@ MANAGE += test.yamllint test.pylint test.black test.pybabel test.unit test.cover
|
|||||||
MANAGE += themes.all themes.fix themes.test
|
MANAGE += themes.all themes.fix themes.test
|
||||||
MANAGE += static.build.commit static.build.drop static.build.restore
|
MANAGE += static.build.commit static.build.drop static.build.restore
|
||||||
MANAGE += nvm.install nvm.clean nvm.status nvm.nodejs
|
MANAGE += nvm.install nvm.clean nvm.status nvm.nodejs
|
||||||
MANAGE += ci.container.build ci.container.test ci.container.push
|
|
||||||
|
|
||||||
PHONY += $(MANAGE)
|
PHONY += $(MANAGE)
|
||||||
|
|
||||||
@ -97,9 +97,8 @@ $(MANAGE):
|
|||||||
|
|
||||||
# short hands of selected targets
|
# short hands of selected targets
|
||||||
|
|
||||||
PHONY += docs docker themes
|
PHONY += docs container themes
|
||||||
|
|
||||||
docs: docs.html
|
docs: docs.html
|
||||||
container: container.build
|
container: container.build
|
||||||
docker: container.build
|
|
||||||
themes: themes.all
|
themes: themes.all
|
||||||
|
404
manage
404
manage
@ -11,6 +11,9 @@ source "$(dirname "${BASH_SOURCE[0]}")/utils/lib.sh"
|
|||||||
# shellcheck source=utils/lib.sh
|
# shellcheck source=utils/lib.sh
|
||||||
source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_nvm.sh"
|
source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_nvm.sh"
|
||||||
|
|
||||||
|
# shellcheck source=utils/lib_sxng_container.sh
|
||||||
|
source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_sxng_container.sh"
|
||||||
|
|
||||||
# shellcheck source=utils/lib_sxng_data.sh
|
# shellcheck source=utils/lib_sxng_data.sh
|
||||||
source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_sxng_data.sh"
|
source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_sxng_data.sh"
|
||||||
|
|
||||||
@ -77,9 +80,6 @@ docs.:
|
|||||||
gh-pages : deploy on gh-pages branch
|
gh-pages : deploy on gh-pages branch
|
||||||
prebuild : build reST include files (./${DOCS_BUILD}/includes)
|
prebuild : build reST include files (./${DOCS_BUILD}/includes)
|
||||||
clean : clean documentation build
|
clean : clean documentation build
|
||||||
container. :
|
|
||||||
build : build container image
|
|
||||||
buildx : build container image with BuildKit
|
|
||||||
gecko.driver:
|
gecko.driver:
|
||||||
download & install geckodriver if not already installed (required for
|
download & install geckodriver if not already installed (required for
|
||||||
robot_tests)
|
robot_tests)
|
||||||
@ -97,14 +97,11 @@ pyenv.:
|
|||||||
OK : test if virtualenv is OK
|
OK : test if virtualenv is OK
|
||||||
format.:
|
format.:
|
||||||
python : format Python code source using black
|
python : format Python code source using black
|
||||||
ci.:
|
|
||||||
container.:
|
|
||||||
build : build container image
|
|
||||||
release : push container images to remote registry
|
|
||||||
EOF
|
EOF
|
||||||
go.help
|
go.help
|
||||||
node.help
|
node.help
|
||||||
weblate.help
|
weblate.help
|
||||||
|
container.help
|
||||||
data.help
|
data.help
|
||||||
test.help
|
test.help
|
||||||
themes.help
|
themes.help
|
||||||
@ -144,132 +141,6 @@ docker.buildx() {
|
|||||||
container.buildx
|
container.buildx
|
||||||
}
|
}
|
||||||
|
|
||||||
# Alias
|
|
||||||
docker.build() {
|
|
||||||
container.build
|
|
||||||
}
|
|
||||||
|
|
||||||
container.buildx() {
|
|
||||||
container.build buildx
|
|
||||||
}
|
|
||||||
|
|
||||||
container.build() {
|
|
||||||
pyenv.install
|
|
||||||
|
|
||||||
local parch=${OVERRIDE_ARCH:-$(uname -m)}
|
|
||||||
local container_engine
|
|
||||||
local dockerfile
|
|
||||||
local arch
|
|
||||||
local variant
|
|
||||||
local platform
|
|
||||||
|
|
||||||
# Setup arch specific
|
|
||||||
case $parch in
|
|
||||||
"X64" | "x86_64" | "amd64")
|
|
||||||
dockerfile="Dockerfile"
|
|
||||||
arch="amd64"
|
|
||||||
variant=""
|
|
||||||
platform="linux/$arch"
|
|
||||||
;;
|
|
||||||
"ARM64" | "aarch64" | "arm64")
|
|
||||||
dockerfile="Dockerfile"
|
|
||||||
arch="arm64"
|
|
||||||
variant=""
|
|
||||||
platform="linux/$arch"
|
|
||||||
;;
|
|
||||||
"ARMV7" | "armhf" | "armv7l" | "armv7")
|
|
||||||
dockerfile="Dockerfile.compat"
|
|
||||||
arch="arm"
|
|
||||||
variant="v7"
|
|
||||||
platform="linux/$arch/$variant"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
err_msg "Unsupported architecture; (PARCH=\"$parch\")"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
build_msg CONTAINER "Selected platform: $platform"
|
|
||||||
|
|
||||||
# Check if podman or docker is installed
|
|
||||||
if command -v podman &>/dev/null; then
|
|
||||||
container_engine="podman"
|
|
||||||
elif command -v docker &>/dev/null; then
|
|
||||||
container_engine="docker"
|
|
||||||
else
|
|
||||||
die 1 "podman/docker is not installed"
|
|
||||||
fi
|
|
||||||
build_msg CONTAINER "Engine: $container_engine"
|
|
||||||
|
|
||||||
# Check if git is installed
|
|
||||||
if ! command -v git &>/dev/null; then
|
|
||||||
die 1 "git is not installed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
pyenv.activate
|
|
||||||
|
|
||||||
# Check if it is a git repository
|
|
||||||
if [ ! -d .git ]; then
|
|
||||||
die 1 "This is not Git repository"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! git remote get-url origin 2>/dev/null; then
|
|
||||||
die 1 "there is no remote origin"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# This is a git repository
|
|
||||||
git update-index -q --refresh
|
|
||||||
python -m searx.version freeze
|
|
||||||
eval "$(python -m searx.version)"
|
|
||||||
|
|
||||||
# Get the last git commit id
|
|
||||||
version_gitcommit=$(echo "$VERSION_TAG" | cut -d+ -f2)
|
|
||||||
build_msg CONTAINER "Last commit: $version_gitcommit"
|
|
||||||
|
|
||||||
if [ "$container_engine" = "docker" ]; then
|
|
||||||
if [ "$1" = "buildx" ]; then
|
|
||||||
docker_builder="buildx build"
|
|
||||||
else
|
|
||||||
docker_builder="build"
|
|
||||||
warn_msg "The legacy builder is deprecated and will be removed in a future release: https://docs.docker.com/engine/deprecated/#legacy-builder-fallback"
|
|
||||||
fi
|
|
||||||
|
|
||||||
params_build_builder="$docker_builder --platform=$platform --target=builder"
|
|
||||||
params_build="$docker_builder --platform=$platform --squash"
|
|
||||||
else
|
|
||||||
params_build_builder="build --format=docker --platform=$platform --target=builder --layers --identity-label=false"
|
|
||||||
params_build="build --format=docker --platform=$platform --layers --squash-all --omit-history --identity-label=false"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Define container image org/name
|
|
||||||
# shellcheck disable=SC2001
|
|
||||||
container_image_organization="$(echo "$GIT_URL" | sed 's|.*github\.com/\([^/]*\).*|\1|' || echo "searxng")"
|
|
||||||
container_image_name="searxng"
|
|
||||||
|
|
||||||
build_msg CONTAINER "Building..."
|
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
|
||||||
"$container_engine" $params_build_builder \
|
|
||||||
--build-arg="TIMESTAMP_SETTINGS=$(git log -1 --format="%cd" --date=unix -- ./searx/settings.yml)" \
|
|
||||||
--build-arg="TIMESTAMP_UWSGI=$(git log -1 --format="%cd" --date=unix -- ./dockerfiles/uwsgi.ini)" \
|
|
||||||
--tag="localhost/$container_image_organization/$container_image_name:builder" \
|
|
||||||
--file="./$dockerfile"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
|
||||||
"$container_engine" $params_build \
|
|
||||||
--build-arg="GIT_URL=$GIT_URL" \
|
|
||||||
--build-arg="SEARXNG_GIT_VERSION=$VERSION_STRING" \
|
|
||||||
--build-arg="LABEL_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
||||||
--build-arg="LABEL_VCS_REF=$(git rev-parse HEAD)" \
|
|
||||||
--build-arg="LABEL_VCS_URL=$GIT_URL" \
|
|
||||||
--tag="localhost/$container_image_organization/$container_image_name:latest" \
|
|
||||||
--tag="localhost/$container_image_organization/$container_image_name:$DOCKER_TAG" \
|
|
||||||
--file="./$dockerfile"
|
|
||||||
)
|
|
||||||
dump_return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
# shellcheck disable=SC2119
|
# shellcheck disable=SC2119
|
||||||
gecko.driver() {
|
gecko.driver() {
|
||||||
pyenv.install
|
pyenv.install
|
||||||
@ -378,273 +249,6 @@ docs.prebuild() {
|
|||||||
dump_return $?
|
dump_return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
ci.container.build() {
|
|
||||||
if ! "$GITHUB_ACTIONS"; then
|
|
||||||
die 1 "This command is intended to be run in GitHub Actions"
|
|
||||||
fi
|
|
||||||
|
|
||||||
pyenv.install
|
|
||||||
|
|
||||||
local parch=${OVERRIDE_ARCH:-$(uname -m)}
|
|
||||||
local dockerfile
|
|
||||||
local arch
|
|
||||||
local variant
|
|
||||||
local platform
|
|
||||||
|
|
||||||
# Setup arch specific
|
|
||||||
case $parch in
|
|
||||||
"X64" | "x86_64" | "amd64")
|
|
||||||
dockerfile="Dockerfile"
|
|
||||||
arch="amd64"
|
|
||||||
variant=""
|
|
||||||
platform="linux/$arch"
|
|
||||||
;;
|
|
||||||
"ARM64" | "aarch64" | "arm64")
|
|
||||||
dockerfile="Dockerfile"
|
|
||||||
arch="arm64"
|
|
||||||
variant=""
|
|
||||||
platform="linux/$arch"
|
|
||||||
;;
|
|
||||||
"ARMV7" | "armhf" | "armv7l" | "armv7")
|
|
||||||
dockerfile="Dockerfile.compat"
|
|
||||||
arch="arm"
|
|
||||||
variant="v7"
|
|
||||||
platform="linux/$arch/$variant"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
err_msg "Unsupported architecture; (PARCH=\"$parch\")"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
build_msg CONTAINER "Selected platform: $platform"
|
|
||||||
|
|
||||||
# Check if podman is installed
|
|
||||||
if ! command -v podman &>/dev/null; then
|
|
||||||
die 1 "podman is not installed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if git is installed
|
|
||||||
if ! command -v git &>/dev/null; then
|
|
||||||
die 1 "git is not installed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
pyenv.activate
|
|
||||||
|
|
||||||
# Check if it is a git repository
|
|
||||||
if [ ! -d .git ]; then
|
|
||||||
die 1 "This is not Git repository"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! git remote get-url origin 2>/dev/null; then
|
|
||||||
die 1 "there is no remote origin"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# This is a git repository
|
|
||||||
git update-index -q --refresh
|
|
||||||
python -m searx.version freeze
|
|
||||||
eval "$(python -m searx.version)"
|
|
||||||
|
|
||||||
# Get the last git commit id
|
|
||||||
version_gitcommit=$(echo "$VERSION_TAG" | cut -d+ -f2)
|
|
||||||
build_msg CONTAINER "Last commit: $version_gitcommit"
|
|
||||||
|
|
||||||
# Define container image org/name
|
|
||||||
# shellcheck disable=SC2001
|
|
||||||
container_image_organization="$(echo "$GIT_URL" | sed 's|.*github\.com/\([^/]*\).*|\1|' || echo "searxng")"
|
|
||||||
container_image_name="searxng"
|
|
||||||
|
|
||||||
build_msg CONTAINER "Building..."
|
|
||||||
|
|
||||||
podman build --format=docker --platform="$platform" --target=builder --layers --identity-label=false \
|
|
||||||
--cache-from="ghcr.io/$container_image_organization/cache" \
|
|
||||||
--cache-to="ghcr.io/$container_image_organization/cache" \
|
|
||||||
--build-arg="TIMESTAMP_SETTINGS=$(git log -1 --format="%cd" --date=unix -- ./searx/settings.yml)" \
|
|
||||||
--build-arg="TIMESTAMP_UWSGI=$(git log -1 --format="%cd" --date=unix -- ./dockerfiles/uwsgi.ini)" \
|
|
||||||
--tag="ghcr.io/$container_image_organization/cache:$container_image_name-$arch$variant-builder" \
|
|
||||||
--file="./$dockerfile"
|
|
||||||
|
|
||||||
podman build --format=docker --platform="$platform" --layers --squash-all --omit-history --identity-label=false \
|
|
||||||
--cache-from="ghcr.io/$container_image_organization/cache" \
|
|
||||||
--cache-to="ghcr.io/$container_image_organization/cache" \
|
|
||||||
--build-arg="GIT_URL=$GIT_URL" \
|
|
||||||
--build-arg="SEARXNG_GIT_VERSION=$VERSION_STRING" \
|
|
||||||
--build-arg="LABEL_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
||||||
--build-arg="LABEL_VCS_REF=$(git rev-parse HEAD)" \
|
|
||||||
--build-arg="LABEL_VCS_URL=$GIT_URL" \
|
|
||||||
--tag="ghcr.io/$container_image_organization/cache:$container_image_name-$arch$variant" \
|
|
||||||
--file="./$dockerfile"
|
|
||||||
|
|
||||||
podman push "ghcr.io/$container_image_organization/cache:$container_image_name-$arch$variant"
|
|
||||||
|
|
||||||
# From version.py
|
|
||||||
{
|
|
||||||
echo "version_string=$VERSION_STRING"
|
|
||||||
echo "version_tag=$VERSION_TAG"
|
|
||||||
echo "docker_tag=$DOCKER_TAG"
|
|
||||||
echo "git_url=$GIT_URL"
|
|
||||||
echo "git_branch=$GIT_BRANCH"
|
|
||||||
} >>"$GITHUB_OUTPUT"
|
|
||||||
)
|
|
||||||
dump_return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
ci.container.test() {
|
|
||||||
if ! "$GITHUB_ACTIONS"; then
|
|
||||||
die 1 "This command is intended to be run in GitHub Actions"
|
|
||||||
fi
|
|
||||||
|
|
||||||
local parch=${OVERRIDE_ARCH:-$(uname -m)}
|
|
||||||
local arch
|
|
||||||
local variant
|
|
||||||
local platform
|
|
||||||
|
|
||||||
# Setup arch specific
|
|
||||||
case $parch in
|
|
||||||
"X64" | "x86_64" | "amd64")
|
|
||||||
arch="amd64"
|
|
||||||
variant=""
|
|
||||||
platform="linux/$arch"
|
|
||||||
;;
|
|
||||||
"ARM64" | "aarch64" | "arm64")
|
|
||||||
arch="arm64"
|
|
||||||
variant=""
|
|
||||||
platform="linux/$arch"
|
|
||||||
;;
|
|
||||||
"ARMV7" | "armhf" | "armv7l" | "armv7")
|
|
||||||
arch="arm"
|
|
||||||
variant="v7"
|
|
||||||
platform="linux/$arch/$variant"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
err_msg "Unsupported architecture; (PARCH=\"$parch\")"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
build_msg CONTAINER "Selected platform: $platform"
|
|
||||||
|
|
||||||
# Check if podman is installed
|
|
||||||
if ! command -v podman &>/dev/null; then
|
|
||||||
die 1 "podman is not installed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Define container image org/name
|
|
||||||
# shellcheck disable=SC2001
|
|
||||||
container_image_organization="$(echo "$GIT_URL" | sed 's|.*github\.com/\([^/]*\).*|\1|' || echo "searxng")"
|
|
||||||
container_image_name="searxng"
|
|
||||||
|
|
||||||
podman pull "ghcr.io/$container_image_organization/cache:$container_image_name-$arch$variant"
|
|
||||||
|
|
||||||
name="$container_image_name-$(date +%N)"
|
|
||||||
|
|
||||||
podman create --name="$name" --rm --timeout=60 --network="host" \
|
|
||||||
"ghcr.io/$container_image_organization/cache:$container_image_name-$arch$variant" >/dev/null
|
|
||||||
|
|
||||||
podman start "$name" >/dev/null
|
|
||||||
podman logs -f "$name" &
|
|
||||||
pid_logs=$!
|
|
||||||
|
|
||||||
# Wait until container is ready
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
curl -vf --max-time 5 "http://localhost:8080/healthz"
|
|
||||||
|
|
||||||
kill $pid_logs &>/dev/null || true
|
|
||||||
podman stop "$name" >/dev/null
|
|
||||||
)
|
|
||||||
dump_return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
ci.container.push() {
|
|
||||||
if ! "$GITHUB_ACTIONS"; then
|
|
||||||
die 1 "This command is intended to be run in GitHub Actions"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Architectures to release
|
|
||||||
local release_archs=("amd64" "arm64" "armv7")
|
|
||||||
|
|
||||||
local archs=()
|
|
||||||
local variants=()
|
|
||||||
local platforms=()
|
|
||||||
|
|
||||||
for arch in "${release_archs[@]}"; do
|
|
||||||
case $arch in
|
|
||||||
"X64" | "x86_64" | "amd64")
|
|
||||||
archs+=("amd64")
|
|
||||||
variants+=("")
|
|
||||||
platforms+=("linux/${archs[-1]}")
|
|
||||||
;;
|
|
||||||
"ARM64" | "aarch64" | "arm64")
|
|
||||||
archs+=("arm64")
|
|
||||||
variants+=("")
|
|
||||||
platforms+=("linux/${archs[-1]}")
|
|
||||||
;;
|
|
||||||
"ARMV7" | "armv7" | "armhf" | "arm")
|
|
||||||
archs+=("arm")
|
|
||||||
variants+=("v7")
|
|
||||||
platforms+=("linux/${archs[-1]}/${variants[-1]}")
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
err_msg "Unsupported architecture; (ARCH=\"${arch[-1]}\")"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Check if podman is installed
|
|
||||||
if ! command -v podman &>/dev/null; then
|
|
||||||
die 1 "podman is not installed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Define container image org/name
|
|
||||||
# shellcheck disable=SC2001
|
|
||||||
container_image_organization="$(echo "$GIT_URL" | sed 's|.*github\.com/\([^/]*\).*|\1|' || echo "searxng")"
|
|
||||||
container_image_name="searxng"
|
|
||||||
|
|
||||||
# Pull archs
|
|
||||||
for i in "${!archs[@]}"; do
|
|
||||||
podman pull "ghcr.io/$container_image_organization/$container_image_name:cache-${archs[$i]}${variants[$i]}"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Tags to release
|
|
||||||
tags=("latest")
|
|
||||||
tags+=("$DOCKER_TAG")
|
|
||||||
|
|
||||||
# Create manifests
|
|
||||||
for tag in "${tags[@]}"; do
|
|
||||||
if ! podman manifest exists "localhost/$container_image_organization/$container_image_name:$tag"; then
|
|
||||||
podman manifest create "localhost/$container_image_organization/$container_image_name:$tag"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add archs to manifest
|
|
||||||
for i in "${!archs[@]}"; do
|
|
||||||
podman manifest add \
|
|
||||||
"localhost/$container_image_organization/$container_image_name:$tag" \
|
|
||||||
"containers-storage:ghcr.io/$container_image_organization/$container_image_name:cache-${archs[$i]}${variants[$i]}"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
podman image list
|
|
||||||
|
|
||||||
# Push manifests
|
|
||||||
for tag in "${tags[@]}"; do
|
|
||||||
build_msg CONTAINER "Pushing manifest with tag: $tag"
|
|
||||||
|
|
||||||
podman manifest push \
|
|
||||||
"localhost/$container_image_organization/$container_image_name:$tag" \
|
|
||||||
"docker://docker.io/$container_image_organization/$container_image_name:$tag"
|
|
||||||
done
|
|
||||||
)
|
|
||||||
dump_return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
# shellcheck disable=SC2119
|
# shellcheck disable=SC2119
|
||||||
main() {
|
main() {
|
||||||
local _type
|
local _type
|
||||||
|
319
utils/lib_sxng_container.sh
Executable file
319
utils/lib_sxng_container.sh
Executable file
@ -0,0 +1,319 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
container.help() {
|
||||||
|
cat <<EOF
|
||||||
|
container.:
|
||||||
|
build : build container image
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
CONTAINER_IMAGE_ORGANIZATION=${GITHUB_REPOSITORY_OWNER:-"searxng"}
|
||||||
|
CONTAINER_IMAGE_NAME="searxng"
|
||||||
|
|
||||||
|
container.build() {
|
||||||
|
pyenv.install
|
||||||
|
|
||||||
|
local parch=${OVERRIDE_ARCH:-$(uname -m)}
|
||||||
|
local container_engine
|
||||||
|
local dockerfile
|
||||||
|
local arch
|
||||||
|
local variant
|
||||||
|
local platform
|
||||||
|
|
||||||
|
# Setup arch specific
|
||||||
|
case $parch in
|
||||||
|
"X64" | "x86_64" | "amd64")
|
||||||
|
dockerfile="Dockerfile"
|
||||||
|
arch="amd64"
|
||||||
|
variant=""
|
||||||
|
platform="linux/$arch"
|
||||||
|
;;
|
||||||
|
"ARM64" | "aarch64" | "arm64")
|
||||||
|
dockerfile="Dockerfile"
|
||||||
|
arch="arm64"
|
||||||
|
variant=""
|
||||||
|
platform="linux/$arch"
|
||||||
|
;;
|
||||||
|
"ARMV7" | "armhf" | "armv7l" | "armv7")
|
||||||
|
dockerfile="Dockerfile.compat"
|
||||||
|
arch="arm"
|
||||||
|
variant="v7"
|
||||||
|
platform="linux/$arch/$variant"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
err_msg "Unsupported architecture; $parch"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
info_msg "Selected platform: $platform"
|
||||||
|
|
||||||
|
# Check if podman or docker is installed
|
||||||
|
if [ "$1" = "docker" ]; then
|
||||||
|
if command -v docker &>/dev/null; then
|
||||||
|
container_engine="docker"
|
||||||
|
else
|
||||||
|
die 1 "Docker is not installed"
|
||||||
|
fi
|
||||||
|
elif [ "$1" = "podman" ]; then
|
||||||
|
if command -v podman &>/dev/null; then
|
||||||
|
container_engine="podman"
|
||||||
|
else
|
||||||
|
die 1 "Podman is not installed"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# If no explicit engine is passed, prioritize podman over docker
|
||||||
|
if command -v podman &>/dev/null; then
|
||||||
|
container_engine="podman"
|
||||||
|
elif command -v docker &>/dev/null; then
|
||||||
|
container_engine="docker"
|
||||||
|
else
|
||||||
|
die 1 "Podman/Docker is not installed"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
info_msg "Selected engine: $container_engine"
|
||||||
|
|
||||||
|
# Check if git is installed
|
||||||
|
if ! command -v git &>/dev/null; then
|
||||||
|
die 1 "Git is not installed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
pyenv.activate
|
||||||
|
|
||||||
|
# Check if it is a git repository
|
||||||
|
if [ ! -d .git ]; then
|
||||||
|
die 1 "This is not Git repository"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git remote get-url origin &>/dev/null; then
|
||||||
|
die 1 "There is no remote origin"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This is a git repository
|
||||||
|
git update-index -q --refresh
|
||||||
|
python -m searx.version freeze
|
||||||
|
eval "$(python -m searx.version)"
|
||||||
|
|
||||||
|
info_msg "Set \$VERSION_STRING: $VERSION_STRING"
|
||||||
|
info_msg "Set \$VERSION_TAG: $VERSION_TAG"
|
||||||
|
info_msg "Set \$DOCKER_TAG: $DOCKER_TAG"
|
||||||
|
info_msg "Set \$GIT_URL: $GIT_URL"
|
||||||
|
info_msg "Set \$GIT_BRANCH: $GIT_BRANCH"
|
||||||
|
|
||||||
|
if [ "$container_engine" = "podman" ]; then
|
||||||
|
params_build_builder="build --format=docker --platform=$platform --target=builder --layers --identity-label=false"
|
||||||
|
params_build="build --format=docker --platform=$platform --layers --squash-all --omit-history --identity-label=false"
|
||||||
|
else
|
||||||
|
params_build_builder="build --platform=$platform --target=builder"
|
||||||
|
params_build="build --platform=$platform --squash"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$GITHUB_ACTIONS" = "true" ]; then
|
||||||
|
params_build_builder+=" --cache-from=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache --cache-to=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache"
|
||||||
|
params_build+=" --cache-from=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache --cache-to=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache"
|
||||||
|
|
||||||
|
# Tags
|
||||||
|
params_build+=" --tag=ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant"
|
||||||
|
else
|
||||||
|
# Tags
|
||||||
|
params_build+=" --tag=localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:latest"
|
||||||
|
params_build+=" --tag=localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$DOCKER_TAG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
"$container_engine" $params_build_builder \
|
||||||
|
--build-arg="TIMESTAMP_SETTINGS=$(git log -1 --format="%cd" --date=unix -- ./searx/settings.yml)" \
|
||||||
|
--build-arg="TIMESTAMP_UWSGI=$(git log -1 --format="%cd" --date=unix -- ./dockerfiles/uwsgi.ini)" \
|
||||||
|
--tag="localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:builder" \
|
||||||
|
--file="./$dockerfile" \
|
||||||
|
.
|
||||||
|
build_msg CONTAINER "Image \"builder\" built"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
"$container_engine" $params_build \
|
||||||
|
--build-arg="GIT_URL=$GIT_URL" \
|
||||||
|
--build-arg="SEARXNG_GIT_VERSION=$VERSION_STRING" \
|
||||||
|
--build-arg="LABEL_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
||||||
|
--build-arg="LABEL_VCS_REF=$(git rev-parse HEAD)" \
|
||||||
|
--build-arg="LABEL_VCS_URL=$GIT_URL" \
|
||||||
|
--file="./$dockerfile" \
|
||||||
|
.
|
||||||
|
build_msg CONTAINER "Image built"
|
||||||
|
|
||||||
|
if [ "$GITHUB_ACTIONS" = "true" ]; then
|
||||||
|
"$container_engine" push "ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant"
|
||||||
|
|
||||||
|
# Output to GHA
|
||||||
|
{
|
||||||
|
echo "version_string=$VERSION_STRING"
|
||||||
|
echo "version_tag=$VERSION_TAG"
|
||||||
|
echo "docker_tag=$DOCKER_TAG"
|
||||||
|
echo "git_url=$GIT_URL"
|
||||||
|
echo "git_branch=$GIT_BRANCH"
|
||||||
|
} >>"$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
dump_return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
container.test() {
|
||||||
|
if ! "$GITHUB_ACTIONS"; then
|
||||||
|
die 1 "This command is intended to be run in GitHub Actions"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local parch=${OVERRIDE_ARCH:-$(uname -m)}
|
||||||
|
local arch
|
||||||
|
local variant
|
||||||
|
local platform
|
||||||
|
|
||||||
|
# Setup arch specific
|
||||||
|
case $parch in
|
||||||
|
"X64" | "x86_64" | "amd64")
|
||||||
|
arch="amd64"
|
||||||
|
variant=""
|
||||||
|
platform="linux/$arch"
|
||||||
|
;;
|
||||||
|
"ARM64" | "aarch64" | "arm64")
|
||||||
|
arch="arm64"
|
||||||
|
variant=""
|
||||||
|
platform="linux/$arch"
|
||||||
|
;;
|
||||||
|
"ARMV7" | "armhf" | "armv7l" | "armv7")
|
||||||
|
arch="arm"
|
||||||
|
variant="v7"
|
||||||
|
platform="linux/$arch/$variant"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
err_msg "Unsupported architecture; (PARCH=\"$parch\")"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
build_msg CONTAINER "Selected platform: $platform"
|
||||||
|
|
||||||
|
# Check if podman is installed
|
||||||
|
if ! command -v podman &>/dev/null; then
|
||||||
|
die 1 "podman is not installed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
|
||||||
|
podman pull "ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant"
|
||||||
|
|
||||||
|
name="$CONTAINER_IMAGE_NAME-$(date +%N)"
|
||||||
|
|
||||||
|
podman create --name="$name" --rm --timeout=60 --network="host" \
|
||||||
|
"ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-$arch$variant" >/dev/null
|
||||||
|
|
||||||
|
podman start "$name" >/dev/null
|
||||||
|
podman logs -f "$name" &
|
||||||
|
pid_logs=$!
|
||||||
|
|
||||||
|
# Wait until container is ready
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
curl -vf --max-time 5 "http://localhost:8080/healthz"
|
||||||
|
|
||||||
|
kill $pid_logs &>/dev/null || true
|
||||||
|
podman stop "$name" >/dev/null
|
||||||
|
)
|
||||||
|
dump_return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
container.push() {
|
||||||
|
if ! "$GITHUB_ACTIONS"; then
|
||||||
|
die 1 "This command is intended to be run in GitHub Actions"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Architectures to release
|
||||||
|
local release_archs=("amd64" "arm64" "armv7")
|
||||||
|
|
||||||
|
local archs=()
|
||||||
|
local variants=()
|
||||||
|
local platforms=()
|
||||||
|
|
||||||
|
for arch in "${release_archs[@]}"; do
|
||||||
|
case $arch in
|
||||||
|
"X64" | "x86_64" | "amd64")
|
||||||
|
archs+=("amd64")
|
||||||
|
variants+=("")
|
||||||
|
platforms+=("linux/${archs[-1]}")
|
||||||
|
;;
|
||||||
|
"ARM64" | "aarch64" | "arm64")
|
||||||
|
archs+=("arm64")
|
||||||
|
variants+=("")
|
||||||
|
platforms+=("linux/${archs[-1]}")
|
||||||
|
;;
|
||||||
|
"ARMV7" | "armv7" | "armhf" | "arm")
|
||||||
|
archs+=("arm")
|
||||||
|
variants+=("v7")
|
||||||
|
platforms+=("linux/${archs[-1]}/${variants[-1]}")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
err_msg "Unsupported architecture; (ARCH=\"${arch[-1]}\")"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check if podman is installed
|
||||||
|
if ! command -v podman &>/dev/null; then
|
||||||
|
die 1 "podman is not installed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Pull archs
|
||||||
|
for i in "${!archs[@]}"; do
|
||||||
|
podman pull "ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-${archs[$i]}${variants[$i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Tags to release
|
||||||
|
tags=("latest")
|
||||||
|
tags+=("$DOCKER_TAG")
|
||||||
|
|
||||||
|
# Create manifests
|
||||||
|
for tag in "${tags[@]}"; do
|
||||||
|
if ! podman manifest exists "localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag"; then
|
||||||
|
podman manifest create "localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add archs to manifest
|
||||||
|
for i in "${!archs[@]}"; do
|
||||||
|
podman manifest add \
|
||||||
|
"localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag" \
|
||||||
|
"containers-storage:ghcr.io/$CONTAINER_IMAGE_ORGANIZATION/cache:$CONTAINER_IMAGE_NAME-${archs[$i]}${variants[$i]}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
podman image list
|
||||||
|
|
||||||
|
# Push manifests
|
||||||
|
for tag in "${tags[@]}"; do
|
||||||
|
build_msg CONTAINER "Pushing manifest with tag: $tag"
|
||||||
|
|
||||||
|
podman manifest push \
|
||||||
|
"localhost/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag" \
|
||||||
|
"docker://docker.io/$CONTAINER_IMAGE_ORGANIZATION/$CONTAINER_IMAGE_NAME:$tag"
|
||||||
|
done
|
||||||
|
)
|
||||||
|
dump_return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
# Alias
|
||||||
|
podman.build() {
|
||||||
|
container.build podman
|
||||||
|
}
|
||||||
|
|
||||||
|
# Alias
|
||||||
|
docker.build() {
|
||||||
|
container.build docker
|
||||||
|
}
|
||||||
|
|
||||||
|
# Alias
|
||||||
|
docker.buildx() {
|
||||||
|
container.build docker
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user