66 lines
2.6 KiB
Bash
Executable File
66 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Offline verification of the agent-specific nFPM packaging pipeline.
|
|
set -Eeuo pipefail
|
|
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
WORK=$(mktemp -d)
|
|
trap 'rm -rf "$WORK"' EXIT
|
|
SRC=${1:-}
|
|
if [[ ! -d "${SRC:-}/docker-agent" ]]; then
|
|
SRC="$WORK/source"
|
|
mkdir -p "$SRC/docker-agent"
|
|
cat > "$SRC/docker-agent/rustproxy-docker-agent.service" <<'UNIT'
|
|
[Service]
|
|
User=rustproxy-docker-agent
|
|
Group=docker
|
|
EnvironmentFile=/etc/rustproxy/docker-agent.env
|
|
ExecStart=/usr/local/bin/rustproxy-docker-agent
|
|
StateDirectory=rustproxy-docker-agent
|
|
UNIT
|
|
cat > "$SRC/docker-agent/docker-agent.env.example" <<'ENV'
|
|
RUSTPROXY_DOCKER_AGENT_TOKEN=replace-with-at-least-24-random-characters
|
|
ENV
|
|
echo '# Docker Agent' > "$SRC/docker-agent/README.md"
|
|
fi
|
|
if [[ -f "$SRC/docker-agent/go.mod" && $(command -v go || true) ]]; then
|
|
(cd "$SRC/docker-agent" && GOWORK=off CGO_ENABLED=0 go test ./... && \
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -o "$WORK/agent" .)
|
|
else
|
|
cat > "$WORK/agent" <<'MOCK'
|
|
#!/bin/sh
|
|
exit 0
|
|
MOCK
|
|
chmod 0755 "$WORK/agent"
|
|
fi
|
|
export BUILDER_ROOT="$ROOT" VERSION=0.34.2 PACKAGE_RELEASE=4
|
|
export MAINTAINER='Package QA <qa@example.invalid>' HOMEPAGE=https://example.invalid
|
|
export GPG_PRIVATE_KEY_FILE="$WORK/test-key.asc"
|
|
"$ROOT/scripts/prepare-agent-package.sh" "$SRC" "$WORK/package" "$WORK/agent"
|
|
PKG="$WORK/package"
|
|
test -x "$PKG/payload/usr/bin/rustproxy-docker-agent"
|
|
grep -Fqx 'ExecStart=/usr/bin/rustproxy-docker-agent' "$PKG/payload/usr/lib/systemd/system/rustproxy-docker-agent.service"
|
|
grep -Fq 'config|noreplace' "$PKG/nfpm-deb.yaml"
|
|
grep -Fq 'config|noreplace' "$PKG/nfpm-rpm.yaml"
|
|
grep -q 'type: origin' "$PKG/nfpm-deb.yaml"
|
|
grep -q 'signature:' "$PKG/nfpm-rpm.yaml"
|
|
! grep -q '\.pkg' "$PKG/nfpm-deb.yaml"
|
|
for script in "$PKG"/scripts/*; do sh -n "$script"; done
|
|
for script in "$PKG"/scripts/*postinstall.sh; do
|
|
grep -Fq '/usr/bin/rustproxy-docker-agent init' "$script"
|
|
grep -Fq 'systemctl enable rustproxy-docker-agent.service' "$script"
|
|
done
|
|
if python3 -c 'import yaml' >/dev/null 2>&1; then
|
|
python3 - "$PKG" <<'PY_YAML'
|
|
import yaml, pathlib, sys
|
|
pkg=pathlib.Path(sys.argv[1])
|
|
for kind in ('deb','rpm'):
|
|
x=yaml.safe_load((pkg/f'nfpm-{kind}.yaml').read_text())
|
|
assert x['name']=='rustproxy-docker-agent'
|
|
assert x['version']=='0.34.2'
|
|
assert x['arch']=='amd64'
|
|
assert len(x['contents'])==4
|
|
assert x['scripts']['postinstall']
|
|
assert any(c['dst']=='/etc/rustproxy/docker-agent.env' and c['type']=='config|noreplace' for c in x['contents'])
|
|
PY_YAML
|
|
fi
|
|
echo 'Docker Agent package manifests, service layout and lifecycle scripts: OK'
|