Add tix-repository(8).
Support renaming, splitting, and deleting ports via RENAMES. Unify on RUNTIME_DEPS for runtime dependencies.
This commit is contained in:
parent
4f2f3e720b
commit
5236589d81
7 changed files with 151 additions and 4 deletions
1
Makefile
1
Makefile
|
@ -618,6 +618,7 @@ release-repository: sysroot $(SYSTEM_INITRD) $(SORTIX_RELEASE_DIR)/$(RELEASE)/re
|
||||||
cp $(SORTIX_REPOSITORY_DIR)/$(HOST)/$$port.tix.tar.xz $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST) && \
|
cp $(SORTIX_REPOSITORY_DIR)/$(HOST)/$$port.tix.tar.xz $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST) && \
|
||||||
cp $(SORTIX_REPOSITORY_DIR)/$(HOST)/$$port.version $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST); \
|
cp $(SORTIX_REPOSITORY_DIR)/$(HOST)/$$port.version $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST); \
|
||||||
done
|
done
|
||||||
|
tix-repository --generation=3 $(SORTIX_RELEASE_DIR)/$(RELEASE)/repository/$(HOST)
|
||||||
|
|
||||||
.PHONY: release-scripts
|
.PHONY: release-scripts
|
||||||
release-scripts: \
|
release-scripts: \
|
||||||
|
|
|
@ -7,7 +7,7 @@ ARCHIVE=$DISTNAME.$COMPRESSION
|
||||||
SHA256SUM=8ca680399df5ee8846a509c8a67c10ee1d5fc1a94456806a0ff9dd913b961db3
|
SHA256SUM=8ca680399df5ee8846a509c8a67c10ee1d5fc1a94456806a0ff9dd913b961db3
|
||||||
UPSTREAM_SITE=https://geoff.greer.fm/ag/releases
|
UPSTREAM_SITE=https://geoff.greer.fm/ag/releases
|
||||||
UPSTREAM_ARCHIVE=$ARCHIVE
|
UPSTREAM_ARCHIVE=$ARCHIVE
|
||||||
RUNTIME_PROGRAMS=git
|
RUNTIME_DEPS=git
|
||||||
BUILD_SYSTEM=configure
|
BUILD_SYSTEM=configure
|
||||||
CONFIGURE_ARGS=
|
CONFIGURE_ARGS=
|
||||||
MAKE_VARS='V=1'
|
MAKE_VARS='V=1'
|
||||||
|
|
|
@ -178,6 +178,18 @@ number matched in the first subexpression.
|
||||||
.Sy ARCHIVE
|
.Sy ARCHIVE
|
||||||
and
|
and
|
||||||
.Sy VERSION_REGEX )
|
.Sy VERSION_REGEX )
|
||||||
|
.It Sy EDITION
|
||||||
|
An increasing number used to distinguish this edition of the package from any previous packages by
|
||||||
|
the same name.
|
||||||
|
A new pacckage with the same name and a different edition will considered a different package.
|
||||||
|
Upgrades will uninstall the old package and will not upgrade to the new edition as if the package
|
||||||
|
has stopped existing.
|
||||||
|
The
|
||||||
|
.Sy RENAMES
|
||||||
|
variable can be used in combination with
|
||||||
|
.Sy EDITION
|
||||||
|
to rename and split packages.
|
||||||
|
The default edition is 1.
|
||||||
.It Sy LICENSE
|
.It Sy LICENSE
|
||||||
Primary license identifier for the installed files from the
|
Primary license identifier for the installed files from the
|
||||||
.Lk https://spdx.org/licenses/ "SPDX License List" .
|
.Lk https://spdx.org/licenses/ "SPDX License List" .
|
||||||
|
@ -253,12 +265,22 @@ Locate new upstream versions of the port by searching
|
||||||
.Sy RELEASE_SEARCH_PAGE
|
.Sy RELEASE_SEARCH_PAGE
|
||||||
using this regular expression matching the new version number in the first
|
using this regular expression matching the new version number in the first
|
||||||
subexpression.
|
subexpression.
|
||||||
|
.It Sy RENAMES
|
||||||
|
Comma-separated list of package renames.
|
||||||
|
Each rename is expressed as the name of a package followed by a
|
||||||
|
.Sq "@"
|
||||||
|
and its
|
||||||
|
.Sy EDITION ,
|
||||||
|
followed by a
|
||||||
|
.Sq ":"
|
||||||
|
and then a potentially-empty space separated list of replacement packages, each
|
||||||
|
taking the form of a replacement package name followed by
|
||||||
|
.Sq "@"
|
||||||
|
and then the replacement package
|
||||||
|
.Sy EDITION .
|
||||||
.It Sy RUNTIME_DEPS
|
.It Sy RUNTIME_DEPS
|
||||||
Space delimited list of libraries (ports) needed at run time.
|
Space delimited list of libraries (ports) needed at run time.
|
||||||
Unsupported.
|
Unsupported.
|
||||||
.It Sy RUNTIME_PROGRAMS
|
|
||||||
Space delimited list of programs (ports) needed at run time.
|
|
||||||
Unsupported.
|
|
||||||
.It Sy SHA256SUM
|
.It Sy SHA256SUM
|
||||||
.Xr sha256sum 1
|
.Xr sha256sum 1
|
||||||
of the upstream release.
|
of the upstream release.
|
||||||
|
|
|
@ -69,6 +69,25 @@ releasing Sortix x.y, foo." to allow the maintainer to easily
|
||||||
.Xr grep 1
|
.Xr grep 1
|
||||||
for it after a release.
|
for it after a release.
|
||||||
.Sh CHANGES
|
.Sh CHANGES
|
||||||
|
.Ss Add tix-repository(8)
|
||||||
|
The new
|
||||||
|
.Xr tix-repository 8
|
||||||
|
program is used to generate repository metadata in releases.
|
||||||
|
The new
|
||||||
|
.Sy EDITION
|
||||||
|
and
|
||||||
|
.Sy RENAMES
|
||||||
|
variables in
|
||||||
|
.Xr port 5
|
||||||
|
are used to rename and split packages and requires a new
|
||||||
|
.Xr tix-build 8 .
|
||||||
|
.Pp
|
||||||
|
Tix must be upgraded:
|
||||||
|
.Bd -literal
|
||||||
|
cd /src/tix &&
|
||||||
|
make clean &&
|
||||||
|
make install
|
||||||
|
.Ed
|
||||||
.Ss Support system upgrades and configuration in GRUB
|
.Ss Support system upgrades and configuration in GRUB
|
||||||
The GRUB configuration now implements the
|
The GRUB configuration now implements the
|
||||||
.Pa /etc
|
.Pa /etc
|
||||||
|
|
|
@ -31,6 +31,7 @@ tix-iso-add \
|
||||||
tix-iso-bootconfig \
|
tix-iso-bootconfig \
|
||||||
tix-iso-liveconfig \
|
tix-iso-liveconfig \
|
||||||
tix-port \
|
tix-port \
|
||||||
|
tix-repository \
|
||||||
|
|
||||||
MANPAGES8=\
|
MANPAGES8=\
|
||||||
tix-build.8 \
|
tix-build.8 \
|
||||||
|
|
|
@ -811,6 +811,9 @@ static void TixInfo(struct metainfo* minfo)
|
||||||
// TODO: Shell escape the values if needed.
|
// TODO: Shell escape the values if needed.
|
||||||
fwrite_variable(tixinfo_fp, "TIX_VERSION", "3");
|
fwrite_variable(tixinfo_fp, "TIX_VERSION", "3");
|
||||||
fwrite_variable(tixinfo_fp, "NAME", minfo->package_name);
|
fwrite_variable(tixinfo_fp, "NAME", minfo->package_name);
|
||||||
|
const char* edition = metainfo_get(minfo, "EDITION", "pkg.edition");
|
||||||
|
if ( edition )
|
||||||
|
fwrite_variable(tixinfo_fp, "EDITION", edition);
|
||||||
const char* version = metainfo_get(minfo, "VERSION", "VERSION");
|
const char* version = metainfo_get(minfo, "VERSION", "VERSION");
|
||||||
if ( version )
|
if ( version )
|
||||||
fwrite_variable(tixinfo_fp, "VERSION", version);
|
fwrite_variable(tixinfo_fp, "VERSION", version);
|
||||||
|
@ -829,6 +832,9 @@ static void TixInfo(struct metainfo* minfo)
|
||||||
else
|
else
|
||||||
fwrite_variable(tixinfo_fp, "PREFIX", minfo->prefix);
|
fwrite_variable(tixinfo_fp, "PREFIX", minfo->prefix);
|
||||||
}
|
}
|
||||||
|
const char* renames = metainfo_get(minfo, "RENAMES", "pkg.renames");
|
||||||
|
if ( renames )
|
||||||
|
fwrite_variable(tixinfo_fp, "RENAMES", renames);
|
||||||
}
|
}
|
||||||
// TODO: After releasing Sortix 1.1, remove generation 2 compatibility.
|
// TODO: After releasing Sortix 1.1, remove generation 2 compatibility.
|
||||||
else
|
else
|
||||||
|
|
98
tix/tix-repository
Executable file
98
tix/tix-repository
Executable file
|
@ -0,0 +1,98 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2023, 2024 Jonas 'Sortie' Termansen.
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, and distribute this software for any
|
||||||
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
|
# copyright notice and this permission notice appear in all copies.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
#
|
||||||
|
# tix-repository
|
||||||
|
# Generate repository metadata.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
generation=3
|
||||||
|
|
||||||
|
unset repository
|
||||||
|
|
||||||
|
operand=1
|
||||||
|
dashdash=
|
||||||
|
previous_option=
|
||||||
|
for argument do
|
||||||
|
if [ -n "$previous_option" ]; then
|
||||||
|
eval $previous_option=\$argument
|
||||||
|
previous_option=
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $argument in
|
||||||
|
*=?*) parameter=$(expr "X$argument" : '[^=]*=\(.*\)' || true) ;;
|
||||||
|
*=) parameter= ;;
|
||||||
|
*) parameter=yes ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $dashdash$argument in
|
||||||
|
--) dashdash=yes ;;
|
||||||
|
--generation=*) generation=$parameter ;;
|
||||||
|
--generation) previous_option=generation ;;
|
||||||
|
-*) echo "$0: unrecognized option $argument" >&2
|
||||||
|
exit 1 ;;
|
||||||
|
*)
|
||||||
|
if [ $operand = 1 ]; then
|
||||||
|
repository="$argument"
|
||||||
|
operand=2
|
||||||
|
else
|
||||||
|
echo "$0: unexpected extra operand $argument" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$previous_option" ]; then
|
||||||
|
echo "$0: option '$argument' requires an argument" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$repository" ]; then
|
||||||
|
echo "$0: error: No repository was specified" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$generation" != 3 ]; then
|
||||||
|
echo "$0: error: --generation=$generation is not supported by this version" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$repository"
|
||||||
|
|
||||||
|
ls |
|
||||||
|
grep -E '\.tix.tar.xz$' |
|
||||||
|
grep -Eo '^[^.]*' |
|
||||||
|
LC_ALL=C sort -o packages.list
|
||||||
|
|
||||||
|
true > dependencies.list
|
||||||
|
true > renames.list
|
||||||
|
true > manifest.list
|
||||||
|
|
||||||
|
for package in $(cat packages.list); do
|
||||||
|
tar -xOf "$package.tix.tar.xz" "tix/tixinfo/$package" > "$package.info"
|
||||||
|
tar -xOf "$package.tix.tar.xz" "tix/manifest/$package" > "$package.manifest"
|
||||||
|
sha256sum "$package.tix.tar.xz" > "$package.tix.tar.xz.sha256sum"
|
||||||
|
tix-vars -d '' "$package.info" RENAMES | tr , '\n' | sed -E '/^$/d' >> renames.list
|
||||||
|
(printf "%s: " "$package" && tix-vars -d '' "$package.info" RUNTIME_DEPS | sed -E 's/ +$//') >> dependencies.list
|
||||||
|
sed -E "s/$/:$package/" "$package.manifest" >> manifest.list
|
||||||
|
done
|
||||||
|
|
||||||
|
LC_ALL=C sort -t: -k1,1 manifest.list -o manifest.list
|
||||||
|
|
||||||
|
find -type f '!' -name 'sha256sum' '!' -name '*.sha256sum' -exec sha256sum '{}' '+' |
|
||||||
|
sed -E 's, \./, ,' |
|
||||||
|
LC_ALL=C sort -k 2 > sha256sum
|
Loading…
Reference in a new issue