-
Notifications
You must be signed in to change notification settings - Fork 38
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 2 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" |
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. Thank you for the suggestion. It's neat tech. It shifts some work from release engineering over to grooming our PR titles, descriptions and labels... which I should probably do more of anyways. But I'm not sure I can add Release Drafter to the org/repo. I'm not keen on trying to do this for a project that we update so infrequently. If we do go for it, then I'd want to add it to all of our projects in a consistent way. I'm not ready to commit to that. At least for now, please remove this from this PR. |
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 |
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. This is nice. It would be very good to have CI. |
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 |
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. Our existing CI to build/publish docker images is done from an internal Jenkins and publishes to the Docker Hub registry. I have mixed feelings about publishing a cvdupdate container, let alone publishing to a different registry. Then again, this appears to be really simple, and easy to maintain. I have very mixed feelings. |
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 }} |
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. As mentioned above, I am not ready to commit to Release Drafter for all our projects, and am not interested in adopting it just for cvdupdate, which we rarely update. |
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 | ||
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 am curious to know why you suggested this change. I believe it is better with |
||
|
||
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.
The dpendabot.yml Seems good to me.