Compare commits

..

No commits in common. "master" and "v0.1.0" have entirely different histories.

13 changed files with 493 additions and 313 deletions

400
.drone.yml Normal file

@ -0,0 +1,400 @@
---
kind: pipeline
type: kubernetes
name: linter
platform:
os: linux
arch: amd64
steps:
- name: markdown lint
commands:
- markdownlint *.md
image: docker.io/volkerraschek/markdownlint:0.28.1
resources:
limits:
cpu: 50
memory: 50M
- name: email-notification
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
image: docker.io/drillster/drone-email:latest
resources:
limits:
cpu: 50
memory: 25M
when:
status:
- changed
- failure
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: docker
name: latest-amd64
platform:
os: linux
arch: amd64
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: false
tags: latest-amd64
repo: volkerraschek/fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
volumes:
- name: docker_socket
path: /var/run/docker.sock
when:
branch:
- master
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: docker
name: latest-armv7
platform:
os: linux
arch: arm
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: false
tags: latest-armv7
repo: volkerraschek/fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
when:
branch:
- master
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
volumes:
- name: docker_socket
path: /var/run/docker.sock
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: kubernetes
name: latest-manifest
steps:
- name: build-manifest
image: plugins/manifest
settings:
auto_tag: false
ignore_missing: true
spec: manifest.tmpl
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
- name: notify
image: docker.io/drillster/drone-email:latest
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
resources:
limits:
cpu: 50
memory: 25M
when:
status:
- changed
- failure
depends_on:
- latest-amd64
- latest-armv7
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: docker
name: tagged-amd64
platform:
os: linux
arch: amd64
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: true
auto_tag_suffix: amd64
repo: volkerraschek/fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
volumes:
- name: docker_socket
path: /var/run/docker.sock
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
trigger:
event:
- tag
repo:
- volker.raschek/fetchmail-docker
---
kind: pipeline
type: docker
name: tagged-armv7
platform:
os: linux
arch: arm
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: true
auto_tag_suffix: armv7
repo: volkerraschek/fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
volumes:
- name: docker_socket
path: /var/run/docker.sock
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
trigger:
event:
- tag
repo:
- volker.raschek/fetchmail-docker
---
kind: pipeline
type: kubernetes
name: tagged-manifest
steps:
- name: build-manifest
image: plugins/manifest
settings:
auto_tag: true
ignore_missing: true
spec: manifest.tmpl
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
- name: notify
image: docker.io/drillster/drone-email:latest
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
resources:
limits:
cpu: 50
memory: 25M
when:
status:
- changed
- failure
depends_on:
- tagged-amd64
- tagged-armv7
trigger:
event:
- tag
repo:
- volker.raschek/fetchmail-docker
---
kind: pipeline
type: kubernetes
name: sync
platform:
os: linux
arch: amd64
steps:
- name: github
image: docker.io/appleboy/drone-git-push:latest
resources:
limits:
cpu: 50
memory: 25M
settings:
branch: master
remote: ssh://git@github.com/volker-raschek/fetchmail-docker.git
force: true
ssh_key:
from_secret: ssh_key
- name: email-notification
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
image: docker.io/drillster/drone-email:latest
resources:
limits:
cpu: 50
memory: 25M
when:
status:
- changed
- failure
trigger:
event:
- push
repo:
- volker.raschek/fetchmail-docker

@ -1,49 +0,0 @@
name: Build
on:
pull_request:
types:
- opened
- reopened
- synchronize
push:
branches:
- master
workflow_dispatch: {}
jobs:
build-arm64:
runs-on: ubuntu-latest-arm64
steps:
- uses: actions/checkout@v4.2.2
- uses: docker/setup-qemu-action@v3.6.0
- uses: docker/setup-buildx-action@v3.10.0
- name: Build image
run: |
TAG=latest
docker buildx build \
--platform linux/arm64 \
--file Dockerfile \
--provenance false \
--tag git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG}-arm64 \
.
build-amd64:
runs-on: ubuntu-latest-amd64
steps:
- uses: actions/checkout@v4.2.2
- uses: docker/setup-qemu-action@v3.6.0
- uses: docker/setup-buildx-action@v3.10.0
- name: Build image
run: |
TAG=latest
docker buildx build \
--platform linux/amd64 \
--file Dockerfile \
--provenance false \
--tag git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG}-amd64 \
.

