-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
adjust Dockerfile & entrypoint and add Dependabot, CI & docker release #51
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,10 @@ | ||
__pycache__ | ||
.mypy_cache | ||
.pytest_cache | ||
.vscode | ||
cvdupdate.egg-info | ||
/build | ||
/dist | ||
/tests | ||
.github | ||
__pycache__ | ||
.git | ||
.github | ||
.mypy_cache | ||
.pytest_cache | ||
.vscode | ||
*cvdupdate.egg-info | ||
/build | ||
/dist | ||
/tests |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
--- | ||
version: 2 | ||
updates: | ||
- package-ecosystem: "docker" | ||
directory: "/" | ||
schedule: | ||
interval: "weekly" | ||
time: "09:00" | ||
timezone: "Europe/Berlin" | ||
|
||
- package-ecosystem: "github-actions" | ||
directory: "/" | ||
schedule: | ||
interval: "weekly" | ||
time: "09:00" | ||
timezone: "Europe/Berlin" | ||
|
||
- package-ecosystem: "pip" | ||
directory: "/" | ||
schedule: | ||
interval: "weekly" | ||
time: "09:00" | ||
timezone: "Europe/Berlin" | ||
|
||
- package-ecosystem: "pip" | ||
directory: "/cvdupdate" | ||
schedule: | ||
interval: "weekly" | ||
time: "09:00" | ||
timezone: "Europe/Berlin" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
name-template: '$RESOLVED_VERSION' | ||
tag-template: '$RESOLVED_VERSION' | ||
categories: | ||
- title: '🚀 Features' | ||
labels: | ||
- 'feature' | ||
- 'enhancement' | ||
- title: '🐛 Bug Fixes' | ||
labels: | ||
- 'fix' | ||
- 'bugfix' | ||
- 'bug' | ||
- title: '🧹 Maintenance' | ||
labels: | ||
- 'chore' | ||
- 'dependencies' | ||
version-resolver: | ||
major: | ||
labels: | ||
- 'feature' | ||
minor: | ||
labels: | ||
- 'enhancement' | ||
patch: | ||
labels: | ||
- 'fix' | ||
- 'bugfix' | ||
- 'bug' | ||
- 'chore' | ||
- 'dependencies' | ||
default: patch | ||
template: | | ||
## Changes | ||
|
||
$CHANGES | ||
|
||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...$RESOLVED_VERSION |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
name: ci | ||
|
||
on: | ||
pull_request: | ||
|
||
jobs: | ||
docker-build: | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- name: Checkout Code | ||
uses: actions/checkout@v3 | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v2 | ||
|
||
- name: Docker metadata action | ||
id: meta | ||
uses: docker/metadata-action@v4 | ||
with: | ||
images: | ||
cvdupdate-local | ||
tags: | | ||
type=raw,latest | ||
|
||
- name: Build Dockerimage | ||
id: docker_build | ||
uses: docker/build-push-action@v4 | ||
with: | ||
context: . | ||
file: ./Dockerfile | ||
labels: ${{ steps.meta.outputs.labels }} | ||
outputs: type=docker,dest=/tmp/cvdupdate-local.tar | ||
platforms: linux/amd64 | ||
push: false | ||
tags: ${{ steps.meta.outputs.tags }} | ||
|
||
- name: Run Dockerimage | ||
run: | | ||
docker load --input /tmp/cvdupdate-local.tar | ||
docker run -d --net=host cvdupdate-local serve | ||
sleep 30 | ||
curl --fail --silent --output /dev/null http://localhost:8000/main.cvd |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
name: docker-release | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
tags: | ||
- '*' | ||
schedule: | ||
- cron: '0 0 * * *' | ||
|
||
jobs: | ||
docker-build-push: | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- name: Checkout Code | ||
uses: actions/checkout@v3 | ||
|
||
- name: Set up QEMU | ||
uses: docker/setup-qemu-action@v2 | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v2 | ||
|
||
- name: Login to GitHub Container Registry | ||
uses: docker/login-action@v2 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.repository_owner }} | ||
|
||
- name: Docker metadata action | ||
id: meta | ||
uses: docker/metadata-action@v4 | ||
with: | ||
images: | | ||
ghcr.io/${{ github.repository_owner }}/cvdupdate | ||
tags: | | ||
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }} | ||
type=raw,value={{date 'YYYYMMDD-HHmmss' tz='Europe/Berlin'}},enable=${{ github.ref == format('refs/heads/{0}', 'main') }} | ||
type=ref,event=tag | ||
type=semver,pattern={{version}} | ||
type=semver,pattern={{major}}.{{minor}} | ||
type=semver,pattern={{major}} | ||
|
||
- name: Build and push | ||
id: docker_build | ||
uses: docker/build-push-action@v4 | ||
with: | ||
context: . | ||
file: ./Dockerfile | ||
labels: ${{ steps.meta.outputs.labels }} | ||
platforms: linux/amd64,linux/arm64 | ||
push: true | ||
tags: ${{ steps.meta.outputs.tags }} | ||
|
||
- name: Image digest | ||
run: echo ${{ steps.docker_build.outputs.digest }} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
name: Release Drafter | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
types: [opened, reopened, synchronize] | ||
|
||
permissions: | ||
contents: read | ||
|
||
jobs: | ||
update_release_draft: | ||
permissions: | ||
contents: write | ||
pull-requests: write | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- uses: release-drafter/release-drafter@v5 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,24 @@ | ||
FROM python:3-slim | ||
RUN apt-get -y update \ | ||
&& apt-get -y --no-install-recommends install cron gosu \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
COPY . /dist | ||
RUN pip install --no-cache-dir /dist | ||
ENTRYPOINT [ "/dist/scripts/docker-entrypoint.sh" ] | ||
FROM python:3.12.0b1-slim | ||
|
||
WORKDIR /cvdupdate | ||
|
||
RUN apt-get -y update && \ | ||
apt-get -y --no-install-recommends install cron sudo && \ | ||
apt-get -y clean && \ | ||
rm -rf /var/lib/apt/lists/* && \ | ||
useradd --no-create-home --home-dir /cvdupdate --uid 1000 cvdupdate && \ | ||
echo '30 */4 * * * /usr/local/bin/cvdupdate update > /proc/1/fd/1 2>&1' >> /etc/cron.d/cvdupdate && \ | ||
echo '@reboot /usr/local/bin/cvdupdate update >/proc/1/fd/1 2>/proc/1/fd/2' >> /etc/cron.d/cvdupdate && \ | ||
crontab -u cvdupdate /etc/cron.d/cvdupdate && \ | ||
echo "cvdupdate\tALL=(ALL:ALL) NOPASSWD: /usr/sbin/cron" >> /etc/sudoers | ||
|
||
COPY . . | ||
|
||
RUN pip install --no-cache-dir . && \ | ||
chown cvdupdate:cvdupdate -R /cvdupdate | ||
|
||
USER cvdupdate:cvdupdate | ||
|
||
RUN cvd update | ||
|
||
ENTRYPOINT [ "./scripts/docker-entrypoint.sh" ] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,41 +1,18 @@ | ||
#!/bin/bash | ||
USER_ID="${USER_ID:-0}" | ||
# | ||
# cvdupdate & cron entrypoint | ||
# | ||
|
||
set -e | ||
|
||
SCRIPT_PATH=$(readlink -f "$0") | ||
echo "ClamAV Private Database Mirror Updater Cron ${SCRIPT_PATH}" | ||
if [ "${USER_ID}" -ne "0" ]; then | ||
echo "Creating user with ID ${USER_ID}" | ||
useradd --create-home --home-dir /cvdupdate --uid "${USER_ID}" cvdupdate | ||
chown -R "${USER_ID}" /cvdupdate | ||
gosu cvdupdate cvdupdate config set --logdir /cvdupdate/logs | ||
gosu cvdupdate cvdupdate config set --dbdir /cvdupdate/database | ||
else | ||
mkdir -p /cvdupdate/{logs,database} | ||
cvdupdate config set --logdir /cvdupdate/logs | ||
cvdupdate config set --dbdir /cvdupdate/database | ||
fi | ||
|
||
if [ $# -eq 0 ]; then | ||
set -e | ||
if [ $# -eq 0 ]; then | ||
echo "ClamAV Private Database Mirror Updater Cron ${SCRIPT_PATH}" | ||
|
||
echo "Adding crontab entry" | ||
if [ "${USER_ID}" -ne "0" ]; then | ||
crontab -l | { | ||
cat | ||
echo "${CRON:-"30 */4 * * *"} /usr/sbin/gosu cvdupdate /usr/local/bin/cvdupdate update >/proc/1/fd/1 2>/proc/1/fd/2" | ||
echo "@reboot /usr/sbin/gosu cvdupdate /usr/local/bin/cvdupdate update >/proc/1/fd/1 2>/proc/1/fd/2" | ||
} | crontab - | ||
else | ||
crontab -l | { | ||
cat | ||
echo "${CRON:-"30 */4 * * *"} /usr/local/bin/cvdupdate update >/proc/1/fd/1 2>/proc/1/fd/2" | ||
echo "@reboot /usr/local/bin/cvdupdate update >/proc/1/fd/1 2>/proc/1/fd/2" | ||
} | crontab - | ||
fi | ||
cron -f | ||
sudo cron -f | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't have a strong opinion on using gosu versus sudo. But it's the sort of change that someone (at least the person who added gosu to begin with) will be upset about. It seems to me that sudo or gosu are necessary in order for cvdupdate to modify any user owned mounted directory. Sadly, we can't just strip them out and run without root privs. I'm not comfortable with my current insight into how this works and sudo vs gosu in order to bless/merge this. Can someone smarter than me please give me a breakdown on why I should/shouldn't accept the change to use sudo? |
||
else | ||
if [ "${USER_ID}" -ne "0" ]; then | ||
exec gosu cvdupdate "$@" | ||
else | ||
exec "$@" | ||
fi | ||
echo "ClamAV Private Database Mirror Updater "$@" ${SCRIPT_PATH}" | ||
|
||
cvdupdate "$@" | ||
fi |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am curious to know why you suggested this change. I believe it is better with
python:3-slim
. Using a fine-grain image tag will be more work for maintenance, or else will leave people stuck on an unmaintained tag.