7 Commits

Author SHA1 Message Date
unkinben b3ba980f9f refactor: modernise RPM builder with Python tooling
Build / build-8 (pull_request) Failing after 7s
Build / build-9 (pull_request) Failing after 8s
- Replace Makefile version/release file system with metadata.yaml only
- Add Python build automation (./tools/build) with Gitea API integration
- Add GitHub release updater (./tools/update-gh) for version management
- Centralize Dockerfiles into single parameterized Dockerfile
- Remove 54+ individual package Dockerfiles and version directories
- Update Makefile to use new Python tooling
- Add GITEA_API_TOKEN validation to prevent duplicate builds
- Support both explicit version/release args and metadata.yaml reading
2025-11-30 03:39:58 +11:00
unkinben 8d1aa34f0f Merge pull request 'feat: add tflint 0.59.1' (#69) from benvin/tflint into master
Deploy / deploy-8 (push) Successful in 4s
Deploy / deploy-9 (push) Successful in 5s
Reviewed-on: #69
2025-11-16 13:36:54 +11:00
unkinben 288dfe211b feat: add tflint 0.59.1
Build / build-8 (pull_request) Successful in 50s
Build / build-9 (pull_request) Successful in 2m0s
- builds the tflint package
2025-11-16 13:24:50 +11:00
unkinben 0133114aac Merge pull request 'feat: add default settings to stalwart' (#68) from benvin/stalwart_default_settings into master
Deploy / deploy-8 (push) Successful in 5s
Deploy / deploy-9 (push) Successful in 7s
Reviewed-on: #68
2025-10-19 20:54:15 +11:00
unkinben 6813eb84ce feat: add default settings to stalwart
Build / build-8 (pull_request) Successful in 1m51s
Build / build-9 (pull_request) Successful in 1m59s
- bump release
- add default admin user/pass
- change http service to listen on all interfaces
2025-10-19 20:44:04 +11:00
unkinben 2de946b150 Merge pull request 'feat: add Stalwart Mail Server and FoundationDB library packages' (#67) from benvin/stalwart into master
Deploy / deploy-8 (push) Successful in 9s
Deploy / deploy-9 (push) Successful in 10s
Reviewed-on: #67
2025-10-19 18:35:03 +11:00
unkinben e07235ca98 feat: add Stalwart Mail Server and FoundationDB library packages
Build / build-8 (pull_request) Successful in 58s
Build / build-9 (pull_request) Successful in 2m17s
- add stalwart: main mail server with systemd integration and user management
- add stalwart-cli: command line interface tool for server administration
- add stalwart-foundationdb: FoundationDB-enabled version with proper dependencies
- add libfoundationdb: FoundationDB client library (libfdb_c.so) package

All packages include proper conflict resolution, systemd services, and follow
repository packaging conventions. stalwart and stalwart-foundationdb are
mutually exclusive to prevent installation conflicts.
2025-10-19 18:08:33 +11:00
135 changed files with 1994 additions and 970 deletions
+8 -4
View File
@@ -10,15 +10,17 @@ jobs:
runs-on: almalinux-8 runs-on: almalinux-8
container: container:
image: git.unkin.net/unkin/almalinux8-actionsdind:latest image: git.unkin.net/unkin/almalinux8-actionsdind:latest
options: --privileged options: "--privileged --volume /etc/pki/tls/vault:/etc/pki/tls/vault:ro"
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Build Packages - name: Build Packages
env:
VAULT_ROLE_ID: ${{ secrets.RPMBUILDER_VAULT_ROLEID }}
run: | run: |
make all make all DISTRO=el/8
- name: Show RPMs - name: Show RPMs
run: | run: |
@@ -34,15 +36,17 @@ jobs:
runs-on: almalinux-8 runs-on: almalinux-8
container: container:
image: git.unkin.net/unkin/almalinux9-actionsdind:latest image: git.unkin.net/unkin/almalinux9-actionsdind:latest
options: --privileged options: "--privileged --volume /etc/pki/tls/vault:/etc/pki/tls/vault:ro"
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Build Packages - name: Build Packages
env:
VAULT_ROLE_ID: ${{ secrets.RPMBUILDER_VAULT_ROLEID }}
run: | run: |
make all make all DISTRO=el/9
- name: Show RPMs - name: Show RPMs
run: | run: |
+2
View File
@@ -1 +1,3 @@
dist dist
env
.claude
+2 -1
View File
@@ -1,4 +1,5 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest ARG BASE_IMAGE=git.unkin.net/unkin/almalinux9-rpmbuilder:latest
FROM ${BASE_IMAGE}
# Create output directory for RPMs # Create output directory for RPMs
RUN mkdir -p /app/dist RUN mkdir -p /app/dist
+66 -39
View File
@@ -1,58 +1,85 @@
# Variables # Variables
ROOT_DIR := $(PWD) ROOT_DIR := $(PWD)
RPMS_DIR := $(ROOT_DIR)/rpms BUILD_TOOL := $(ROOT_DIR)/tools/build
REPO_OPTIONS := --disablerepo=* --enablerepo=unkin DISTRO ?= el/9 # Default to el/9 if not specified
# Automatically find all package/version directories # Automatically find all packages with metadata.yaml
PACKAGES := $(shell find $(RPMS_DIR) -mindepth 2 -maxdepth 2 -type d | sed "s|$(RPMS_DIR)/||" | grep -Ev '(scripts|/resources)') PACKAGES := $(shell find $(ROOT_DIR)/rpms -mindepth 1 -maxdepth 1 -type d -exec test -f {}/metadata.yaml \; -print | xargs -n1 basename | sort)
# Default target to build all packages and versions # Default target to build all packages
.PHONY: all list cache build clean .PHONY: all list build clean
all: cache $(PACKAGES) all: build-all
# List all available packages
list: list:
@echo "Builds:" @echo "Available packages:"
@for package in $(PACKAGES); do \ @for package in $(PACKAGES); do \
echo " '$$package'"; \ echo " $$package"; \
done done
cache: # Build all packages using Python tool
echo "Refreshing DNF cache..." && \ build-all:
dnf clean all && \ @echo "Building all packages using Python tooling for distro $(DISTRO)..."
dnf makecache $(BUILD_TOOL) --all --distro $(DISTRO)
# Build specific package/version # Build specific package using Python tool
.PHONY: $(PACKAGES) .PHONY: $(PACKAGES)
$(PACKAGES): $(PACKAGES):
@PACKAGE_NAME=$(shell echo $(@) | cut -d/ -f1) && \ @echo "Building package: $@ for distro $(DISTRO)"
PACKAGE_VERSION=$(shell echo $(@) | cut -d/ -f2) && \ $(BUILD_TOOL) --package $@ --distro $(DISTRO)
echo "Starting build $$PACKAGE_NAME/$$PACKAGE_VERSION" && \
$(MAKE) build PACKAGE_NAME=$$PACKAGE_NAME PACKAGE_VERSION=$$PACKAGE_VERSION
# Build target # Build specific package with version/release override
build: build:
@mkdir -p $(ROOT_DIR)/dist/$(PACKAGE_NAME)/ @if [ -z "$(PACKAGE_NAME)" ]; then \
@cd $(RPMS_DIR)/$(PACKAGE_NAME) && \ echo "Error: PACKAGE_NAME not specified"; \
export PACKAGE_RELEASE=$$(cat $(PACKAGE_VERSION)/release) && \ echo "Usage: make build PACKAGE_NAME=package [PACKAGE_VERSION=version] [PACKAGE_RELEASE=release]"; \
export PACKAGE_FULL_NAME=$(PACKAGE_NAME)-$(PACKAGE_VERSION)-$$PACKAGE_RELEASE && \ exit 1; \
echo "Checking repos for $$PACKAGE_FULL_NAME" && \ fi
if dnf info $$PACKAGE_FULL_NAME $(REPO_OPTIONS) > /dev/null 2>&1; then \ @if [ -n "$(PACKAGE_VERSION)" ] && [ -n "$(PACKAGE_RELEASE)" ]; then \
echo "Skipping build for $(PACKAGE_NAME) version $(PACKAGE_VERSION) (already exists in the repository)"; \ echo "Building $(PACKAGE_NAME) with explicit version $(PACKAGE_VERSION)-$(PACKAGE_RELEASE) for distro $(DISTRO)"; \
else \ $(BUILD_TOOL) --package $(PACKAGE_NAME) --version $(PACKAGE_VERSION) --release $(PACKAGE_RELEASE) --distro $(DISTRO); \
echo "Building RPM for $(PACKAGE_NAME) version $(PACKAGE_VERSION)"; \ else \
docker build \ echo "Building $(PACKAGE_NAME) using metadata.yaml for distro $(DISTRO)"; \
--build-arg PACKAGE_VERSION=$(PACKAGE_VERSION) \ $(BUILD_TOOL) --package $(PACKAGE_NAME) --distro $(DISTRO); \
--build-arg PACKAGE_RELEASE=$${PACKAGE_RELEASE} \ fi
-t $$(echo $(PACKAGE_NAME)-builder \
| tr '[:upper:]' '[:lower:]') . && \ # Dry run - show what would be built without building
docker create --name $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder \ dry-run:
$$(echo $(PACKAGE_NAME)-builder | tr '[:upper:]' '[:lower:]') && \ @echo "Dry run - showing what would be built for distro $(DISTRO):"
docker start -a $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder && \ $(BUILD_TOOL) --all --distro $(DISTRO) --dry-run
docker cp $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder:/app/dist/. $(ROOT_DIR)/dist/$(PACKAGE_NAME)/ && \
docker rm $(PACKAGE_NAME)-$(PACKAGE_VERSION)-builder; \
fi
# Clean target # Clean target
clean: clean:
@echo "Cleaning build artifacts..." @echo "Cleaning build artifacts..."
rm -rf $(ROOT_DIR)/dist rm -rf $(ROOT_DIR)/dist
# Update packages from GitHub releases
update:
@echo "Checking for package updates from GitHub releases..."
$(ROOT_DIR)/tools/update-gh --all
# Update specific package from GitHub
update-%:
@echo "Checking for updates for package: $*"
$(ROOT_DIR)/tools/update-gh --package $*
# Help target
help:
@echo "Available targets:"
@echo " all - Build all packages (default)"
@echo " list - List all available packages"
@echo " build-all - Build all packages using Python tooling"
@echo " <package> - Build specific package (e.g., 'make consul')"
@echo " build - Build with explicit PACKAGE_NAME, PACKAGE_VERSION, PACKAGE_RELEASE"
@echo " dry-run - Show what would be built without building"
@echo " clean - Remove build artifacts"
@echo " update - Check all packages for GitHub release updates"
@echo " update-<pkg> - Check specific package for GitHub release updates"
@echo " help - Show this help message"
@echo ""
@echo "Examples:"
@echo " make consul # Build consul using metadata.yaml"
@echo " make build PACKAGE_NAME=consul # Build consul using metadata.yaml"
@echo " make build PACKAGE_NAME=consul PACKAGE_VERSION=1.21.1 PACKAGE_RELEASE=1"
@echo " make update-consul # Check consul for GitHub updates"
@echo " make dry-run # Show what would be built"
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy nfpm.yaml from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
2
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy nfpm.yaml from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
3
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-19
View File
@@ -1,19 +0,0 @@
# Start with the AlmaLinux 9 base image
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
+9
View File
@@ -0,0 +1,9 @@
name: jsonnet-lint
release: 1
version: 0.21.0
build:
- distro: el/8
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
- distro: el/9
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
github: google/go-jsonnet
-1
View File
@@ -1 +0,0 @@
1
-19
View File
@@ -1,19 +0,0 @@
# Start with the AlmaLinux 9 base image
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
+9
View File
@@ -0,0 +1,9 @@
name: jsonnet
release: 1
version: 0.21.0
build:
- distro: el/8
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
- distro: el/9
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
github: google/go-jsonnet
+9
View File
@@ -0,0 +1,9 @@
name: libfoundationdb
release: 1
version: 7.3.71
github: apple/foundationdb
build:
- distro: el/8
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
- distro: el/9
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/bash
# Download the required library
curl -L -o /app/libfdb_c.so https://github.com/apple/foundationdb/releases/download/${PACKAGE_VERSION}/libfdb_c.x86_64.so
# Make the library readable
chmod 755 /app/libfdb_c.so
# Build the RPM
nfpm pkg --config /app/resources/nfpm.yaml --target /app/dist --packager rpm
+36
View File
@@ -0,0 +1,36 @@
# nfpm.yaml
name: libfoundationdb
version: ${PACKAGE_VERSION}
release: ${PACKAGE_RELEASE}
arch: amd64
platform: linux
section: default
priority: extra
description: "FoundationDB client library - Shared library for FoundationDB applications"
maintainer: FoundationDB Community
homepage: https://github.com/apple/foundationdb
license: Apache-2.0
disable_globbing: false
replaces:
- libfoundationdb
provides:
- libfoundationdb
- libfdb_c.so()(64bit)
# Files to include in the package
contents:
- src: /app/libfdb_c.so
dst: /usr/lib64/libfdb_c.so
file_info:
mode: 0755
owner: root
group: root
# Scripts to run during installation/removal
scripts:
postinstall: /app/resources/scripts/postinstall.sh
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Update the dynamic linker cache to include the new library
ldconfig
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-19
View File
@@ -1,19 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy nfpm.yaml from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
@@ -1 +0,0 @@
1
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
@@ -1 +0,0 @@
1
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-19
View File
@@ -1,19 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy nfpm.yaml from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
6
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
+9
View File
@@ -0,0 +1,9 @@
name: stalwart-cli
release: 1
version: 0.13.4
github: stalwartlabs/stalwart
build:
- distro: el/8
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
- distro: el/9
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/bash
# Download the required files
curl -L -o /app/stalwart-cli.tar.gz https://github.com/stalwartlabs/stalwart/releases/download/v${PACKAGE_VERSION}/stalwart-cli-x86_64-unknown-linux-gnu.tar.gz
# Extract the binary
tar -xzf /app/stalwart-cli.tar.gz -C /app
# Make the binary executable
chmod +x /app/stalwart-cli
# Build the RPM
nfpm pkg --config /app/resources/nfpm.yaml --target /app/dist --packager rpm
+31
View File
@@ -0,0 +1,31 @@
# nfpm.yaml
name: stalwart-cli
version: ${PACKAGE_VERSION}
release: ${PACKAGE_RELEASE}
arch: amd64
platform: linux
section: default
priority: extra
description: "Stalwart CLI - Command line interface for Stalwart Mail Server"
maintainer: Stalwart Labs
homepage: https://stalw.art
license: AGPL-3.0
disable_globbing: false
replaces:
- stalwart-cli
provides:
- stalwart-cli
# Files to include in the package
contents:
- src: /app/stalwart-cli
dst: /usr/bin/stalwart-cli
file_info:
mode: 0755
owner: root
group: root
+9
View File
@@ -0,0 +1,9 @@
name: stalwart-foundationdb
release: 1
version: 0.13.4
github: stalwartlabs/stalwart
build:
- distro: el/8
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
- distro: el/9
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/bash
# Download the required files
curl -L -o /app/stalwart-foundationdb.tar.gz https://github.com/stalwartlabs/stalwart/releases/download/v${PACKAGE_VERSION}/stalwart-foundationdb-x86_64-unknown-linux-gnu.tar.gz
# Extract the binary
tar -xzf /app/stalwart-foundationdb.tar.gz -C /app
# Make the binary executable
chmod +x /app/stalwart-foundationdb
# Build the RPM
nfpm pkg --config /app/resources/nfpm.yaml --target /app/dist --packager rpm
@@ -0,0 +1,50 @@
# nfpm.yaml
name: stalwart-foundationdb
version: ${PACKAGE_VERSION}
release: ${PACKAGE_RELEASE}
arch: amd64
platform: linux
section: default
priority: extra
description: "Stalwart Mail Server with FoundationDB support - A modern, secure JMAP, IMAP and SMTP mail server"
maintainer: Stalwart Labs
homepage: https://stalw.art
license: AGPL-3.0
disable_globbing: false
replaces:
- stalwart-foundationdb
provides:
- stalwart-foundationdb
conflicts:
- stalwart
depends:
- libfoundationdb
# Files to include in the package
contents:
- src: /app/stalwart-foundationdb
dst: /opt/stalwart/bin/stalwart-foundationdb
file_info:
mode: 0755
owner: stalwart
group: stalwart
- src: /app/resources/stalwart-foundationdb.service
dst: /usr/lib/systemd/system/stalwart-foundationdb.service
file_info:
mode: 0644
owner: root
group: root
# Scripts to run during installation/removal
scripts:
preinstall: /app/resources/scripts/preinstall.sh
postinstall: /app/resources/scripts/postinstall.sh
preremove: /app/resources/scripts/preremove.sh
postremove: /app/resources/scripts/postremove.sh
@@ -0,0 +1,58 @@
#!/usr/bin/env bash
# Create default configuration if it doesn't exist
if [ ! -f /opt/stalwart/etc/config.toml ]; then
cat > /opt/stalwart/etc/config.toml << 'EOF'
# Stalwart Mail Server Configuration with FoundationDB
# This is a minimal configuration file. Please customize according to your needs.
# Full documentation: https://stalw.art/docs/
[server]
hostname = "localhost"
[server.listener.smtp]
bind = ["127.0.0.1:25"]
protocol = "smtp"
[server.listener.submission]
bind = ["127.0.0.1:587"]
protocol = "smtp"
[server.listener.imap]
bind = ["127.0.0.1:143"]
protocol = "imap"
[server.listener.http]
bind = ["[::]:8080"]
protocol = "http"
[storage]
data = "foundationdb"
fts = "foundationdb"
blob = "fs"
lookup = "foundationdb"
directory = "internal"
[store."foundationdb"]
type = "foundationdb"
cluster = "/etc/foundationdb/fdb.cluster"
[store."fs"]
type = "fs"
path = "/var/lib/stalwart/blobs"
[directory."internal"]
type = "internal"
store = "foundationdb"
[authentication.fallback-admin]
user = "admin"
secret = "$6$PAEtTGE/jbt9B/FQ$lYXn/whSh7rzegMdA6W8vuw2E/3IDFjpb0edXRqrl1d8i2KQF6Qm.ESmZ3j5jIHCTPSIH3JYBvIgvIbk9sH3p1"
EOF
chown stalwart:stalwart /opt/stalwart/etc/config.toml
chmod 600 /opt/stalwart/etc/config.toml
fi
# Reload systemd
systemctl daemon-reload
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Reload systemd after service file removal
systemctl daemon-reload
# Note: We don't remove user data, logs, or configuration files
# to preserve user data in case of reinstallation
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
# Create stalwart user and group
if ! getent group stalwart >/dev/null; then
groupadd -r stalwart
fi
if ! getent passwd stalwart >/dev/null; then
useradd -r -g stalwart -d /opt/stalwart -s /sbin/nologin -c "Stalwart Mail Server" stalwart
fi
# Create required directories
mkdir -p /opt/stalwart/{bin,etc,data,logs}
mkdir -p /var/lib/stalwart
mkdir -p /var/log/stalwart
# Set ownership
chown -R stalwart:stalwart /opt/stalwart
chown -R stalwart:stalwart /var/lib/stalwart
chown -R stalwart:stalwart /var/log/stalwart
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Stop and disable the service if it's running
if systemctl is-enabled stalwart-foundationdb.service >/dev/null 2>&1; then
systemctl stop stalwart-foundationdb.service
systemctl disable stalwart-foundationdb.service
fi
@@ -0,0 +1,26 @@
[Unit]
Description=Stalwart Mail Server with FoundationDB
After=network.target foundationdb.service
Requires=foundationdb.service
[Service]
Type=simple
User=stalwart
Group=stalwart
ExecStart=/opt/stalwart/bin/stalwart-foundationdb --config=/opt/stalwart/etc/config.toml
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=stalwart-foundationdb
# Security settings
NoNewPrivileges=true
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/stalwart /var/log/stalwart /opt/stalwart/data
[Install]
WantedBy=multi-user.target
+9
View File
@@ -0,0 +1,9 @@
name: stalwart
release: 1
version: 0.13.4
github: stalwartlabs/stalwart
build:
- distro: el/8
image: git.unkin.net/unkin/almalinux8-rpmbuilder:latest
- distro: el/9
image: git.unkin.net/unkin/almalinux9-rpmbuilder:latest
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/bash
# Download the required files
curl -L -o /app/stalwart.tar.gz https://github.com/stalwartlabs/stalwart/releases/download/v${PACKAGE_VERSION}/stalwart-x86_64-unknown-linux-gnu.tar.gz
# Extract the binary
tar -xzf /app/stalwart.tar.gz -C /app
# Make the binary executable
chmod +x /app/stalwart
# Build the RPM
nfpm pkg --config /app/resources/nfpm.yaml --target /app/dist --packager rpm
+47
View File
@@ -0,0 +1,47 @@
# nfpm.yaml
name: stalwart
version: ${PACKAGE_VERSION}
release: ${PACKAGE_RELEASE}
arch: amd64
platform: linux
section: default
priority: extra
description: "Stalwart Mail Server - A modern, secure JMAP, IMAP and SMTP mail server"
maintainer: Stalwart Labs
homepage: https://stalw.art
license: AGPL-3.0
disable_globbing: false
replaces:
- stalwart
provides:
- stalwart
conflicts:
- stalwart-foundationdb
# Files to include in the package
contents:
- src: /app/stalwart
dst: /opt/stalwart/bin/stalwart
file_info:
mode: 0755
owner: stalwart
group: stalwart
- src: /app/resources/stalwart.service
dst: /usr/lib/systemd/system/stalwart.service
file_info:
mode: 0644
owner: root
group: root
# Scripts to run during installation/removal
scripts:
preinstall: /app/resources/scripts/preinstall.sh
postinstall: /app/resources/scripts/postinstall.sh
preremove: /app/resources/scripts/preremove.sh
postremove: /app/resources/scripts/postremove.sh
@@ -0,0 +1,58 @@
#!/usr/bin/env bash
# Create default configuration if it doesn't exist
if [ ! -f /opt/stalwart/etc/config.toml ]; then
cat > /opt/stalwart/etc/config.toml << 'EOF'
# Stalwart Mail Server Configuration
# This is a minimal configuration file. Please customize according to your needs.
# Full documentation: https://stalw.art/docs/
[server]
hostname = "localhost"
[server.listener.smtp]
bind = ["127.0.0.1:25"]
protocol = "smtp"
[server.listener.submission]
bind = ["127.0.0.1:587"]
protocol = "smtp"
[server.listener.imap]
bind = ["127.0.0.1:143"]
protocol = "imap"
[server.listener.http]
bind = ["[::]:8080"]
protocol = "http"
[storage]
data = "sqlite"
fts = "sqlite"
blob = "fs"
lookup = "sqlite"
directory = "internal"
[store."sqlite"]
type = "sqlite"
path = "/var/lib/stalwart/stalwart.db"
[store."fs"]
type = "fs"
path = "/var/lib/stalwart/blobs"
[directory."internal"]
type = "internal"
store = "sqlite"
[authentication.fallback-admin]
user = "admin"
secret = "$6$PAEtTGE/jbt9B/FQ$lYXn/whSh7rzegMdA6W8vuw2E/3IDFjpb0edXRqrl1d8i2KQF6Qm.ESmZ3j5jIHCTPSIH3JYBvIgvIbk9sH3p1"
EOF
chown stalwart:stalwart /opt/stalwart/etc/config.toml
chmod 600 /opt/stalwart/etc/config.toml
fi
# Reload systemd
systemctl daemon-reload
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Reload systemd after service file removal
systemctl daemon-reload
# Note: We don't remove user data, logs, or configuration files
# to preserve user data in case of reinstallation
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
# Create stalwart user and group
if ! getent group stalwart >/dev/null; then
groupadd -r stalwart
fi
if ! getent passwd stalwart >/dev/null; then
useradd -r -g stalwart -d /opt/stalwart -s /sbin/nologin -c "Stalwart Mail Server" stalwart
fi
# Create required directories
mkdir -p /opt/stalwart/{bin,etc,data,logs}
mkdir -p /var/lib/stalwart
mkdir -p /var/log/stalwart
# Set ownership
chown -R stalwart:stalwart /opt/stalwart
chown -R stalwart:stalwart /var/lib/stalwart
chown -R stalwart:stalwart /var/log/stalwart
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Stop and disable the service if it's running
if systemctl is-enabled stalwart.service >/dev/null 2>&1; then
systemctl stop stalwart.service
systemctl disable stalwart.service
fi
+25
View File
@@ -0,0 +1,25 @@
[Unit]
Description=Stalwart Mail Server
After=network.target
[Service]
Type=simple
User=stalwart
Group=stalwart
ExecStart=/opt/stalwart/bin/stalwart --config=/opt/stalwart/etc/config.toml
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=stalwart
# Security settings
NoNewPrivileges=true
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/stalwart /var/log/stalwart /opt/stalwart/data
[Install]
WantedBy=multi-user.target
-1
View File
@@ -1 +0,0 @@
1
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh
-1
View File
@@ -1 +0,0 @@
1
-1
View File
@@ -1 +0,0 @@
1
-18
View File
@@ -1,18 +0,0 @@
FROM git.unkin.net/unkin/almalinux9-rpmbuilder:latest
# Create output directory for RPMs
RUN mkdir -p /app/dist
# Set working directory
WORKDIR /app
ARG PACKAGE_RELEASE
ENV PACKAGE_RELEASE=${PACKAGE_RELEASE}
ARG PACKAGE_VERSION
ENV PACKAGE_VERSION=${PACKAGE_VERSION}
# Copy resources from the context into the container
COPY resources /app/resources
# Default command to build RPMs
CMD /app/resources/build.sh

Some files were not shown because too many files have changed in this diff Show More