@ -1,22 +0,0 @@
name: 'Lint Markdown files'
on:
pull_request:
types:
- opened
- reopened
- synchronize
push:
branches:
- master
workflow_dispatch: {}
jobs:
markdown-lint:
runs-on:
- ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: DavidAnson/markdownlint-cli2-action@v19.1.0
with:
globs: '**/*.md'

@ -1,99 +0,0 @@
name: Release
on:
push:
tags:
- "**"
jobs:
push-arm64:
runs-on: ubuntu-latest-arm64
steps:
- uses: actions/checkout@v4.2.2
- uses: docker/setup-qemu-action@v3.6.0
- uses: docker/setup-buildx-action@v3.10.0
- uses: docker/login-action@v3.4.0
with:
registry: git.cryptic.systems
username: ${{ github.repository_owner }}
password: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }}
- name: Build and push image
run: |
TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm')
docker buildx build \
--file Dockerfile \
--platform linux/arm64 \
--provenance false \
--push \
--tag git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG}-arm64 \
.
push-amd64:
runs-on: ubuntu-latest-amd64
steps:
- uses: actions/checkout@v4.2.2
- uses: docker/setup-qemu-action@v3.6.0
- uses: docker/setup-buildx-action@v3.10.0
- uses: docker/login-action@v3.4.0
with:
registry: git.cryptic.systems
username: ${{ github.repository_owner }}
password: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }}
- name: Build and push image
run: |
TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm')
docker buildx build \
--file Dockerfile \
--platform linux/amd64 \
--provenance false \
--push \
--tag git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG}-amd64 \
.
push-manifest:
runs-on: ubuntu-latest
needs:
- push-arm64
- push-amd64
steps:
- uses: docker/login-action@v3.4.0
with:
registry: git.cryptic.systems
username: ${{ github.repository_owner }}
password: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }}
- name: Create and push manifest
run: |
TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm')
docker manifest create git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG} \
--amend git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG}-amd64 \
--amend git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG}-arm64
docker manifest push git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG}
sync-to-hub-docker-io:
needs:
- push-manifest
runs-on: ubuntu-latest
steps:
- name: Copy images to docker.io
run: |
TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm')
apt-get update --yes
apt-get install --yes skopeo
skopeo copy \
--all \
--dest-password ${{ secrets.DOCKER_IO_PASSWORD }} \
--dest-username ${{ secrets.DOCKER_IO_USERNAME }} \
--src-password ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }} \
--src-username volker.raschek \
docker://git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:${TAG} \
docker://docker.io/volkerraschek/postfixadmin-fetchmail:${TAG}

@ -1,22 +0,0 @@
name: Update Docker Hub Description
on:
push:
branches:
- master
paths:
- README.md
workflow_dispatch: {}
jobs:
update-description-on-hub-docker-io:
runs-on:
- ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: peter-evans/dockerhub-description@v4.0.2
with:
username: ${{ secrets.DOCKER_IO_USERNAME }}
password: ${{ secrets.DOCKER_IO_PASSWORD }}
repository: volkerraschek/postfixadmin-fetchmail
readme-filepath: README.md

@ -45,17 +45,19 @@ MD012:
# MD013/line-length - Line length # MD013/line-length - Line length
MD013: MD013:
# Number of characters # Number of characters
line_length: 120 line_length: 80
# Number of characters for headings # Number of characters for headings
heading_line_length: 120 heading_line_length: 80
# Number of characters for code blocks # Number of characters for code blocks
code_block_line_length: 120 code_block_line_length: 80
# Include code blocks # Include code blocks
code_blocks: false code_blocks: false
# Include tables # Include tables
tables: false tables: false
# Include headings # Include headings
headings: true headings: true
# Include headings
headers: true
# Strict length checking # Strict length checking
strict: false strict: false
# Stern length checking # Stern length checking
@ -68,6 +70,11 @@ MD022:
# Blank lines below heading # Blank lines below heading
lines_below: 1 lines_below: 1
# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
MD024:
# Only check sibling headings
allow_different_nesting: true
# MD025/single-title/single-h1 - Multiple top-level headings in the same document # MD025/single-title/single-h1 - Multiple top-level headings in the same document
MD025: MD025:
# Heading level # Heading level
@ -122,6 +129,7 @@ MD041:
MD044: MD044:
# List of proper names # List of proper names
names: [] names: []
# - some-thing
# Include code blocks # Include code blocks
code_blocks: false code_blocks: false

