cleanups
This commit is contained in:
1 parent
fb5f01d291
commit
7168bc4683
10 files changed
+370
-72
No files matched your search
@@ -0,0 +1,115 @@
|
||||
from pathlib import Path
|
||||
import os
|
||||
import subprocess
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
class CleanupRetentionTests(unittest.TestCase):
|
||||
def test_runtime_target_is_not_persistent_data(self):
|
||||
dockerfile = (ROOT / "Dockerfile").read_text()
|
||||
entrypoint = (ROOT / "scripts/entrypoint.sh").read_text()
|
||||
build = (ROOT / "scripts/build-release.sh").read_text()
|
||||
|
||||
runtime = dockerfile.split("# Cargo registry/git cache stays persistent", 1)[1]
|
||||
self.assertIn("CARGO_HOME=/var/lib/package-builder/cargo", runtime)
|
||||
self.assertIn("CARGO_TARGET_DIR=/tmp/rust-package-builder/cargo-target", runtime)
|
||||
self.assertIn("GOCACHE=/tmp/rust-package-builder/go-cache", dockerfile)
|
||||
self.assertNotIn("CARGO_TARGET_DIR=/var/lib/package-builder/cargo/target", runtime)
|
||||
self.assertNotIn("GOCACHE=/var/lib/package-builder/go/cache", dockerfile)
|
||||
self.assertIn('export CARGO_TARGET_DIR="$BUILD_TMP_DIR/cargo-target"', entrypoint)
|
||||
self.assertIn('rm -rf -- "$DATA_DIR/cargo/target" "$DATA_DIR/go/cache"', entrypoint)
|
||||
self.assertIn('WORK="$BUILD_TMP_DIR/work/$BUILD_ID"', build)
|
||||
self.assertIn('if is_true "${CLEAN_BUILD_CACHE:-1}"; then', build)
|
||||
self.assertIn('rm -rf -- "$CARGO_TARGET_DIR" "${GOCACHE:-$BUILD_TMP_DIR/go-cache}"', build)
|
||||
|
||||
def test_default_retention_is_ten_and_exported_to_compose(self):
|
||||
env = (ROOT / ".env.example").read_text()
|
||||
compose = (ROOT / "docker-compose.yml").read_text()
|
||||
entrypoint = (ROOT / "scripts/entrypoint.sh").read_text()
|
||||
|
||||
self.assertIn("RELEASE_RETENTION=10", env)
|
||||
self.assertIn("PACKAGE_RETENTION=10", env)
|
||||
self.assertIn("CLEAN_BUILD_CACHE=1", env)
|
||||
self.assertIn('RELEASE_RETENTION: "${RELEASE_RETENTION:-10}"', compose)
|
||||
self.assertIn('PACKAGE_RETENTION: "${PACKAGE_RETENTION:-10}"', compose)
|
||||
self.assertIn('CLEAN_BUILD_CACHE: "${CLEAN_BUILD_CACHE:-1}"', compose)
|
||||
self.assertIn('RELEASE_RETENTION=${RELEASE_RETENTION:-10}', entrypoint)
|
||||
self.assertIn('PACKAGE_RETENTION=${PACKAGE_RETENTION:-10}', entrypoint)
|
||||
|
||||
def test_linux_retention_and_aptly_cleanup_are_enabled(self):
|
||||
linux = (ROOT / "scripts/build-linux-release.sh").read_text()
|
||||
self.assertIn('package_retention=${PACKAGE_RETENTION:-10}', linux)
|
||||
self.assertIn("'rustproxy-docker-agent_*.deb'", linux)
|
||||
self.assertIn("'rustproxy-docker-agent-*.x86_64.rpm'", linux)
|
||||
self.assertIn('repo add -force-replace package-builder "$DATA_DIR/packages/deb"', linux)
|
||||
self.assertIn('snapshot list -raw', linux)
|
||||
self.assertIn('aptly -config="$APTLY_CONF" db cleanup', linux)
|
||||
self.assertIn('--link-dest="$CURRENT_TARGET/apt/"', linux)
|
||||
self.assertIn('--link-dest="$CURRENT_TARGET/rpm/"', linux)
|
||||
self.assertIn('--link-dest="$CURRENT_TARGET/suse/"', linux)
|
||||
|
||||
def test_package_retention_keeps_ten_versions_per_product(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
rpm = root / "rpm"
|
||||
rpm.mkdir()
|
||||
for idx in range(12):
|
||||
main = rpm / f"rustproxy-0.2.{idx}-1.x86_64.rpm"
|
||||
agent = rpm / f"rustproxy-docker-agent-0.2.{idx}-1.x86_64.rpm"
|
||||
main.write_bytes(b"main")
|
||||
agent.write_bytes(b"agent")
|
||||
ts = 1_700_000_000 + idx
|
||||
os.utime(main, (ts, ts))
|
||||
os.utime(agent, (ts, ts))
|
||||
|
||||
script = "\n".join([
|
||||
"set -Eeuo pipefail",
|
||||
f"source {ROOT / 'scripts/lib.sh'}",
|
||||
f"prune_package_files {rpm} 'rustproxy-*.x86_64.rpm' 10 'rustproxy-docker-agent-*.x86_64.rpm'",
|
||||
f"prune_package_files {rpm} 'rustproxy-docker-agent-*.x86_64.rpm' 10",
|
||||
])
|
||||
subprocess.run(["bash", "-lc", script], check=True)
|
||||
|
||||
main = [p for p in rpm.glob("rustproxy-*.x86_64.rpm") if not p.name.startswith("rustproxy-docker-agent-")]
|
||||
agent = list(rpm.glob("rustproxy-docker-agent-*.x86_64.rpm"))
|
||||
self.assertEqual(len(main), 10)
|
||||
self.assertEqual(len(agent), 10)
|
||||
self.assertFalse((rpm / "rustproxy-0.2.0-1.x86_64.rpm").exists())
|
||||
self.assertFalse((rpm / "rustproxy-docker-agent-0.2.0-1.x86_64.rpm").exists())
|
||||
self.assertTrue((rpm / "rustproxy-0.2.11-1.x86_64.rpm").exists())
|
||||
self.assertTrue((rpm / "rustproxy-docker-agent-0.2.11-1.x86_64.rpm").exists())
|
||||
|
||||
def test_release_retention_keeps_newest_ten(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
releases = Path(tmp) / "releases"
|
||||
releases.mkdir()
|
||||
for idx in range(12):
|
||||
path = releases / f"release-{idx:02d}"
|
||||
path.mkdir()
|
||||
ts = 1_700_000_000 + idx
|
||||
os.utime(path, (ts, ts))
|
||||
|
||||
protected = releases / "release-11"
|
||||
script = "\n".join([
|
||||
"set -Eeuo pipefail",
|
||||
f"source {ROOT / 'scripts/lib.sh'}",
|
||||
f"prune_release_dirs {releases} 10 {protected}",
|
||||
])
|
||||
subprocess.run(["bash", "-lc", script], check=True)
|
||||
|
||||
remaining = sorted(p.name for p in releases.iterdir() if p.is_dir())
|
||||
self.assertEqual(len(remaining), 10)
|
||||
self.assertNotIn("release-00", remaining)
|
||||
self.assertNotIn("release-01", remaining)
|
||||
self.assertIn("release-11", remaining)
|
||||
|
||||
def test_packaging_revision_forces_one_new_linux_build(self):
|
||||
lib = (ROOT / "scripts/lib.sh").read_text()
|
||||
self.assertIn("PACKAGING_REVISION=7", lib)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user