Skip to content

Commit

Permalink
chore: Adds infrastructure for building RPM and DEB packages
Browse files Browse the repository at this point in the history
  • Loading branch information
andyquinterom committed Oct 6, 2024
1 parent fbb39bb commit b9b0780
Show file tree
Hide file tree
Showing 14 changed files with 193 additions and 3 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
/target
/rpmbuild
.env
deb/usr/local/bin/compose-watcher
rpm/usr/local/bin/compose-watcher
*.deb
*.rpm
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "contpose"
name = "compose-watcher"
version = "0.1.0"
edition = "2021"
license = "MIT"
Expand Down
27 changes: 27 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
.PHONY: build-deb build-rpm

WORK_DIR=$(shell pwd)
TARGET_BIN=target/x86_64-unknown-linux-musl/release/compose-watcher
USR_BIN_DEB=deb/usr/local/bin/compose-watcher
USR_BIN_RPM=rpm/usr/local/bin/compose-watcher

$(TARGET_BIN):
CARGO_TARGET_DIR="./target" cargo build --release --target "x86_64-unknown-linux-musl"

$(USR_BIN_RPM): $(TARGET_BIN)
mkdir -p deb/usr/local/bin/
mv $(TARGET_BIN) $(USR_BIN_RPM)

$(USR_BIN_DEB): $(TARGET_BIN)
mkdir -p deb/usr/local/bin/
mv $(TARGET_BIN) $(USR_BIN_DEB)

build-deb: $(USR_BIN_DEB)
dpkg-deb --build deb
mv deb.deb compose-watcher.deb

build-rpm: $(USR_BIN_RPM)
cp -r rpm/ rpmbuild
mkdir -p rpmbuild/opt/compose-watcher
rpmbuild --target=x86_64 --buildroot $(WORK_DIR)/rpmbuild \
-bb rpmbuild/compose-watcher.spec
6 changes: 6 additions & 0 deletions deb/DEBIAN/control
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Package: compose-watcher
Version: 0.1
Maintainer: ixpantia S.A.
Architecture: amd64
Description: Continously Deploy services with Docker Compose
Depends: docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, docker-compose-plugin
Empty file added deb/DEBIAN/install
Empty file.
22 changes: 22 additions & 0 deletions deb/DEBIAN/postinst
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/sh
set -e

# Create the 'compose-watcher' user and home directory if it doesn't exist
if ! id -u compose-watcher > /dev/null 2>&1; then
useradd -r -d /opt/compose-watcher -s /bin/false compose-watcher
mkdir -p /opt/compose-watcher
chown compose-watcher:compose-watcher /opt/compose-watcher
fi

# Create the compose-watcher.toml file if it doesn't exist
if [ ! -f /opt/compose-watcher/compose-watcher.toml ]; then
echo "delay=60 # Will watch for updates every 60 seconds" >> /opt/compose-watcher/compose-watcher.toml
chown compose-watcher:compose-watcher /opt/compose-watcher/compose-watcher.toml
fi

# Restart the service on upgrade
if [ "$1" = "configure" ]; then
systemctl daemon-reload || true
systemctl enable compose-watcher.service || true
systemctl start compose-watcher.service || true
fi
15 changes: 15 additions & 0 deletions deb/DEBIAN/postrm
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/sh
set -e

if [ "$1" = "purge" ]; then
systemctl daemon-reload || true
rm -f /lib/systemd/system/compose-watcher.service
fi

rm -rf /usr/local/bin/compose-watcher

if [ "$1" = "purge" ]; then
# Remove the compose-watcher user and its home directory
userdel -r compose-watcher || true
rm -rf /opt/compose-watcher
fi
7 changes: 7 additions & 0 deletions deb/DEBIAN/prerm
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/sh
set -e

if [ "$1" = "remove" ]; then
systemctl stop compose-watcher.service || true
systemctl disable compose-watcher.service || true
fi
9 changes: 9 additions & 0 deletions deb/DEBIAN/rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/usr/bin/make -f

%:
dh $@

override_dh_installinit:
dh_installinit --restart-after-upgrade
dh_systemd_enable
dh_systemd_start
17 changes: 17 additions & 0 deletions deb/lib/systemd/system/compose-watcher.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[Unit]
Description=Compose Watcher
After=docker.service
BindsTo=docker.service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=compose-watcher
Environment="RUST_LOG=info"
ExecStart=/usr/local/bin/compose-watcher --config /opt/compose-watcher/compose-watcher.toml
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/opt/compose-watcher

[Install]
WantedBy=multi-user.target
65 changes: 65 additions & 0 deletions rpm/compose-watcher.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
Buildroot: /home/andres/projects/ixpantia/imasd/contpose/compose-watcher-0.1
Name: compose-watcher
Version: 0.1
Release: 0
Summary: Continously Deploy services with Docker Compose
License: see /usr/share/doc/compose-watcher/copyright
Distribution: Debian
Group: Converted/unknown
Requires: docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

%define _rpmdir ../
%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
%define _unpackaged_files_terminate_build 0

%post
#!/bin/sh
set -e

# Create the 'compose-watcher' user and home directory if it doesn't exist
if ! id -u compose-watcher > /dev/null 2>&1; then
useradd -r -d /opt/compose-watcher -s /bin/false compose-watcher
mkdir -p /opt/compose-watcher
chown compose-watcher:compose-watcher /opt/compose-watcher
fi

# Create the compose-watcher.toml file if it doesn't exist
if [ ! -f /opt/compose-watcher/compose-watcher.toml ]; then
echo "delay=60 # Will watch for updates every 60 seconds" >> /opt/compose-watcher/compose-watcher.toml
chown compose-watcher:compose-watcher /opt/compose-watcher/compose-watcher.toml
fi

# Restart the service on upgrade
systemctl daemon-reload || true
systemctl enable compose-watcher.service || true
systemctl start compose-watcher.service || true


%preun
#!/bin/sh
set -e

systemctl stop compose-watcher.service || true
systemctl disable compose-watcher.service || true


%postun
#!/bin/sh
set -e

systemctl daemon-reload || true
rm -f /lib/systemd/system/compose-watcher.service

rm -rf /usr/local/bin/compose-watcher

# Remove the compose-watcher user and its home directory
userdel -r compose-watcher || true
rm -rf /opt/compose-watcher


%description

%files
%dir "/opt/compose-watcher"
"/lib/systemd/system/compose-watcher.service"
"/usr/local/bin/compose-watcher"
17 changes: 17 additions & 0 deletions rpm/lib/systemd/system/compose-watcher.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[Unit]
Description=Compose Watcher
After=docker.service
BindsTo=docker.service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=compose-watcher
Environment="RUST_LOG=info"
ExecStart=/usr/local/bin/compose-watcher --config /opt/compose-watcher/compose-watcher.toml
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/opt/compose-watcher

[Install]
WantedBy=multi-user.target
2 changes: 1 addition & 1 deletion src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use clap::Parser;
#[command(version, about, long_about = None)]
pub struct Args {
/// Path to the config file.
#[arg(short, long, default_value = "contpose.toml")]
#[arg(short, long, default_value = "compose-watcher.toml")]
pub config: PathBuf,
}

Expand Down

0 comments on commit b9b0780

Please sign in to comment.