@ -1,28 +1,12 @@
FROM docker.io/library/alpine:3.21.3 FROM docker.io/library/alpine:3.11.2
# The file /etc/apk/repositories contains a list of the apk repositories. By
# default contains this file a list of the stable repositories pointing to the
# alpine version.
#
# Some perl packages are not part of the stable repositories. For this reason
# are the repositories switched to edge to access directly the latest versions
# of this apk packages.
#
# Using stable and edge at the same time is not allowed. For more information,
# take a look into the documentation of the edge repository.
#
# https://wiki.alpinelinux.org/wiki/Repositories#Edge
RUN echo "https://dl-cdn.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories
RUN echo "https://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
# Install packages
RUN apk upgrade && \
apk add --update perl perl-lockfile-simple perl-dbi perl-dbd-pg perl-dbd-mysql fetchmail
RUN echo "http://dl-3.alpinelinux.org/alpine/edge/testing/" >> /etc/apk/repositories
RUN apk add --update perl perl-lockfile-simple perl-dbi perl-dbd-pg perl-dbd-mysql fetchmail
RUN mkdir --parents /run/fetchmail RUN mkdir --parents /run/fetchmail
COPY --chown=fetchmail:fetchmail fetchmail.pl /usr/local/bin/fetchmail.pl COPY --chown=fetchmail:fetchmail fetchmail.pl /usr/local/bin/fetchmail.pl
USER fetchmail USER fetchmail
ENTRYPOINT [ "/usr/bin/perl" ]
CMD [ "/usr/local/bin/fetchmail.pl" ] CMD [ "/usr/local/bin/fetchmail.pl" ]

@ -1,42 +1,44 @@
# PODMAN_BIN's and tools # CONTAINER_RUNTIME
PODMAN_BIN?=$(shell which podman) # The CONTAINER_RUNTIME variable will be used to specified the path to a
# container runtime. This is needed to start and run a container image.
CONTAINER_RUNTIME?=$(shell which docker)
# FETCHMAIL_IMAGE # FETCHMAIL_IMAGE_REGISTRY_NAME
FETCHMAIL_IMAGE_REGISTRY_HOST?=git.cryptic.systems # Defines the name of the new container to be built using several variables.
FETCHMAIL_IMAGE_REPOSITORY?=volker.raschek/postfixadmin-fetchmail FETCHMAIL_IMAGE_REGISTRY_NAME:=docker.io
FETCHMAIL_IMAGE_REGISTRY_USER:=volkerraschek
FETCHMAIL_IMAGE_NAMESPACE?=${FETCHMAIL_IMAGE_REGISTRY_USER}
FETCHMAIL_IMAGE_NAME:=fetchmail
FETCHMAIL_IMAGE_VERSION?=latest FETCHMAIL_IMAGE_VERSION?=latest
FETCHMAIL_IMAGE_FULLY_QUALIFIED=${FETCHMAIL_IMAGE_REGISTRY_HOST}/${FETCHMAIL_IMAGE_REPOSITORY}:${FETCHMAIL_IMAGE_VERSION} FETCHMAIL_IMAGE_FULLY_QUALIFIED=${FETCHMAIL_IMAGE_REGISTRY_NAME}/${FETCHMAIL_IMAGE_NAMESPACE}/${FETCHMAIL_IMAGE_NAME}:${FETCHMAIL_IMAGE_VERSION}
FETCHMAIL_IMAGE_UNQUALIFIED=${FETCHMAIL_IMAGE_NAMESPACE}/${FETCHMAIL_IMAGE_NAME}:${FETCHMAIL_IMAGE_VERSION}
# BUILD CONTAINER IMAGE # BUILD CONTAINER IMAGE
# ============================================================================== # ==============================================================================
PHONY:=container-image/build PHONY:=container-image/build
container-image/build: container-image/build:
${PODMAN_BIN} build \ ${CONTAINER_RUNTIME} build \
--file Dockerfile \ --file Dockerfile \
--no-cache \ --no-cache \
--pull \ --pull \
--tag ${FETCHMAIL_IMAGE_FULLY_QUALIFIED} \ --tag ${FETCHMAIL_IMAGE_FULLY_QUALIFIED} \
--tag ${FETCHMAIL_IMAGE_UNQUALIFIED} \
. .
# DELETE CONTAINER IMAGE # DELETE CONTAINER IMAGE
# ============================================================================== # ==============================================================================
PHONY:=container-image/delete PHONY:=container-image/delete
container-image/delete: container-image/delete:
- ${PODMAN_BIN} image rm ${FETCHMAIL_IMAGE_FULLY_QUALIFIED} - ${CONTAINER_RUNTIME} image rm ${FETCHMAIL_IMAGE_FULLY_QUALIFIED} ${FETCHMAIL_IMAGE_UNQUALIFIED}
- ${CONTAINER_RUNTIME} image rm ${BASE_IMAGE_FULL}
# PUSH CONTAINER IMAGE # PUSH CONTAINER IMAGE
# ============================================================================== # ==============================================================================
PHONY+=container-image/push PHONY+=container-image/push
container-image/push: container-image/push:
echo ${FETCHMAIL_IMAGE_REGISTRY_PASSWORD} | ${PODMAN_BIN} login ${FETCHMAIL_IMAGE_REGISTRY_HOST} --username ${FETCHMAIL_IMAGE_REGISTRY_USER} --password-stdin echo ${FETCHMAIL_IMAGE_REGISTRY_PASSWORD} | ${CONTAINER_RUNTIME} login ${FETCHMAIL_IMAGE_REGISTRY_NAME} --username ${FETCHMAIL_IMAGE_REGISTRY_USER} --password-stdin
${PODMAN_BIN} push ${FETCHMAIL_IMAGE_FULLY_QUALIFIED} ${CONTAINER_RUNTIME} push ${FETCHMAIL_IMAGE_FULLY_QUALIFIED}
${PODMAN_BIN} logout ${FETCHMAIL_IMAGE_REGISTRY_HOST}
# PUSH CONTAINER IMAGE TO DOCKER
# ==============================================================================
PHONY+=container-image/push-to-docker-daemon
container-image/push-to-docker-daemon:
${PODMAN_BIN} push ${FETCHMAIL_IMAGE_FULLY_QUALIFIED} docker-daemon:${FETCHMAIL_IMAGE_FULLY_QUALIFIED}
# PHONY # PHONY
# ============================================================================== # ==============================================================================

