-
-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #189 from junkurihara/pkg-readme
Feat: Jenkins CI/CD build scripts and Readme
- Loading branch information
Showing
11 changed files
with
571 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
Package: rpxy | ||
Version: @BUILD_VERSION@-1 | ||
Maintainer: Jun Kurihara <[email protected]> | ||
Homepage: https://github.com/junkurihara/rust-rpxy | ||
Architecture: amd64 | ||
Depends: systemd | ||
Recommends: rpxy-webui | ||
Priority: optional | ||
Section: base | ||
Description: A simple and ultrafast reverse-proxy serving multiple domain names with TLS termination, written in Rust |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
# Source debconf library | ||
. /usr/share/debconf/confmodule | ||
|
||
# Create rpxy user if it doesn't exist | ||
if ! getent passwd rpxy > /dev/null; then | ||
adduser --system --group --no-create-home --shell /usr/sbin/nologin rpxy | ||
fi | ||
|
||
# Set correct ownership for config directory | ||
if [ -d /etc/rpxy ]; then | ||
chown -R rpxy:rpxy /etc/rpxy | ||
fi | ||
|
||
# Reload systemd, enable and start the service | ||
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then | ||
deb-systemd-helper unmask rpxy.service >/dev/null || true | ||
if deb-systemd-helper --quiet was-enabled rpxy.service; then | ||
deb-systemd-helper enable rpxy.service >/dev/null || true | ||
else | ||
deb-systemd-helper update-state rpxy.service >/dev/null || true | ||
fi | ||
if [ -d /run/systemd/system ]; then | ||
systemctl --system daemon-reload >/dev/null || true | ||
if [ -n "$2" ]; then | ||
deb-systemd-invoke try-restart rpxy.service >/dev/null || true | ||
else | ||
deb-systemd-invoke start rpxy.service >/dev/null || true | ||
fi | ||
fi | ||
fi | ||
|
||
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
if [ "$1" = "purge" ]; then | ||
# Remove the rpxy user | ||
if getent passwd rpxy >/dev/null; then | ||
deluser --quiet --system rpxy >/dev/null || true | ||
fi | ||
|
||
# Remove config directory | ||
rm -rf /etc/rpxy | ||
|
||
# Remove systemd service state | ||
deb-systemd-helper purge rpxy.service >/dev/null || true | ||
deb-systemd-helper unmask rpxy.service >/dev/null || true | ||
fi | ||
|
||
if [ -d /run/systemd/system ]; then | ||
systemctl --system daemon-reload >/dev/null || true | ||
fi | ||
|
||
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
if [ -d /run/systemd/system ] && [ "$1" = remove ]; then | ||
deb-systemd-invoke stop rpxy.service >/dev/null || true | ||
fi | ||
|
||
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,208 @@ | ||
pipeline { | ||
agent none | ||
|
||
environment { | ||
// Define common variables used throughout the pipeline | ||
REPO_URL = 'https://github.com/junkurihara/rust-rpxy.git' | ||
BINARY_NAME = 'rpxy' | ||
// BUILD_VERSION is not set because it will be extracted from Cargo.toml in the first step | ||
// BUILD_VERSION = '' | ||
} | ||
|
||
stages { | ||
stage('Prepare Build Environment') { | ||
agent { | ||
kubernetes { | ||
inheritFrom 'default' | ||
yaml """ | ||
apiVersion: v1 | ||
kind: Pod | ||
spec: | ||
containers: | ||
- name: rust-cargo | ||
image: rust:slim | ||
command: | ||
- cat | ||
tty: true | ||
""" | ||
} | ||
} | ||
steps { | ||
container('rust-cargo') { | ||
// Install git | ||
sh 'apt-get update && apt-get -y install git --no-install-recommends' | ||
|
||
// Clone and Prepare Repository | ||
sh "git clone ${REPO_URL}" | ||
|
||
dir('rust-rpxy') { | ||
sh """ | ||
# Update submodule URLs to HTTPS (allows cloning without SSH keys) | ||
sed -i 's|[email protected]:|https://github.com/|g' .gitmodules | ||
# Initialize and update submodules | ||
git submodule update --init | ||
""" | ||
|
||
// Extract BUILD_VERSION from Cargo.toml | ||
script { | ||
// Extract version from Cargo.toml and set it as an environment variable | ||
def buildVersion = sh(script: 'grep "^version" Cargo.toml | sed \'s/version = "\\([0-9.]*\\)"/\\1/\'', returnStdout: true).trim() | ||
|
||
if (buildVersion) { | ||
env.BUILD_VERSION = buildVersion | ||
echo "Using extracted version: ${env.BUILD_VERSION}" | ||
} else { | ||
error "Version not found in Cargo.toml" | ||
} | ||
} | ||
|
||
// Build the binary | ||
sh 'cargo build --release' | ||
|
||
// Prepare and stash files | ||
sh """ | ||
# Move binary to workspace root for easier access | ||
mv target/release/${BINARY_NAME} .. | ||
# Move necessary files for packaging | ||
mv .build/DEB/* .. | ||
mv .build/RPM/* .. | ||
mv .build/rpxy* .. | ||
mv .build/config.toml .. | ||
mv README.md .. | ||
mv LICENSE .. | ||
""" | ||
} | ||
|
||
// Stash files for use in later stages | ||
stash includes: "${BINARY_NAME}", name: "binary" | ||
stash includes: "control, postinst, prerm, postrm, rpxy-start.sh", name: "deb-files" | ||
stash includes: "${BINARY_NAME}.spec", name: "rpm-files" | ||
stash includes: "rpxy.service, config.toml", name: "service-file" | ||
stash includes: "LICENSE, README.md", name: "docs" | ||
|
||
// Archive the binary as an artifact | ||
archiveArtifacts artifacts: "${BINARY_NAME}", allowEmptyArchive: false, fingerprint: true | ||
} | ||
} | ||
} | ||
|
||
stage('Build RPM Package') { | ||
agent { | ||
kubernetes { | ||
inheritFrom 'default' | ||
yaml """ | ||
apiVersion: v1 | ||
kind: Pod | ||
spec: | ||
containers: | ||
- name: rpm-build | ||
image: rockylinux:9 | ||
command: | ||
- cat | ||
tty: true | ||
""" | ||
} | ||
} | ||
steps { | ||
container('rpm-build') { | ||
// Prepare the RPM build environment | ||
unstash 'binary' | ||
unstash 'rpm-files' | ||
unstash 'service-file' | ||
unstash 'docs' | ||
|
||
// Install necessary tools for RPM building | ||
sh 'dnf update -y && dnf install -y rpmdevtools tar' | ||
|
||
// Create the RPM package | ||
sh """ | ||
# Create RPM build directory structure | ||
mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} | ||
mkdir -p ${BINARY_NAME}-${BUILD_VERSION} | ||
# Move files to the appropriate locations | ||
mv ${BINARY_NAME} ${BINARY_NAME}.service LICENSE README.md config.toml ${BINARY_NAME}-${BUILD_VERSION}/ | ||
tar -czf rpmbuild/SOURCES/${BINARY_NAME}-${BUILD_VERSION}.tar.gz ${BINARY_NAME}-${BUILD_VERSION}/ | ||
mv ${BINARY_NAME}.spec rpmbuild/SPECS/ | ||
# Update spec file with correct version and source | ||
sed -i 's/@BUILD_VERSION@/${BUILD_VERSION}/; s/@Source0@/${BINARY_NAME}-${BUILD_VERSION}.tar.gz/' rpmbuild/SPECS/${BINARY_NAME}.spec | ||
# Build the RPM package | ||
rpmbuild --define "_topdir ${WORKSPACE}/rpmbuild" --define "_version ${BUILD_VERSION}" -bb rpmbuild/SPECS/${BINARY_NAME}.spec | ||
# Move RPM to root for archiving | ||
mv rpmbuild/RPMS/x86_64/${BINARY_NAME}-${BUILD_VERSION}-1.el9.x86_64.rpm . | ||
""" | ||
|
||
// Archive the RPM package | ||
archiveArtifacts artifacts: "${BINARY_NAME}-${BUILD_VERSION}-1.el9.x86_64.rpm", allowEmptyArchive: false, fingerprint: true | ||
} | ||
} | ||
} | ||
|
||
stage('Build DEB Package') { | ||
agent { | ||
kubernetes { | ||
inheritFrom 'default' | ||
yaml """ | ||
apiVersion: v1 | ||
kind: Pod | ||
spec: | ||
containers: | ||
- name: debian-build | ||
image: debian:stable-slim | ||
command: | ||
- cat | ||
tty: true | ||
""" | ||
} | ||
} | ||
steps { | ||
container('debian-build') { | ||
// Prepare the DEB build environment | ||
unstash 'binary' | ||
unstash 'deb-files' | ||
unstash 'service-file' | ||
unstash 'docs' | ||
|
||
// Install necessary tools for DEB building | ||
sh 'apt-get update && apt-get install -y dpkg-dev --no-install-recommends' | ||
|
||
// Create the DEB package | ||
sh """ | ||
# Define DEB package directory | ||
DEB_DIR=${BINARY_NAME}_${BUILD_VERSION}-1_amd64 | ||
# Create directory structure for DEB package | ||
bash -c \"mkdir -p \$DEB_DIR/{DEBIAN,usr/{bin,local/bin,share/doc/${BINARY_NAME}},etc/{systemd/system,${BINARY_NAME}/acme_registry}}\" | ||
# Move files to appropriate locations | ||
mv postinst prerm postrm \$DEB_DIR/DEBIAN/ | ||
chmod 755 \$DEB_DIR/DEBIAN/postinst | ||
chmod 755 \$DEB_DIR/DEBIAN/prerm | ||
chmod 755 \$DEB_DIR/DEBIAN/postrm | ||
mv rpxy-start.sh \$DEB_DIR/usr/local/bin/ | ||
chmod 0755 \$DEB_DIR/usr/local/bin/rpxy-start.sh | ||
mv ${BINARY_NAME} \$DEB_DIR/usr/bin/ | ||
mv rpxy.service \$DEB_DIR/etc/systemd/system/ | ||
mv LICENSE README.md \$DEB_DIR/usr/share/doc/${BINARY_NAME}/ | ||
mv config.toml \$DEB_DIR/etc/${BINARY_NAME}/ | ||
mv control \$DEB_DIR/DEBIAN/ | ||
# Update control file with correct version | ||
sed -i 's/@BUILD_VERSION@/${BUILD_VERSION}/' \$DEB_DIR/DEBIAN/control | ||
# Build the DEB package | ||
dpkg-deb --build --root-owner-group \$DEB_DIR | ||
""" | ||
|
||
// Archive the DEB package | ||
archiveArtifacts artifacts: "${BINARY_NAME}_${BUILD_VERSION}-1_amd64.deb", allowEmptyArchive: false, fingerprint: true | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
Name: rpxy | ||
Version: @BUILD_VERSION@ | ||
Release: 1%{?dist} | ||
Summary: A simple and ultrafast reverse-proxy serving multiple domain names with TLS termination, written in Rust | ||
|
||
License: MIT | ||
URL: https://github.com/junkurihara/rust-rpxy | ||
Source0: @Source0@ | ||
BuildArch: x86_64 | ||
|
||
Requires: systemd | ||
|
||
%description | ||
This rpm installs rpxy into /usr/bin and sets up a systemd service. | ||
|
||
# Prep section: Unpack the source | ||
%prep | ||
%autosetup | ||
|
||
# Install section: Copy files to their destinations | ||
%install | ||
rm -rf %{buildroot} | ||
|
||
# Create necessary directories | ||
mkdir -p %{buildroot}%{_bindir} | ||
mkdir -p %{buildroot}%{_sysconfdir}/systemd/system | ||
mkdir -p %{buildroot}%{_sysconfdir}/rpxy/acme_registry | ||
mkdir -p %{buildroot}%{_docdir}/rpxy | ||
|
||
# Copy files | ||
cp rpxy %{buildroot}%{_bindir}/ | ||
cp rpxy.service %{buildroot}%{_sysconfdir}/systemd/system/ | ||
cp config.toml %{buildroot}%{_sysconfdir}/rpxy/ | ||
cp LICENSE README.md %{buildroot}%{_docdir}/rpxy/ | ||
|
||
# Clean section: Remove buildroot | ||
%clean | ||
rm -rf %{buildroot} | ||
|
||
# Pre-install script | ||
%pre | ||
# Create the rpxy user if it does not exist | ||
if ! getent passwd rpxy >/dev/null; then | ||
useradd -r -s /sbin/nologin -d / -c "rpxy system user" rpxy | ||
fi | ||
|
||
# Post-install script | ||
%post | ||
# Set ownership of config file to rpxy user | ||
chown -R rpxy:rpxy %{_sysconfdir}/rpxy | ||
|
||
# Reload systemd, enable and start rpxy service | ||
%systemd_post rpxy.service | ||
|
||
# Pre-uninstall script | ||
%preun | ||
%systemd_preun rpxy.service | ||
|
||
# Post-uninstall script | ||
%postun | ||
%systemd_postun_with_restart rpxy.service | ||
|
||
# Only remove user and config on full uninstall | ||
if [ $1 -eq 0 ]; then | ||
# Remove rpxy user | ||
userdel rpxy | ||
|
||
# Remove the configuration directory if it exists | ||
[ -d %{_sysconfdir}/rpxy ] && rm -rf %{_sysconfdir}/rpxy | ||
fi | ||
|
||
# Files section: List all files included in the package | ||
%files | ||
%license %{_docdir}/rpxy/LICENSE | ||
%doc %{_docdir}/rpxy/README.md | ||
%{_sysconfdir}/systemd/system/rpxy.service | ||
%attr(755, rpxy, rpxy) %{_bindir}/rpxy | ||
%attr(644, rpxy, rpxy) %config(noreplace) %{_sysconfdir}/rpxy/config.toml |
Oops, something went wrong.