From 4a245a51e4ac8283cf3ef70bc8a040e800b94fbb Mon Sep 17 00:00:00 2001 From: iBug Date: Tue, 23 Jul 2024 21:24:53 +0800 Subject: [PATCH 1/3] Add "deb" Makefile target --- .gitignore | 2 ++ Makefile | 16 ++++++++++++++++ deploy/yukid.service | 12 ------------ etc/daemon.example.toml | 24 ++++++++++++++++++++++++ etc/debian-control | 9 +++++++++ etc/yukid.service | 18 ++++++++++++++++++ 6 files changed, 69 insertions(+), 12 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/.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..9fd12a1 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +.PHONY: all +all: yukid yukictl + .PHONY: lint lint: golangci-lint run --fix ./... @@ -27,3 +30,16 @@ yukictl: -X github.com/ustclug/Yuki/pkg/info.GitCommit=$(git_commit) \ -X github.com/ustclug/Yuki/pkg/info.Version=$(version)" \ -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 + $(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 --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 From 0979be803e1edd410cf2797408a0f080244d31bc Mon Sep 17 00:00:00 2001 From: iBug Date: Tue, 23 Jul 2024 23:16:59 +0800 Subject: [PATCH 2/3] Change Actions workflow to publish deb packages --- .github/workflows/release.yml | 18 ++++++------------ Makefile | 22 +++++++++++++--------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e3edb6a..275064a 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 @@ -51,11 +47,9 @@ jobs: push: true tags: ghcr.io/ustclug/yukid:${{ github.ref_name }} - # More assembly might be required: Docker logins, GPG, etc. - # It all depends on your needs. - - uses: goreleaser/goreleaser-action@v6 + - uses: softprops/action-gh-release@v1 with: - version: latest - args: release --clean - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + files: | + yukid + yukictl + yuki*.deb diff --git a/Makefile b/Makefile index 9fd12a1..42e9a02 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,10 @@ .PHONY: all all: yukid yukictl +.PHONY: clean +clean: + rm -f yukid yukictl *.deb + .PHONY: lint lint: golangci-lint run --fix ./... @@ -17,19 +21,18 @@ 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 @@ -39,7 +42,8 @@ deb: | yukid yukictl 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 --build -Zxz $(deb_dir) . + dpkg-deb --root-owner-group --build -Zxz $(deb_dir) . From aa5fddc8b1275e7d48d9255dd2cb87284753a939 Mon Sep 17 00:00:00 2001 From: iBug Date: Tue, 23 Jul 2024 23:22:32 +0800 Subject: [PATCH 3/3] Restore goreleaser-action --- .github/workflows/release.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 275064a..0a198eb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -47,9 +47,16 @@ jobs: push: true tags: ghcr.io/ustclug/yukid:${{ github.ref_name }} + # More assembly might be required: Docker logins, GPG, etc. + # It all depends on your needs. + - uses: goreleaser/goreleaser-action@v6 + with: + version: latest + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: softprops/action-gh-release@v1 with: files: | - yukid - yukictl yuki*.deb