From 76f16f5b427e3cbe20a003feeff7db9b4ec735fe Mon Sep 17 00:00:00 2001 From: iBug Date: Tue, 23 Jul 2024 23:26:12 +0800 Subject: [PATCH] Add "deb" Makefile target (#84) --- .github/workflows/release.yml | 11 ++++++----- .gitignore | 2 ++ Makefile | 36 +++++++++++++++++++++++++++-------- deploy/yukid.service | 12 ------------ etc/daemon.example.toml | 24 +++++++++++++++++++++++ etc/debian-control | 9 +++++++++ etc/yukid.service | 18 ++++++++++++++++++ 7 files changed, 87 insertions(+), 25 deletions(-) delete mode 100644 deploy/yukid.service create mode 100644 etc/daemon.example.toml create mode 100644 etc/debian-control create mode 100644 etc/yukid.service diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e3edb6a..0a198eb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,10 +20,6 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: stable - - name: Install Go uses: actions/setup-go@v5 with: @@ -42,7 +38,7 @@ jobs: - name: Build yukid run: | - CGO_ENABLED=0 make yukid + CGO_ENABLED=0 make yukid yukictl deb - name: Build and Push Image uses: docker/build-push-action@v6 @@ -59,3 +55,8 @@ jobs: args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - uses: softprops/action-gh-release@v1 + with: + files: | + yuki*.deb diff --git a/.gitignore b/.gitignore index f3a40ea..735eaef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ # Build output files /yukictl /yukid +/*.deb .idea/ +/debian/ dist/ *.swp diff --git a/Makefile b/Makefile index da91176..42e9a02 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,10 @@ +.PHONY: all +all: yukid yukictl + +.PHONY: clean +clean: + rm -f yukid yukictl *.deb + .PHONY: lint lint: golangci-lint run --fix ./... @@ -14,16 +21,29 @@ git_commit := $(shell git rev-parse HEAD) build_date := $(shell date -u +'%Y-%m-%dT%H:%M:%SZ') version ?= $(shell git describe --tags) +go_ldflags := -s -w \ + -X github.com/ustclug/Yuki/pkg/info.BuildDate=$(build_date) \ + -X github.com/ustclug/Yuki/pkg/info.GitCommit=$(git_commit) \ + -X github.com/ustclug/Yuki/pkg/info.Version=$(version) + .PHONY: yukid yukid: - go build -ldflags "-X github.com/ustclug/Yuki/pkg/info.BuildDate=$(build_date) \ - -X github.com/ustclug/Yuki/pkg/info.GitCommit=$(git_commit) \ - -X github.com/ustclug/Yuki/pkg/info.Version=$(version)" \ - -trimpath ./cmd/yukid + go build -ldflags "$(go_ldflags)" -trimpath ./cmd/yukid .PHONY: yukictl yukictl: - go build -ldflags "-X github.com/ustclug/Yuki/pkg/info.BuildDate=$(build_date) \ - -X github.com/ustclug/Yuki/pkg/info.GitCommit=$(git_commit) \ - -X github.com/ustclug/Yuki/pkg/info.Version=$(version)" \ - -trimpath ./cmd/yukictl + go build -ldflags "$(go_ldflags)" -trimpath ./cmd/yukictl + +.PHONY: deb + +deb_dir := $(shell mktemp -d) +deb: | yukid yukictl + mkdir -p $(addprefix $(deb_dir)/, DEBIAN etc/bash_completion.d etc/yuki lib/systemd/system usr/local/bin) + cp etc/daemon.example.toml $(deb_dir)/etc/yuki + cp etc/yukid.service $(deb_dir)/lib/systemd/system + cp yukid yukictl $(deb_dir)/usr/local/bin + ln -s yukictl $(deb_dir)/usr/local/bin/yuki + $(deb_dir)/usr/local/bin/yukictl completion bash > $(deb_dir)/etc/bash_completion.d/yukictl + sed "s/\$$VERSION\>/$(version)/g;s/^Version: v/Version: /g;s/\$$ARCH\>/$(shell go env GOARCH)/g" \ + etc/debian-control > $(deb_dir)/DEBIAN/control + dpkg-deb --root-owner-group --build -Zxz $(deb_dir) . diff --git a/deploy/yukid.service b/deploy/yukid.service deleted file mode 100644 index 6dfeaf2..0000000 --- a/deploy/yukid.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Sync Local Repos With Remote -After=docker.service -Requires=docker.service -PartOf=docker.service - -[Service] -User=mirror -ExecStart=/usr/local/bin/yukid - -[Install] -WantedBy=multi-user.target diff --git a/etc/daemon.example.toml b/etc/daemon.example.toml new file mode 100644 index 0000000..e580cf2 --- /dev/null +++ b/etc/daemon.example.toml @@ -0,0 +1,24 @@ +debug = false + +listen_addr = "127.0.0.1:9999" +db_url = "/home/mirror/yukid.db" +repo_config_dir = "/home/mirror/repos/" + +fs = "zfs" + +# uid:gid +owner = "1000:1000" + +log_file = "/home/mirror/log/yukid.log" +repo_logs_dir = "/home/mirror/log/" +log_level = "error" + +bind_ip = "0.0.0.0" + +name_prefix = "syncing-" + +images_upgrade_interval = "1h" + +post_sync = ["/home/mirror/scripts/post_sync.sh"] + +sync_timeout = "48h" diff --git a/etc/debian-control b/etc/debian-control new file mode 100644 index 0000000..457fb7d --- /dev/null +++ b/etc/debian-control @@ -0,0 +1,9 @@ +Package: yuki +Version: $VERSION +Architecture: $ARCH +Priority: optional +Section: admin +Maintainer: USTC LUG +Homepage: https://github.com/ustclug/Yuki +Depends: docker-engine | docker.io | docker-ce +Description: USTC Mirror Manager diff --git a/etc/yukid.service b/etc/yukid.service new file mode 100644 index 0000000..f41e3a3 --- /dev/null +++ b/etc/yukid.service @@ -0,0 +1,18 @@ +[Unit] +Description=Yuki - USTC Mirror Manager +After=docker.service +Requires=docker.service +PartOf=docker.service +ConditionPathExists=/etc/yuki/daemon.toml + +[Service] +Type=exec +User=mirror +ExecStart=/usr/local/bin/yukid +ExecReload=/usr/local/bin/yukictl reload +Restart=on-failure +RestartSec=5 + +[Install] +Alias=yuki.service +WantedBy=multi-user.target