diff options
-rw-r--r-- | .github/workflows/debian.yml | 26 | ||||
-rw-r--r-- | .github/workflows/ppa.yml | 34 | ||||
-rw-r--r-- | debian/.gitignore | 2 | ||||
-rw-r--r-- | debian/Makefile | 105 | ||||
-rw-r--r-- | debian/README.Debian | 54 | ||||
-rw-r--r-- | debian/Vagrantfile | 84 | ||||
-rw-r--r-- | debian/changelog | 154 | ||||
-rw-r--r-- | debian/control | 14 | ||||
-rw-r--r-- | debian/copyright | 31 | ||||
-rw-r--r-- | debian/gbp.conf | 7 | ||||
-rw-r--r-- | debian/install | 8 | ||||
-rw-r--r-- | debian/links | 3 | ||||
-rwxr-xr-x | debian/rules | 3 | ||||
-rw-r--r-- | debian/source/format | 1 |
14 files changed, 526 insertions, 0 deletions
diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml new file mode 100644 index 0000000..762071c --- /dev/null +++ b/.github/workflows/debian.yml @@ -0,0 +1,26 @@ +name: Packages (Debian) + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + name: Binary package + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Install dependencies + run: sudo make -C debian deps + - name: Build binary package + run: make -C debian bin/test + - name: Upload binary package + uses: actions/upload-artifact@v3 + with: + name: build-area + path: debian/build-area/ + if-no-files-found: error diff --git a/.github/workflows/ppa.yml b/.github/workflows/ppa.yml new file mode 100644 index 0000000..921d626 --- /dev/null +++ b/.github/workflows/ppa.yml @@ -0,0 +1,34 @@ +name: Publish (Launchpad) + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + name: Upload to PPA + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: '${{ secrets.GPG_PRIVATE_KEY }}' + passphrase: '${{ secrets.GPG_PASSPHRASE }}' + - name: Install dependencies + run: sudo make -C debian deps + - name: Create cowbuilder image + run: sudo make -C debian dist/create + - name: Build binary package + run: make -C debian dist + - name: Clean the build area + run: make -C debian clean + - name: Build source package + run: make -C debian src + - name: Upload to PPA + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/debian/') + run: make -C debian upload diff --git a/debian/.gitignore b/debian/.gitignore new file mode 100644 index 0000000..3eb2fb2 --- /dev/null +++ b/debian/.gitignore @@ -0,0 +1,2 @@ +build-area/ +.vagrant/ diff --git a/debian/Makefile b/debian/Makefile new file mode 100644 index 0000000..c254c19 --- /dev/null +++ b/debian/Makefile @@ -0,0 +1,105 @@ +MAKEFLAGS += --no-builtin-rules --no-builtin-variables --warn-undefined-variables +unexport MAKEFLAGS +.DEFAULT_GOAL := all +.DELETE_ON_ERROR: +.SUFFIXES: +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c + +escape = $(subst ','\'',$(1)) + +define noexpand +ifeq ($$(origin $(1)),environment) + $(1) := $$(value $(1)) +endif +ifeq ($$(origin $(1)),environment override) + $(1) := $$(value $(1)) +endif +ifeq ($$(origin $(1)),command line) + override $(1) := $$(value $(1)) +endif +endef + +NAME ?= Egor Tensin +EMAIL ?= Egor.Tensin@gmail.com +PPA_OWNER ?= egor-tensin +PPA_NAME ?= config-links +GPG_KEY ?= 3B3EF1235420917E0DB0723991D679FB92B036CB +DIST ?= focal + +$(eval $(call noexpand,NAME)) +$(eval $(call noexpand,EMAIL)) +$(eval $(call noexpand,PPA_OWNER)) +$(eval $(call noexpand,PPA_NAME)) +$(eval $(call noexpand,GPG_KEY)) +$(eval $(call noexpand,DIST)) + +export NAME +export EMAIL + +this_dir := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) +root := $(this_dir)/.. +build_area := $(this_dir)/build-area + +.PHONY: DO +DO: + +.PHONY: deps +deps: + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends build-essential cowbuilder devscripts dh-make dput git-buildpackage vim + +.PHONY: dch +dch: + gbp dch --distribution=unstable + +.PHONY: commit +commit: + cd -- '$(call escape,$(root))' && \ + version="$$( dpkg-parsechangelog --show-field Version )" && \ + git commit -m "debian: $$version" + +.PHONY: tag +tag: + cd -- '$(call escape,$(root))' && gbp buildpackage --git-tag-only + +.PHONY: src/test +src/test: + cd -- '$(call escape,$(root))' && gbp buildpackage -S --no-sign --git-ignore-new + +.PHONY: src +src: + cd -- '$(call escape,$(root))' && gbp buildpackage -S '-k0x$(call escape,$(GPG_KEY))' --changes-option=-sa + +.PHONY: bin/test +bin/test: + cd -- '$(call escape,$(root))' && gbp buildpackage -b --no-sign --git-ignore-new + +.PHONY: bin +bin: + cd -- '$(call escape,$(root))' && gbp buildpackage -b '-k0x$(call escape,$(GPG_KEY))' + +.PHONY: dist/create +dist/create: + cd -- '$(call escape,$(root))' && env 'DIST=$(call escape,$(DIST))' git-pbuilder create + +.PHONY: dist/update +dist/update: + cd -- '$(call escape,$(root))' && env 'DIST=$(call escape,$(DIST))' git-pbuilder update + +.PHONY: dist/test +dist/test: + cd -- '$(call escape,$(root))' && gbp buildpackage --git-ignore-new --git-pbuilder '--git-dist=$(call escape,$(DIST))' + +.PHONY: dist +dist: + cd -- '$(call escape,$(root))' && gbp buildpackage --git-pbuilder '--git-dist=$(call escape,$(DIST))' + cd -- '$(call escape,$(root))' && debsign '-k0x$(call escape,$(GPG_KEY))' --debs-dir '$(call escape,$(build_area))' + +.PHONY: upload +upload: + find '$(call escape,$(build_area))' -type f -name '*.changes' -exec dput '$(call escape,ppa:$(PPA_OWNER)/$(PPA_NAME)/ubuntu/$(DIST))' {} ';' + +.PHONY: clean +clean: + rm -rf -- '$(call escape,$(build_area))' diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..1f259f7 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,54 @@ +config-links for Debian +---------------------- + +There's a Vagrantfile to make maintenance easier. To start, use `vagrant up`, +then `vagrant ssh`. + +There're a bunch of useful one-liners in Makefile. Everything is built in +debian/build-area/. + + * Merge the new version to the debian branch: + + git merge TAG + + * Add a changelog entry (you'll need to fix the version manually): + + make dch + + * To test, make a source package: + + make src + make src/test # Ignores uncommitted changes. + + * To test, make a binary package: + + make bin + make bin/test # Ignores uncommmited changes. + + * Commit the changes: + + git add changelog + make commit + make tag + + * You can push the changes to GitHub now, and it should take care of the + rest. Otherwise, you can upload the package to Launchpad manually as + described below. + + * Upload the source package to the PPA: + + make upload + + To make the package available for different Ubuntu distributions, copy the + package binaries on Launchpad. I dread the day when this becomes + impossible. + + * Make a binary package using pbuilder (useful for testing that the package + builds on a particular distribution): + + make dist/create DIST=focal + make dist/update DIST=focal + make dist DIST=focal + make dist/test DIST=focal # Ignores uncommitted changes. + + -- Egor Tensin <Egor.Tensin@gmail.com> Wed, 28 Apr 2021 21:14:04 +0000 diff --git a/debian/Vagrantfile b/debian/Vagrantfile new file mode 100644 index 0000000..ab1decb --- /dev/null +++ b/debian/Vagrantfile @@ -0,0 +1,84 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +NAME = 'Egor Tensin' +EMAIL = 'Egor.Tensin@gmail.com' +GPG_KEY = '3B3EF1235420917E0DB0723991D679FB92B036CB' +UID = Process.euid + +Vagrant.configure("2") do |config| + config.vm.box = "generic/ubuntu2004" + + # Weirdly enough, VirtualBox's shared folders didn't quite work for me. + # gbp buildpackage would just exit with FileExistsError, which doesn't + # happen with NFS shares. + config.vm.synced_folder "../", "/vagrant", type: "nfs" + + config.vm.provider "libvirt" do |v| + v.cpus = 2 + v.memory = 4096 + end + + # Working with the git repository: + config.vm.provision "shell", privileged: false, inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +git config --global user.name '#{NAME}' +git config --global user.email '#{EMAIL}' + SHELL + config.ssh.forward_agent = true + + # Set DEB* environment variables: + config.vm.provision "shell", privileged: false, inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +tee -a ~/.bashrc <<'EOF' +export DEBFULLNAME='#{NAME}' +export DEBEMAIL='#{EMAIL}' +EOF + SHELL + + # gpg-agent forwarding (https://wiki.gnupg.org/AgentForwarding): + config.vm.provision "shell", privileged: false, inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +gpg --keyserver hkp://keyserver.ubuntu.com/ --recv-keys '0x#{GPG_KEY}' +gpg --import-ownertrust <<'EOF' +#{GPG_KEY}:6: +EOF + SHELL + config.vm.provision "shell", inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +echo 'StreamLocalBindUnlink yes' >> /etc/ssh/sshd_config + SHELL + # "agent-extra-socket" on the host. + local_gpg_socket = one_line(run('gpgconf', '--list-dirs', 'agent-extra-socket')) + # "agent-socket" on the VM. + remote_gpg_socket = "/run/user/#{UID}/gnupg/S.gpg-agent" + config.ssh.extra_args = ['-R', "#{remote_gpg_socket}:#{local_gpg_socket}"] + + # Install the required packages: + config.vm.provision "shell", inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +apt-get update && apt-get install -y make +cd /vagrant/debian && make deps + SHELL + + config.vm.provision :reload +end + +require "open3" + +def run(*cmd) + stdout, stderr, status = Open3.capture3(*cmd) + abort stderr unless status.success? + stdout +end + +def one_line(output) + lines = output.lines.map(&:chomp) + abort "Must be a single line: #{lines}" unless lines.length == 1 + lines.first +end diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..dbca849 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,154 @@ +config-links (2.0.3-5) unstable; urgency=medium + + * workflows: prettify? + * debian/Makefile: use cd instead of pushd + * debian/Makefile: escape entire argument (including $(DIST)) + * debian/Makefile: use long options + * debian/Makefile: --build=X doesn't work? + * debian/Makefile: install vim as a dependency + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 04 Feb 2023 20:01:27 +0000 + +config-links (2.0.3-4) unstable; urgency=medium + + * debian: upgrade cowbuilder image to Focal + * debian: force inclusion of the original sources + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 04 Feb 2023 19:18:40 +0000 + +config-links (2.0.3-3) unstable; urgency=medium + + * workflows/ppa: do it on commits also + * debian: shut up dh_auto_build + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 04 Feb 2023 18:18:37 +0000 + +config-links (2.0.3-2) unstable; urgency=medium + + * debian: disable build system auto-detection + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 04 Feb 2023 12:36:48 +0000 + +config-links (2.0.3-1) unstable; urgency=medium + + * debian/README: update + * accomodate older bash-es + * add Docker tests for older bash-es + * move unit tests to test/unit/ + * test/unit: fix path to links-* tools + * fix Docker tests + * properly rebuild Docker images + * README: update + * README: update + * Makefile: add a comment + * add an "integration" test + * db.sh: fix Xenial tests + * t/i: call links-update twice, just in case + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 04 Feb 2023 11:42:19 +0000 + +config-links (2.0.2-1) unstable; urgency=medium + + * workflows/ci: upgrade actions + * workflows: upgrade actions + * fix .gitattributes + * workflows/ci: test on macOS + * os.sh: no need to use uname here + * test: fix macOS runs + * README: update + + -- Egor Tensin <Egor.Tensin@gmail.com> Tue, 24 Jan 2023 11:18:40 +0100 + +config-links (2.0.1-3) unstable; urgency=medium + + * debian/Makefile: export NAME and EMAIL + * debian/Makefile: add commit target + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 30 Apr 2022 00:35:34 +0200 + +config-links (2.0.1-2) unstable; urgency=medium + + * debian/README: rearrange items + * debian/Makefile: consistent prelude + + -- Egor Tensin <Egor.Tensin@gmail.com> Wed, 06 Apr 2022 08:22:28 +0000 + +config-links (2.0.1-1) unstable; urgency=medium + + * test: refactoring + * test: add a test case + * bash best practices & linting + * README: update + * test: update comments + + -- Egor Tensin <Egor.Tensin@gmail.com> Tue, 05 Apr 2022 19:19:52 +0000 + +config-links (2.0-1) unstable; urgency=medium + + * db.sh: consistent logging + * db.sh: add parse_mode function + * links-chmod: mode parameter is mandatory + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 06 Jan 2022 17:32:23 +0000 + +config-links (1.1-2) unstable; urgency=medium + + * debian: add links-chmod + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 25 Nov 2021 19:13:59 +0000 + +config-links (1.1-1) unstable; urgency=medium + + * update script names in comments + * add links-chmod + * links-chmod: tweak the help message + * db.sh: add more logging + * test/test.sh: best practices + * links-update: add --mode parameter + * README: update + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 25 Nov 2021 19:07:06 +0000 + +config-links (1.0.1-1) unstable; urgency=medium + + * README: update + * workflows/test: tweak step names + * workflows/test: use ubuntu-latest + * workflows/test -> workflows/ci + * workflows/ci: rename to "CI" + * .ci/ -> test/ + * debian/Makefile: apt scripting best practices + * debian/README: update + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 03 Oct 2021 16:20:54 +0000 + +config-links (1.0-2) unstable; urgency=medium + + * debian: fix package description + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 29 Apr 2021 10:15:54 +0000 + +config-links (1.0-1) unstable; urgency=medium + + * debian: require bash 4 or higher + * rename the scripts + * README: add more badges + * README: update + * README: add "Installation" + * rename the project + * debian: scripts were renamed + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 29 Apr 2021 08:35:34 +0000 + +config-links (0.2-1) unstable; urgency=medium + + * debian: add GitHub workflows + * blacklist aux files for `git archive` + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 29 Apr 2021 00:30:39 +0000 + +config-links (0.1-1) unstable; urgency=medium + + * Initial release. + + -- Egor Tensin <Egor.Tensin@gmail.com> Wed, 28 Apr 2021 21:14:04 +0000 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..79c5dc0 --- /dev/null +++ b/debian/control @@ -0,0 +1,14 @@ +Source: config-links +Section: utils +Priority: optional +Maintainer: Egor Tensin <Egor.Tensin@gmail.com> +Build-Depends: debhelper-compat (= 10) +Standards-Version: 4.4.1 +Homepage: https://github.com/egor-tensin/config-links + +Package: config-links +Architecture: all +Depends: bash (>= 4.0), ${misc:Depends} +Description: Config file sharing + Store your files in a repository, checkout it on any machine, and easily + create & maintain symlinks to all of them. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..6fd52f2 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,31 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: config-links +Upstream-Contact: Egor Tensin <Egor.Tensin@gmail.com> +Source: https://github.com/egor-tensin/config-links + +Files: * +Copyright: 2016-2021 Egor Tensin <Egor.Tensin@gmail.com> +License: MIT + +Files: debian/* +Copyright: 2021 Egor Tensin <Egor.Tensin@gmail.com> +License: MIT + +License: MIT + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 0000000..e7faaa2 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,7 @@ +[DEFAULT] +upstream-tag = v%(version)s +ignore-branch = True +debian-branch = debian +debian-tag = debian/v%(version)s +pristine-tar = False +export-dir = debian/build-area/ diff --git a/debian/install b/debian/install new file mode 100644 index 0000000..2acc950 --- /dev/null +++ b/debian/install @@ -0,0 +1,8 @@ +LICENSE.txt usr/share/config-links + +README.md usr/share/doc/config-links + +links-update usr/lib/config-links +links-remove usr/lib/config-links +links-chmod usr/lib/config-links +src usr/lib/config-links diff --git a/debian/links b/debian/links new file mode 100644 index 0000000..7e77bbd --- /dev/null +++ b/debian/links @@ -0,0 +1,3 @@ +usr/lib/config-links/links-update usr/bin/links-update +usr/lib/config-links/links-remove usr/bin/links-remove +usr/lib/config-links/links-chmod usr/bin/links-chmod diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..43896d7 --- /dev/null +++ b/debian/rules @@ -0,0 +1,3 @@ +#!/usr/bin/make -f +%: + dh $@ --buildsystem=none diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) |