Last active
January 14, 2025 13:30
-
-
Save ernstki/7dbb17c42911708660dc3c4eee3c1002 to your computer and use it in GitHub Desktop.
Test multiple versions of Package X against multiple versions of Package Y
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## | |
## Test multiple versions of delta[1] against multiple versions of bat[2] | |
## and stop when there's a failure | |
## | |
## Tested with GNU Make 4.x on Linux; YMMV with macOS or BSD | |
## | |
## Author: Kevin Ernst <ernstki -at- mail.uc.edu> | |
## Source: https://gist.github.com/ernstki/7dbb17c42911708660dc3c4eee3c1002 | |
## License: released to the public domain | |
## | |
## [1]: https://github.com/dandavison/delta | |
## [2]: https://github.com/sharkdp/bat | |
## | |
JQ = jq -r | |
CURL = curl -sf | |
WGET = wget --continue --quiet | |
API = https://api.github.com | |
SHELL = bash | |
ARCH = x86_64-unknown-linux-musl | |
MAKEFLAGS = --no-print-directory | |
RESET := $(shell tput sgr0) | |
HEAD := $(shell tput sgr 0 1; tput bold) | |
DIM := $(shell tput dim) | |
PASS := $(shell tput setaf 2)OK$(RESET) | |
FAIL := $(shell tput setaf 1)FAIL$(RESET) | |
test: delta.versions | |
@while read deltaver; do \ | |
echo -e "\n$(HEAD)delta $$deltaver$(RESET)" >&2; \ | |
if ! $(MAKE) --question deltas/$$deltaver/delta; then \ | |
$(MAKE) deltas/$$deltaver/delta || exit 1; \ | |
fi; \ | |
$(MAKE) test-bat DELTAVER=$$deltaver; \ | |
done < $< | |
test-bat: bat.versions | |
@while read batver; do \ | |
if ! $(MAKE) --question bats/$$batver/bat; then \ | |
$(MAKE) bats/$$batver/bat || exit 1; \ | |
fi; \ | |
$(MAKE) results/$(DELTAVER)/$$batver || exit 1; \ | |
done < $< | |
results/%: | |
@IFS=/ read deltaver batver <<<"$*"; \ | |
mkdir -p results/$$deltaver || exit 1; \ | |
printf " with %-24s" "$$( bats/$$batver/bat --version )" >&2; \ | |
bats/$$batver/bat cache --clear &>/dev/null || exit; \ | |
bats/$$batver/bat cache --build &>/dev/null || exit; \ | |
if $$( deltas/$$deltaver/delta --version &>/dev/null ); then \ | |
echo $(PASS) | tee $@; \ | |
bats/$$batver/bat cache --clear &>/dev/null; \ | |
else \ | |
echo $(FAIL) | tee $@; \ | |
bats/$$batver/bat cache --clear &>/dev/null; \ | |
exit 1; \ | |
fi; \ | |
bat.versions: bat.releases.json | |
@$(JQ) '.[].name' $< > $@ | |
bat.releases.json: | |
@$(CURL) $(API)/repos/sharkdp/bat/releases > $@ | |
bats/%/bat: bats/bat-%-$(ARCH).tar.gz | |
@mkdir -p bats/$* | |
@tar xf $< -C bats/$* --wildcards --strip-components=1 --touch "*/bat" | |
bats/bat-%-$(ARCH).tar.gz: | |
@tarball=$$( $(tarball_for) $* bat.releases.json); \ | |
echo "$(DIM)» downloading release tarball for bat $*…$(RESET)" >&2; \ | |
$(WGET) --directory-prefix=bats $$tarball | |
delta.versions: delta.releases.json | |
@$(JQ) '.[].name' $< > $@ | |
delta.releases.json: | |
@$(CURL) $(API)/repos/dandavison/delta/releases > $@ | |
deltas/%/delta: deltas/delta-%-$(ARCH).tar.gz | |
@mkdir -p deltas/$* | |
@tar xf $< -C deltas/$* --wildcards --strip-components=1 --touch "*/delta" | |
deltas/delta-%-$(ARCH).tar.gz: | |
@tarball=$$( $(tarball_for) $* delta.releases.json); \ | |
echo "$(DIM)» downloading release tarball for delta $*…$(RESET)" >&2; \ | |
$(WGET) --directory-prefix=deltas $$tarball | |
# don't delete tarballs, even if interrupted | |
# why not .SECONDARY? see https://stackoverflow.com/a/27092184 | |
.PRECIOUS: bats/bat-%-$(ARCH).tar.gz deltas/delta-%-$(ARCH).tar.gz | |
clean: | |
-bats/$$(head -1 bat.versions)/bat cache --clear >/dev/null | |
-rm -rf bats/v* | |
-rm -rf deltas/[0-9]* | |
-rm -rf results | |
reallyclean: clean | |
-rm -rf bats deltas {bat,delta}.versions {bat,delta}.releases.json | |
define tarball_for | |
$(JQ) '.[] | select(.name==$$release) | .assets[] \ | |
| .browser_download_url | select(test(".*$(ARCH).tar.gz"))' \ | |
--arg release | |
endef | |
# vim: sw=4 ts=4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## | |
## Test a single version of delta[1] against multiple versions of bat[2] | |
## and stop when there's a failure | |
## | |
## Tested with GNU Make 4.x on Linux; YMMV on macOS or BSD | |
## | |
## Author: Kevin Ernst <ernstki -at- mail.uc.edu> | |
## Source: https://gist.github.com/ernstki/7dbb17c42911708660dc3c4eee3c1002 | |
## License: released to the public domain | |
## | |
## [1]: https://github.com/dandavison/delta | |
## [2]: https://github.com/sharkdp/bat | |
## | |
JQ = jq -r | |
CURL = curl -sf | |
API = https://api.github.com | |
ARCH = x86_64-unknown-linux-gnu | |
MAKEFLAGS = --no-print-directory | |
RESET := $(shell tput sgr0) | |
HEAD := $(shell tput sgr 0 1; tput bold) | |
DIM := $(shell tput dim) | |
PASS := $(shell tput setaf 2)OK$(RESET) | |
FAIL := $(shell tput setaf 1)FAIL$(RESET) | |
test: versions | |
@echo >&2; \ | |
echo "$(HEAD)Testing $$(delta --version) against…$(RESET)" >&2 | |
@while read release; do \ | |
if ! $(MAKE) --question bats/$$release/bat; then \ | |
$(MAKE) bats/$$release/bat || exit 1; \ | |
fi; \ | |
printf " %-22s" "$$( bats/$$release/bat --version )" >&2; \ | |
$(MAKE) results/$$release || exit 1; \ | |
done < $< | |
results/%: bats/%/bat | |
@mkdir -p results | |
@bats/$*/bat cache --clear >/dev/null | |
@bats/$*/bat cache --build >/dev/null | |
@if delta --version >/dev/null; then \ | |
echo $(PASS) | tee $@; \ | |
else \ | |
echo $(FAIL) | tee $@; \ | |
exit 1; \ | |
fi; \ | |
versions: releases.json | |
@$(JQ) '.[].name' $< > $@ | |
releases.json: | |
@$(CURL) $(API)/repos/sharkdp/bat/releases > $@ | |
bats/%/bat: bats/bat-%-$(ARCH).tar.gz | |
@mkdir -p bats/$* | |
@tar xf $< -C bats/$* --wildcards --strip-components=1 --touch "*/bat" | |
define tarball_for | |
< releases.json \ | |
$(JQ) '.[] | select(.name==$$release) | .assets[] \ | |
| .browser_download_url | select(test(".*$(ARCH).tar.gz"))' \ | |
--arg release | |
endef | |
.PRECIOUS: bats/bat-%-$(ARCH).tar.gz | |
bats/bat-%-$(ARCH).tar.gz: | |
@echo "$(DIM)» downloading release tarball for $*…$(RESET)" >&2 | |
@wget --continue --quiet --directory-prefix=bats \ | |
$$($(tarball_for) $*) | |
clean: | |
-bats/$$(head -1 versions)/bat cache --clear >/dev/null | |
-rm -rf bats/v* | |
-rm -rf results/v* | |
reallyclean: clean | |
-rm -rf bats versions releases.json | |
# vim: ft=make sw=4 ts=4 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment