diff options
Diffstat (limited to '')
-rw-r--r-- | .github/workflows/debian.yml | 26 | ||||
-rw-r--r-- | .github/workflows/ppa.yml | 30 | ||||
-rw-r--r-- | debian/.gitignore | 2 | ||||
-rw-r--r-- | debian/Makefile | 93 | ||||
-rw-r--r-- | debian/README.Debian | 48 | ||||
-rw-r--r-- | debian/Vagrantfile | 84 | ||||
-rw-r--r-- | debian/changelog | 89 | ||||
-rw-r--r-- | debian/control | 14 | ||||
-rw-r--r-- | debian/copyright | 39 | ||||
-rw-r--r-- | debian/gbp.conf | 7 | ||||
-rw-r--r-- | debian/install | 11 | ||||
l--------- | debian/linux-status.service | 1 | ||||
-rwxr-xr-x | debian/rules | 3 | ||||
-rw-r--r-- | debian/source/format | 1 | ||||
-rw-r--r-- | debian/source/include-binaries | 1 |
15 files changed, 449 insertions, 0 deletions
diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml new file mode 100644 index 0000000..1919048 --- /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@v2 + with: + fetch-depth: 0 + - name: Install dependencies + run: cd debian && sudo make deps + - name: Build binary package + run: cd debian && make bin/test + - name: Upload binary package + uses: actions/upload-artifact@v2 + 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..afc7790 --- /dev/null +++ b/.github/workflows/ppa.yml @@ -0,0 +1,30 @@ +name: Publish (Launchpad) + +on: + push: + tags: 'debian/*' + +jobs: + test: + runs-on: ubuntu-latest + name: Upload to PPA + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v3 + with: + gpg-private-key: '${{ secrets.GPG_PRIVATE_KEY }}' + passphrase: '${{ secrets.GPG_PASSPHRASE }}' + - name: Install dependencies + run: cd debian && sudo make deps + - name: Create cowbuilder image + run: cd debian && sudo make dist/create + - name: Build binary package + run: cd debian && make dist + - name: Build source package + run: cd debian && make clean && make src + - name: Upload to PPA + run: cd debian && make 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..c048207 --- /dev/null +++ b/debian/Makefile @@ -0,0 +1,93 @@ +MAKEFLAGS += --no-builtin-rules --no-builtin-variables --warn-undefined-variables +unexport MAKEFLAGS +.DEFAULT_GOAL := all +.DELETE_ON_ERROR: +.SUFFIXES: +SHELL := bash +# Careful: nounset breaks things, as per usual. +.SHELLFLAGS := -e -o pipefail -c + +.PHONY: DO +DO: + +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 + +PPA_OWNER ?= egor-tensin +PPA_NAME ?= linux-status +GPG_KEY ?= 3B3EF1235420917E0DB0723991D679FB92B036CB +DIST ?= bionic + +$(eval $(call noexpand,PPA_OWNER)) +$(eval $(call noexpand,PPA_NAME)) +$(eval $(call noexpand,GPG_KEY)) +$(eval $(call noexpand,DIST)) + +this_dir := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) +root := $(this_dir)/.. +build_area := $(this_dir)/build-area + +.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 + +.PHONY: dch +dch: + gbp dch --distribution=unstable + +.PHONY: tag +tag: + pushd '$(call escape,$(root))' && gbp buildpackage --git-tag-only + +.PHONY: src/test +src/test: + pushd '$(call escape,$(root))' && gbp buildpackage --git-ignore-new -S -us -uc + +.PHONY: src +src: + pushd '$(call escape,$(root))' && gbp buildpackage -S '-k0x$(call escape,$(GPG_KEY))' + +.PHONY: bin/test +bin/test: + pushd '$(call escape,$(root))' && gbp buildpackage --git-ignore-new -b -us -uc + +.PHONY: bin +bin: + pushd '$(call escape,$(root))' && gbp buildpackage -b '-k0x$(call escape,$(GPG_KEY))' + +.PHONY: dist/create +dist/create: + pushd '$(call escape,$(root))' && env 'DIST=$(call escape,$(DIST))' git-pbuilder create + +.PHONY: dist/update +dist/update: + pushd '$(call escape,$(root))' && env 'DIST=$(call escape,$(DIST))' git-pbuilder update + +.PHONY: dist/test +dist/test: + pushd '$(call escape,$(root))' && gbp buildpackage --git-ignore-new --git-pbuilder '--git-dist=$(call escape,$(DIST))' + +.PHONY: dist +dist: + pushd '$(call escape,$(root))' && gbp buildpackage --git-pbuilder '--git-dist=$(call escape,$(DIST))' + pushd '$(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 'ppa:$(call escape,$(PPA_OWNER))/$(call escape,$(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..d91837e --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,48 @@ +linux-status 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 + + * Make a source package: + + make src + make src/test # Ignores uncommitted changes. + + * Make a binary package: + + make bin + make bin/test # Ignores uncommmited changes. + + * Add a changelog entry (you'll need to fix it manually): + + make dch + + * Tag the last commit in the debian/VERSION format: + + make tag + + * 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> Mon, 08 Mar 2021 07:33:14 +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..35c4004 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,89 @@ +linux-status (1.1.0-1) unstable; urgency=medium + + * fix whitespace + * top: run with -E/-e if supported + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 03 Oct 2021 23:51:18 +0000 + +linux-status (1.0.1-1) unstable; urgency=medium + + * README: badges for all workflows + * workflows/test: linting + * workflows/test: test w/ latest Python + * workflows/test -> workflows/ci + * workflows/ci: rename to "CI" + * index.html: safer DOM generation using jQuery + * debian/Makefile: apt scripting best practices + * debian/README: update + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 03 Oct 2021 15:54:26 +0000 + +linux-status (1.0-3) unstable; urgency=medium + + * debian/Makefile: fix grammar + * debian: install whole directories + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 29 Apr 2021 12:44:31 +0000 + +linux-status (1.0-2) unstable; urgency=medium + + * debian: Makefile best practices + * workflows/debian: error out if no files to upload + * workflows/ppa: rename the workflow + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 18 Apr 2021 11:52:40 +0000 + +linux-status (1.0-1) unstable; urgency=medium + + * test/test.sh: longer startup timeout + * workflows/test.yml: tweak step names + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 13 Mar 2021 07:19:40 +0000 + +linux-status (0.0.2-3) unstable; urgency=medium + + * debian: gbp buildpackage --git-ignore-branch + * workflows: tweak step names + + -- Egor Tensin <Egor.Tensin@gmail.com> Fri, 12 Mar 2021 20:50:55 +0000 + +linux-status (0.0.2-2) unstable; urgency=medium + + * debian: add GitHub workflow + * debian: GitHub workflow to upload to PPA + + -- Egor Tensin <Egor.Tensin@gmail.com> Fri, 12 Mar 2021 20:31:07 +0000 + +linux-status (0.0.2-1) unstable; urgency=medium + + * README: update + * img: update example.png + * debian: update package description + * debian: add example.png to include-binaries + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 08 Mar 2021 08:18:03 +0000 + +linux-status (0.0.1-3) unstable; urgency=medium + + * debian: target the lowest denominator bionic + * debian: lint Vagrantfile + * debian: add README.Debian + * debian: add `make dch` command + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 08 Mar 2021 07:55:46 +0000 + +linux-status (0.0.1-2) unstable; urgency=medium + + * debian: lower debhelper-compat level + * debian: add Vagrantfile for building packages + * debian: more one-liners in Makefile + * debian: set DEB* variables in Vagrantfile + * debian: add `make tag` command + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 07 Mar 2021 23:02:18 +0000 + +linux-status (0.0.1-1) unstable; urgency=medium + + * Initial release. + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 06 Mar 2021 19:48:48 +0000 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..2206d58 --- /dev/null +++ b/debian/control @@ -0,0 +1,14 @@ +Source: linux-status +Section: admin +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/linux-status + +Package: linux-status +Architecture: all +Depends: python3, ${misc:Depends} +Description: Simple Linux status web page + Shows your `top`, systemd units & timers, allows you to reboot the server, + etc. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..334eed6 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,39 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: linux-status +Upstream-Contact: Egor Tensin <Egor.Tensin@gmail.com> +Source: https://github.com/egor-tensin/linux-status + +Files: * +Copyright: 2018-2021 Egor Tensin <Egor.Tensin@gmail.com> +License: MIT + +Files: debian/* +Copyright: 2021 Egor Tensin <Egor.Tensin@gmail.com> +License: MIT + +Files: css/bootstrap.min.css js/bootstrap.bundle.min.js +Copyright: 2011-2018 The Bootstrap Authors +License: MIT + +Files: js/jquery-3.3.1.min.js +Copyright: JS Foundation and other contributors +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..19fc3ad --- /dev/null +++ b/debian/install @@ -0,0 +1,11 @@ +LICENSE.txt usr/share/linux-status + +README.md usr/share/doc/linux-status +img usr/share/doc/linux-status + +app.py srv/linux-status +server.py srv/linux-status + +index.html srv/linux-status +css srv/linux-status +js srv/linux-status diff --git a/debian/linux-status.service b/debian/linux-status.service new file mode 120000 index 0000000..e104dba --- /dev/null +++ b/debian/linux-status.service @@ -0,0 +1 @@ +../dist/systemd/linux-status.service
\ No newline at end of file diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..cbe925d --- /dev/null +++ b/debian/rules @@ -0,0 +1,3 @@ +#!/usr/bin/make -f +%: + dh $@ 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) diff --git a/debian/source/include-binaries b/debian/source/include-binaries new file mode 100644 index 0000000..65d8c60 --- /dev/null +++ b/debian/source/include-binaries @@ -0,0 +1 @@ +img/example.png |