@ -1,19 +1,21 @@
# PostfixAdmin's fetchmail # fetchmail-docker
[![Docker Pulls](https://img.shields.io/docker/pulls/volkerraschek/postfixadmin-fetchmail)](https://hub.docker.com/r/volkerraschek/postfixadmin-fetchmail) [![Build Status](https://drone.cryptic.systems/api/badges/volker.raschek/fetchmail-docker/status.svg)](https://drone.cryptic.systems/volker.raschek/fetchmail-docker)
[![Docker Pulls](https://img.shields.io/docker/pulls/volkerraschek/fetchmail)](https://hub.docker.com/r/volkerraschek/fetchmail)
This project contains all sources to build the container image This project contains all sources to build the container image
`git.cryptic.systems/volker.raschek/postfixadmin-fetchmail`. The primary goal of the image is to fetch mails from `docker.io/volkerraschek/fetchmail`. The primary goal of the image is to fetch
external servers and forward them to on local running mail server. mails from external servers and forward them to on local running mail server.
The configuration file will be automatically generated based on information from a supported database backend of The configuration file will be automatically generated based on information from
[postfixadmin](https://github.com/postfixadmin/postfixadmin). The information are stored in the table `fetchmail` of the a database. As table the fetchmail table from the schema of
database scheme of PostfixAdmin. [postfixadmin](https://github.com/postfixadmin/postfixadmin) is expected.
## Usage ## Usage
Possible database types are `my` for MySQL and `Pg` for postgres. Make sure that the database and the SMTP server are Possible database types are `my` for MySQL and `Pg` for postgres. Make sure that
accessible. Otherwise, adjust the enclosed docker-compose or docker command accordingly. Alternatively you can use the database and the SMTP server are accessible. Otherwise, adjust the enclosed
docker-compose or docker command accordingly. Alternatively you can use
docker-compose in addition to the docker commands. docker-compose in addition to the docker commands.
### PostgreSQL ### PostgreSQL
@ -23,12 +25,11 @@ $ docker run \
--rm \ --rm \
--env DATABASE_TYPE: Pg \ --env DATABASE_TYPE: Pg \
--env DATABASE_HOST: postgres \ --env DATABASE_HOST: postgres \
--env DATABASE_PORT: 5432 \
--env DATABASE_NAME: postgres \ --env DATABASE_NAME: postgres \
--env DATABASE_USER: fetchmail \ --env DATABASE_USER: fetchmail \
--env DATABASE_PASSWORD: MySecretPassword \ --env DATABASE_PASSWORD: MySecretPassword \
--network host \ --network host \
git.cryptic.systems/volker.raschek/fetchmail:latest volkerraschek/fetchmail:latest
``` ```
### MySQL ### MySQL
@ -38,68 +39,41 @@ $ docker run \
--rm \ --rm \
--env DATABASE_TYPE: my \ --env DATABASE_TYPE: my \
--env DATABASE_HOST: root \ --env DATABASE_HOST: root \
--env DATABASE_PORT: 3306 \
--env DATABASE_NAME: mysql \ --env DATABASE_NAME: mysql \
--env DATABASE_USER: fetchmail \ --env DATABASE_USER: fetchmail \
--env DATABASE_PASSWORD: MySecretPassword \ --env DATABASE_PASSWORD: MySecretPassword \
--network host \ --network host \
git.cryptic.systems/volker.raschek/fetchmail:latest volkerraschek/fetchmail:latest
``` ```
### docker-compose ### docker-compose
The repository contains a default `docker-compose.yml` file, which can be used to start the container. To set the The repository contains a default `docker-compose.yml` file, which can be used
environment variables you need a `.env` file. The `.dev_env` from this repository can be used for this. This must be to start the container. To set the environment variables you need a `.env` file.
located exclusively in the same directory as the `docker-compose.yml` file and must be renamed as `.env`. The `.dev_env` from this repository can be used for this. This must be located
exclusively in the same directory as the `docker-compose.yml` file and must be
renamed as `.env`.
```yml ```yml
version: "3" version: "3"
services: services:
fetchmail: fetchmail:
image: git.cryptic.systems/volker.raschek/fetchmail:latest image: volkerraschek/fetchmail:latest
environment: environment:
- DATABASE_TYPE=${DATABASE_TYPE} - DATABASE_TYPE=${DATABASE_TYPE}
- DATABASE_HOST=${DATABASE_HOST} - DATABASE_HOST=${DATABASE_HOST}
- DATABASE_HOST=${DATABASE_PORT}
- DATABASE_NAME=${DATABASE_NAME} - DATABASE_NAME=${DATABASE_NAME}
- DATABASE_USER=${DATABASE_USER} - DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_PASSWORD=${DATABASE_PASSWORD}
network_mode: host network_mode: host
``` ```
## Environment variables ## Build container image manually
### DATABASE_TYPE To build the images manually check out the repository on
[github](https://github.com/volker-raschek/fetchmail-docker) with git and use
the make command to build the container image.
Currently will be only postgres, mysql and mariadb supported. About the environment variable `DATABASE_TYPE` can the ```bash
backend type defined. The value is required. make container-image/build
```
| database type | value |
| ------------- | ----- |
| mysql/mariadb | `my` |
| postgres | `Pg` |
### DATABASE_USER
The environment variable `DATABASE_USER` is undefined and required. The value contains the database user which one
fetchmail use to login.
### DATABASE_PASSWORD
The environment variable `DATABASE_PASSWORD` is undefined and required. The value contains the password of the database
user which one fetchmail use to login.
### DATABASE_HOST
The environment variable `DATABASE_HOST` is undefined and required. The value contains the DNS name or IP address of the
host, where the database is hosted.
### DATABASE_PORT
The environment variable `DATABASE_PORT` is undefined and required. The value contains the port of the host, where the
database is listen on.
### DATABASE_NAME
The environment variable `DATABASE_NAME` is undefined and required. The value contains the name of the database against
which should be logged in.

@ -1,14 +1,12 @@
version: "3" version: "3"
services: services:
postfixadmin-fetchmail: fetchmail:
container_name: postfixadmin-fetchmail container_name: fetchmail
image: git.cryptic.systems/volker.raschek/postfixadmin-fetchmail:latest image: volkerraschek/fetchmail-docker:latest
environment: environment:
- DATABASE_TYPE=${DATABASE_TYPE} - DATABASE_TYPE=${DATABASE_TYPE}
- DATABASE_HOST=${DATABASE_HOST}
- DATABASE_NAME=${DATABASE_NAME}
- DATABASE_USER=${DATABASE_USER} - DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_HOST=${DATABASE_HOST}
- DATABASE_PORT=${DATABASE_PORT}
- DATABASE_NAME=${DATABASE_NAME}
network_mode: host network_mode: host
privileged: true

@ -15,11 +15,10 @@ use LockFile::Simple qw(lock trylock unlock);
# database backend - uncomment one of these # database backend - uncomment one of these
our $db_type=$ENV{'DATABASE_TYPE'}; our $db_type=$ENV{'DATABASE_TYPE'};
our $db_host=$ENV{'DATABASE_HOST'};
our $db_name=$ENV{'DATABASE_NAME'};
our $db_username=$ENV{'DATABASE_USER'}; our $db_username=$ENV{'DATABASE_USER'};
our $db_password=$ENV{'DATABASE_PASSWORD'}; our $db_password=$ENV{'DATABASE_PASSWORD'};
our $db_host=$ENV{'DATABASE_HOST'};
our $db_port=$ENV{'DATABASE_PORT'};
our $db_name=$ENV{'DATABASE_NAME'};
# instead of changing this script, you can put your settings to /etc/mail/postfixadmin/fetchmail.conf # instead of changing this script, you can put your settings to /etc/mail/postfixadmin/fetchmail.conf
# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example: # just use perl syntax there to fill the variables listed above (without the "our" keyword). Example:
@ -35,7 +34,7 @@ openlog("fetchmail-all", "pid", "mail");
sub log_and_die { sub log_and_die {
my($message) = @_; my($message) = @_;
printf "err: %s\n", $message; syslog("err", $message);
die $message; die $message;
} }
@ -61,7 +60,7 @@ if (-e $configfile) {
} }
if($db_type eq "Pg" || $db_type eq "mysql") { if($db_type eq "Pg" || $db_type eq "mysql") {
$dsn = "DBI:$db_type:database=$db_name;host=$db_host;port=$db_port"; $dsn = "DBI:$db_type:database=$db_name;host=$db_host";
} else { } else {
log_and_die "unsupported db_type $db_type"; log_and_die "unsupported db_type $db_type";
} }
@ -90,7 +89,7 @@ my (%config);
map{ map{
my ($id,$mailbox,$src_server,$src_auth,$src_user,$src_password,$src_folder,$fetchall,$keep,$protocol,$mda,$extra_options,$usessl,$sslcertck,$sslcertpath,$sslfingerprint)=@$_; my ($id,$mailbox,$src_server,$src_auth,$src_user,$src_password,$src_folder,$fetchall,$keep,$protocol,$mda,$extra_options,$usessl,$sslcertck,$sslcertpath,$sslfingerprint)=@$_;
printf "info: fetch %s@%s for %s\n", ${src_user}, ${src_server}, ${mailbox}; syslog("info","fetch ${src_user}@${src_server} for ${mailbox}");
$cmd="user '${src_user}' there with password '".decode_base64($src_password)."'"; $cmd="user '${src_user}' there with password '".decode_base64($src_password)."'";
$cmd.=" folder '${src_folder}'" if ($src_folder); $cmd.=" folder '${src_folder}'" if ($src_folder);
@ -112,8 +111,7 @@ set postmaster "postmaster"
set nobouncemail set nobouncemail
set no spambounce set no spambounce
set properties "" set properties ""
set no syslog set syslog
set logfile /dev/stdout
poll ${src_server} with proto ${protocol} poll ${src_server} with proto ${protocol}
$cmd $cmd
@ -130,9 +128,6 @@ TXT
$sql="UPDATE fetchmail SET returned_text=".$dbh->quote($ret).", date=now() WHERE id=".$id; $sql="UPDATE fetchmail SET returned_text=".$dbh->quote($ret).", date=now() WHERE id=".$id;
$dbh->do($sql); $dbh->do($sql);
printf "info: fetched mails of %s@%s for %s\n", ${src_user}, ${src_server}, ${mailbox};
}@{$dbh->selectall_arrayref($sql)}; }@{$dbh->selectall_arrayref($sql)};
$lockmgr->unlock($lock_file); $lockmgr->unlock($lock_file);

20
manifest.tmpl Normal file

@ -0,0 +1,20 @@
image: volkerraschek/fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
{{#if build.tags}}
tags:
{{#each build.tags}}
- {{this}}
{{/each}}
- "latest"
{{/if}}
manifests:
-
image: volkerraschek/fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-amd64
platform:
architecture: amd64
os: linux
-
image: volkerraschek/fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-armv7
platform:
architecture: arm
os: linux
variant: v7

@ -1,9 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"local>volker.raschek/renovate-config:default#master",
"local>volker.raschek/renovate-config:container#master",
"local>volker.raschek/renovate-config:actions#master",
"local>volker.raschek/renovate-config:regexp#master"
]
}