mirror of
https://gitlab.archlinux.org/archlinux/devtools.git
synced 2025-09-13 01:46:19 +02:00
Compare commits
7 Commits
version-ed
...
190-rebuil
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b095aeee61 | ||
![]() |
01b6b0849e | ||
![]() |
7033554e45 | ||
![]() |
40f476c649 | ||
![]() |
509dd24bdc | ||
![]() |
7a9ef3bc57 | ||
![]() |
354c9dcd12 |
@@ -8,7 +8,7 @@ build:
|
||||
stage: build
|
||||
needs: []
|
||||
script:
|
||||
- pacman -Syu --noconfirm m4 make openssh subversion rsync arch-install-scripts git bzr mercurial diffutils asciidoc
|
||||
- pacman -Syu --noconfirm m4 make openssh subversion rsync arch-install-scripts git bzr mercurial diffutils asciidoctor
|
||||
- make PREFIX=/usr
|
||||
- make PREFIX=/usr DESTDIR=build install
|
||||
|
||||
@@ -16,6 +16,6 @@ check:
|
||||
stage: test
|
||||
needs: []
|
||||
script:
|
||||
- pacman -Syu --noconfirm m4 make openssh subversion rsync arch-install-scripts git bzr mercurial diffutils asciidoc shellcheck
|
||||
- pacman -Syu --noconfirm m4 make openssh subversion rsync arch-install-scripts git bzr mercurial diffutils asciidoctor shellcheck
|
||||
- make check || true
|
||||
- SHELLCHECK_OPTS="-S error" make check
|
||||
|
4
Makefile
4
Makefile
@@ -92,10 +92,10 @@ $(eval $(call buildInScript,build/bin,src/,.in,755))
|
||||
$(eval $(call buildInScript,build/lib,src/lib/,,644))
|
||||
$(foreach completion,$(wildcard contrib/completion/*),$(eval $(call buildInScript,build/$(completion),$(completion)/,.in,444)))
|
||||
|
||||
$(BUILDDIR)/doc/man/%: doc/man/%.asciidoc doc/asciidoc.conf doc/man/include/footer.asciidoc
|
||||
$(BUILDDIR)/doc/man/%: doc/man/%.asciidoc doc/man/include/footer.asciidoc
|
||||
$(GEN_MSG)
|
||||
@mkdir -p $(BUILDDIR)/doc/man
|
||||
@a2x --no-xmllint --asciidoc-opts="-f doc/asciidoc.conf" -d manpage -f manpage --destination-dir=$(BUILDDIR)/doc/man -a pkgdatadir=$(DATADIR) $<
|
||||
@asciidoctor --backend=manpage --destination-dir=$(BUILDDIR)/doc/man --attribute pkgdatadir=$(DATADIR) $<
|
||||
|
||||
conf:
|
||||
@install -d $(BUILDDIR)/makepkg.conf.d
|
||||
|
@@ -95,7 +95,7 @@ Component: pkgctl db remove
|
||||
|
||||
### Development Dependencies
|
||||
|
||||
- asciidoc
|
||||
- asciidoctor
|
||||
- make
|
||||
- shellcheck
|
||||
|
||||
|
@@ -42,12 +42,13 @@ CHOST="x86_64-pc-linux-gnu"
|
||||
#CPPFLAGS=""
|
||||
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
|
||||
-Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
|
||||
-fstack-clash-protection -fcf-protection"
|
||||
-fstack-clash-protection -fcf-protection \
|
||||
-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"
|
||||
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
|
||||
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
|
||||
-Wl,-z,pack-relative-relocs"
|
||||
LTOFLAGS="-flto=auto"
|
||||
RUSTFLAGS=""
|
||||
RUSTFLAGS="-Cforce-frame-pointers=yes"
|
||||
#-- Make Flags: change this for DistCC/SMP systems
|
||||
#MAKEFLAGS="-j2"
|
||||
#-- Debugging flags
|
||||
|
@@ -42,12 +42,13 @@ CHOST="x86_64-pc-linux-gnu"
|
||||
#CPPFLAGS=""
|
||||
CFLAGS="-march=x86-64-v3 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
|
||||
-Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \
|
||||
-fstack-clash-protection -fcf-protection"
|
||||
-fstack-clash-protection -fcf-protection \
|
||||
-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"
|
||||
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
|
||||
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \
|
||||
-Wl,-z,pack-relative-relocs"
|
||||
LTOFLAGS="-flto=auto"
|
||||
RUSTFLAGS=""
|
||||
RUSTFLAGS="-Cforce-frame-pointers=yes"
|
||||
#-- Make Flags: change this for DistCC/SMP systems
|
||||
#MAKEFLAGS="-j2"
|
||||
#-- Debugging flags
|
||||
|
@@ -48,8 +48,8 @@ _pkgctl_build_args=(
|
||||
'(-o --offload)'{-o,--offload}'[Build on a remote server and transfer artifacts afterwards]'
|
||||
'(-c --clean)'{-c,--clean}'[Recreate the chroot before building]'
|
||||
"--inspect[Spawn an interactive shell to inspect the chroot (never, always, failure)]:inspect:($DEVTOOLS_VALID_INSPECT_MODES[*])"
|
||||
'(-I --install-to-chroot)'{-I,--install-to-chroot}'[Install a package to the working copy of the chroot]:target:_files -g "*.pkg.tar.*(.)"'
|
||||
'(-i --install-to-host)'{-i,--install-to-host}"[Install the built packages to the host system]:mode:($DEVTOOLS_VALID_BUILD_INSTALL[*])"
|
||||
'*'{-I,--install-to-chroot}'[Install a package to the working copy of the chroot]:target:_files -g "*.pkg.tar.*(.)"'
|
||||
'*'{-i,--install-to-host}"[Install the built packages to the host system]:mode:($DEVTOOLS_VALID_BUILD_INSTALL[*])"
|
||||
'(-w --worker)'{-w,--worker}'[Name of the worker slot, useful for concurrent builds (disables auto-detection)]:slot:'
|
||||
'--nocheck[Do not run the check() function in the PKGBUILD]'
|
||||
'--pkgver=[Set pkgver, reset pkgrel and update checksums]:pkgver:'
|
||||
@@ -168,8 +168,8 @@ _pkgctl_search_args=(
|
||||
_arch_nspawn_args=(
|
||||
'-C[Location of a pacman config file]:pacman_config:_files -g "*.conf(.)"'
|
||||
'-M[Location of a makepkg config file]:makepkg_config:_files -g "*.conf(.)"'
|
||||
'-c[Set pacman cache]:pacman_cache:_files -/'
|
||||
'-f[Copy file from the host to the chroot]:copy_file:_files'
|
||||
'*-c[Set pacman cache]:pacman_cache:_files -/'
|
||||
'*-f[Copy file from the host to the chroot]:copy_file:_files'
|
||||
'-s[Do not run setarch]'
|
||||
'-h[Display usage]'
|
||||
'1:chroot_dir:_files -/'
|
||||
@@ -211,11 +211,11 @@ _finddeps_args=(
|
||||
_makechrootpkg_args=(
|
||||
'-h[Display usage]'
|
||||
'-c[Clean the chroot before building]'
|
||||
'-d[Bind directory into build chroot as read-write]:bind_dir_rw:_files -/'
|
||||
'-D[Bind directory into build chroot as read-only]:bind_dir_ro:_files -/'
|
||||
'*-d[Bind directory into build chroot as read-write]:bind_dir_rw:_files -/'
|
||||
'*-D[Bind directory into build chroot as read-only]:bind_dir_ro:_files -/'
|
||||
'-u[Update the working copy of the chroot before building]'
|
||||
'-r[The chroot dir to use]:chroot_dir:_files -/'
|
||||
'-I[Install a package into the working copy]:target:_files -g "*.pkg.tar.*(.)"'
|
||||
'*-I[Install a package into the working copy]:target:_files -g "*.pkg.tar.*(.)"'
|
||||
'-l[The directory to use as the working copy]:copy_dir:_files -/'
|
||||
'-n[Run namcap on the package]'
|
||||
'-T[Build in a temporary directory]'
|
||||
|
@@ -1,37 +0,0 @@
|
||||
## linkman: macro
|
||||
# Inspired by/borrowed from the GIT source tree at Documentation/asciidoc.conf
|
||||
#
|
||||
# Usage: linkman:command[manpage-section]
|
||||
#
|
||||
# Note, {0} is the manpage section, while {target} is the command.
|
||||
#
|
||||
# Show man link as: <command>(<section>); if section is defined, else just show
|
||||
# the command.
|
||||
|
||||
[macros]
|
||||
(?su)[\\]?(?P<name>linkman):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=
|
||||
|
||||
[attributes]
|
||||
asterisk=*
|
||||
plus=+
|
||||
caret=^
|
||||
startsb=[
|
||||
endsb=]
|
||||
backslash=\
|
||||
tilde=~
|
||||
apostrophe='
|
||||
backtick=`
|
||||
litdd=--
|
||||
|
||||
ifdef::backend-docbook[]
|
||||
[linkman-inlinemacro]
|
||||
{0%{target}}
|
||||
{0#<citerefentry>}
|
||||
{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}
|
||||
{0#</citerefentry>}
|
||||
endif::backend-docbook[]
|
||||
|
||||
ifdef::backend-xhtml11[]
|
||||
[linkman-inlinemacro]
|
||||
<a href="{target}.{0}.html">{target}{0?({0})}</a>
|
||||
endif::backend-xhtml11[]
|
@@ -43,6 +43,6 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:devtools[7]
|
||||
devtools(7)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -38,6 +38,6 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:find-libprovides[1]
|
||||
find-libprovides(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -21,47 +21,47 @@ Programs
|
||||
The list below gives a short overview; see the respective documentation
|
||||
for details.
|
||||
|
||||
linkman:pkgctl[1]
|
||||
pkgctl(1)
|
||||
Unified command-line frontend for devtools
|
||||
|
||||
linkman:archbuild[1]
|
||||
archbuild(1)
|
||||
Build an Arch Linux package inside a clean chroot
|
||||
|
||||
linkman:arch-nspawn[1]
|
||||
arch-nspawn(1)
|
||||
Run a command or OS in a light-weight namespace container
|
||||
|
||||
linkman:checkpkg[1]
|
||||
checkpkg(1)
|
||||
Compare the current build package with the repository version
|
||||
|
||||
linkman:diffpkg[1]
|
||||
diffpkg(1)
|
||||
Compare package files using different modes
|
||||
|
||||
linkman:export-pkgbuild-keys[1]
|
||||
export-pkgbuild-keys(1)
|
||||
Export valid source signing keys from a PKGBUILD
|
||||
|
||||
linkman:find-libdeps[1]
|
||||
find-libdeps(1)
|
||||
Find soname dependencies for a package
|
||||
|
||||
linkman:find-libprovides[1]
|
||||
find-libprovides(1)
|
||||
Find soname's which are provided by a package
|
||||
|
||||
linkman:lddd[1]
|
||||
lddd(1)
|
||||
Find broken library links on your system
|
||||
|
||||
linkman:mkarchroot[1]
|
||||
mkarchroot(1)
|
||||
Creates an arch chroot in a specified location with a specified set of
|
||||
packages
|
||||
|
||||
linkman:makechrootpkg[1]
|
||||
makechrootpkg(1)
|
||||
Build a PKGBUILD in a given chroot environment
|
||||
|
||||
linkman:makerepropkg[1]
|
||||
makerepropkg(1)
|
||||
Rebuild a package to see if it is reproducible
|
||||
|
||||
linkman:offload-build[1]
|
||||
offload-build(1)
|
||||
Build a PKGBUILD on a remote server using makechrootpkg
|
||||
|
||||
linkman:sogrep[1]
|
||||
sogrep(1)
|
||||
Find packages using a linked to a given shared library
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -20,6 +20,6 @@ collected data is written to a temporary directory created by mktemp.
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:ldd[1]
|
||||
ldd(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -16,7 +16,7 @@ Given the path to a built pacman package(s), attempt to rebuild it using the
|
||||
PKGBUILD in the current directory. The package will be built in an environment
|
||||
as closely matching the environment of the initial package as possible, by
|
||||
building up a chroot to match the information exposed in the package's
|
||||
linkman:BUILDINFO[5] manifest. On success, the resulting package will be
|
||||
BUILDINFO(5) manifest. On success, the resulting package will be
|
||||
compared to the input package, and makerepropkg will report whether the
|
||||
artifacts are identical.
|
||||
|
||||
|
@@ -44,6 +44,6 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pacman[1]
|
||||
pacman(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -36,6 +36,6 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-db-remove[1]
|
||||
pkgctl-db-remove(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -32,6 +32,6 @@ pkgctl aur drop-from-repo::
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-aur-drop-from-repo[1]
|
||||
pkgctl-aur-drop-from-repo(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -35,6 +35,6 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth-status[1]
|
||||
pkgctl-auth-status(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -27,6 +27,6 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth-login[1]
|
||||
pkgctl-auth-login(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -32,7 +32,7 @@ pkgctl auth status::
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth-login[1]
|
||||
linkman:pkgctl-auth-status[1]
|
||||
pkgctl-auth-login(1)
|
||||
pkgctl-auth-status(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -107,7 +107,7 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-release[1]
|
||||
linkman:pkgctl-db-update[1]
|
||||
pkgctl-release(1)
|
||||
pkgctl-db-update(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -1,5 +1,5 @@
|
||||
pkgctl-db-update(1)
|
||||
=================
|
||||
===================
|
||||
|
||||
Name
|
||||
----
|
||||
|
@@ -46,6 +46,6 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-db-update[1]
|
||||
pkgctl-db-update(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -46,7 +46,7 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-repo-configure[1]
|
||||
linkman:pkgctl-repo-switch[1]
|
||||
pkgctl-repo-configure(1)
|
||||
pkgctl-repo-switch(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -33,8 +33,8 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth[1]
|
||||
linkman:pkgctl-repo-clone[1]
|
||||
linkman:pkgctl-repo-configure[1]
|
||||
pkgctl-auth(1)
|
||||
pkgctl-repo-clone(1)
|
||||
pkgctl-repo-configure(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -50,10 +50,10 @@ pkgctl repo web::
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-repo-clone[1]
|
||||
linkman:pkgctl-repo-configure[1]
|
||||
linkman:pkgctl-repo-create[1]
|
||||
linkman:pkgctl-repo-switch[1]
|
||||
linkman:pkgctl-repo-web[1]
|
||||
pkgctl-repo-clone(1)
|
||||
pkgctl-repo-configure(1)
|
||||
pkgctl-repo-create(1)
|
||||
pkgctl-repo-switch(1)
|
||||
pkgctl-repo-web(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -66,6 +66,6 @@ Output Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth[1]
|
||||
pkgctl-auth(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -28,8 +28,8 @@ required to track version changes from upstream sources.
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
Uses linkman:nvchecker[1] and a `.nvchecker.toml` file located alongside the
|
||||
PKGBUILD. Refer to the configuration section in linkman:pkgctl-version[1].
|
||||
Uses nvchecker(1) and a `.nvchecker.toml` file located alongside the
|
||||
PKGBUILD. Refer to the configuration section in pkgctl-version(1).
|
||||
|
||||
Options
|
||||
-------
|
||||
@@ -60,7 +60,7 @@ On exit, return one of the following codes:
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-version[1]
|
||||
linkman:nvchecker[1]
|
||||
pkgctl-version(1)
|
||||
nvchecker(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -29,8 +29,8 @@ required to track and implement version changes from upstream sources.
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
Uses linkman:nvchecker[1] and a `.nvchecker.toml` file located alongside the
|
||||
PKGBUILD. Refer to the configuration section in linkman:pkgctl-version[1].
|
||||
Uses nvchecker(1) and a `.nvchecker.toml` file located alongside the
|
||||
PKGBUILD. Refer to the configuration section in pkgctl-version(1).
|
||||
|
||||
Options
|
||||
-------
|
||||
@@ -44,7 +44,7 @@ Options
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-version[1]
|
||||
linkman:nvchecker[1]
|
||||
pkgctl-version(1)
|
||||
nvchecker(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -15,7 +15,7 @@ Description
|
||||
|
||||
Commands related to package versions, including checks for outdated packages.
|
||||
|
||||
Uses linkman:nvchecker[1] and a `.nvchecker.toml` file located alongside the
|
||||
Uses nvchecker(1) and a `.nvchecker.toml` file located alongside the
|
||||
PKGBUILD.
|
||||
|
||||
Configuration
|
||||
@@ -28,7 +28,7 @@ corresponding package.
|
||||
|
||||
For detailed information on the various configuration options available for the
|
||||
`.nvchecker.toml` file, refer to the configuration files section in
|
||||
linkman:nvchecker[1]. This documentation provides insights into the possible
|
||||
nvchecker(1). This documentation provides insights into the possible
|
||||
options that can be utilized to customize the version checking process.
|
||||
|
||||
To supply GitHub or GitLab tokens to nvchecker, a `keyfile.toml` should be
|
||||
@@ -54,7 +54,7 @@ pkgctl version upgrade::
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-version-check[1]
|
||||
linkman:pkgctl-version-upgrade[1]
|
||||
pkgctl-version-check(1)
|
||||
pkgctl-version-upgrade(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -56,14 +56,14 @@ pkgctl version::
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-aur[1]
|
||||
linkman:pkgctl-auth[1]
|
||||
linkman:pkgctl-build[1]
|
||||
linkman:pkgctl-db[1]
|
||||
linkman:pkgctl-diff[1]
|
||||
linkman:pkgctl-release[1]
|
||||
linkman:pkgctl-repo[1]
|
||||
linkman:pkgctl-search[1]
|
||||
linkman:pkgctl-version[1]
|
||||
pkgctl-aur(1)
|
||||
pkgctl-auth(1)
|
||||
pkgctl-build(1)
|
||||
pkgctl-db(1)
|
||||
pkgctl-diff(1)
|
||||
pkgctl-release(1)
|
||||
pkgctl-repo(1)
|
||||
pkgctl-search(1)
|
||||
pkgctl-version(1)
|
||||
|
||||
include::include/footer.asciidoc[]
|
||||
|
@@ -92,14 +92,19 @@ pkgctl_aur_drop_from_repo() {
|
||||
fi
|
||||
|
||||
for path in "${paths[@]}"; do
|
||||
if ! realpath=$(realpath -e "${path}"); then
|
||||
# resolve symlink for basename
|
||||
if ! realpath=$(realpath --canonicalize-existing -- "${path}"); then
|
||||
die "No such directory: ${path}"
|
||||
fi
|
||||
# skip paths that are not directories
|
||||
if [[ ! -d "${realpath}" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
pkgbase=$(basename "${realpath}")
|
||||
pkgbase=${pkgbase%.git}
|
||||
|
||||
if [[ ! -d "${path}/.git" ]]; then
|
||||
if [[ ! -d "${realpath}/.git" ]]; then
|
||||
die "Not a Git repository: ${path}"
|
||||
fi
|
||||
|
||||
@@ -120,7 +125,6 @@ pkgctl_aur_drop_from_repo() {
|
||||
if [[ $(git symbolic-ref --quiet --short HEAD) == main ]]; then
|
||||
git branch --move master
|
||||
git config branch.master.merge refs/heads/master
|
||||
git remote set-head origin master
|
||||
fi
|
||||
|
||||
# auto generate .SRCINFO if not already present
|
||||
@@ -137,11 +141,14 @@ pkgctl_aur_drop_from_repo() {
|
||||
if (( FORCE )); then
|
||||
AUR_OVERWRITE=1 \
|
||||
GIT_SSH_COMMAND="ssh -o SendEnv=AUR_OVERWRITE" \
|
||||
git push --force origin master
|
||||
git push --force --no-follow-tags origin master
|
||||
else
|
||||
git push origin master
|
||||
git push --no-follow-tags origin master
|
||||
fi
|
||||
|
||||
# update the local default branch in case this clone is used in the future
|
||||
git remote set-head origin master
|
||||
|
||||
if (( DISOWN )); then
|
||||
msg "Disowning ${pkgbase} on the AUR"
|
||||
# shellcheck disable=SC2029
|
||||
|
@@ -319,6 +319,10 @@ pkgctl_build() {
|
||||
fi
|
||||
|
||||
for path in "${paths[@]}"; do
|
||||
# skip paths that are not directories
|
||||
if [[ ! -d "${path}" ]]; then
|
||||
continue
|
||||
fi
|
||||
pushd "${path}" >/dev/null
|
||||
|
||||
if [[ ! -f PKGBUILD ]]; then
|
||||
|
234
src/lib/rebuild-todo.sh
Normal file
234
src/lib/rebuild-todo.sh
Normal file
@@ -0,0 +1,234 @@
|
||||
#!/hint/bash
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
[[ -z ${DEVTOOLS_INCLUDE_REBUILD_TODO_SH:-} ]] || return 0
|
||||
DEVTOOLS_INCLUDE_REBUILD_TODO_SH=1
|
||||
|
||||
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
|
||||
|
||||
source /usr/share/makepkg/util/util.sh
|
||||
|
||||
# shellcheck source=src/lib/repo/clone.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/repo/clone.sh
|
||||
# shellcheck source=src/lib/build/build.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/build/build.sh
|
||||
# shellcheck source=src/lib/release.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/release.sh
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
pkgctl_rebuild_todo_usage() {
|
||||
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
|
||||
cat <<- _EOF_
|
||||
Usage: ${COMMAND} [OPTIONS] URL
|
||||
|
||||
Rebuilds packages from a todo list.
|
||||
|
||||
OPTIONS
|
||||
-h, --help Show this help text
|
||||
-m, --message MSG Use the given <msg> as the commit message
|
||||
-i, --ignore Give one or more pkgbases to ignore
|
||||
-f, --maintainer Filter for one or more maintainers (orphan for orphan packages)
|
||||
-o, --offload Build on a remote server and transfer artifacts afterwards
|
||||
-e, --edit Edit PKGBUILD before building. Default when todo type is "Task"
|
||||
-r, --repo REPO Specify a target repository (disables auto-detection)
|
||||
-s, --staging Release to the staging counterpart of the auto-detected repo
|
||||
-t, --testing Release to the testing counterpart of the auto-detected repo
|
||||
-u, --db-update Automatically update the pacman database after uploading
|
||||
--no-build Don't build PKGBUILD
|
||||
--no-release Don't run commitpkg after building
|
||||
|
||||
EXAMPLES
|
||||
TODO
|
||||
_EOF_
|
||||
}
|
||||
|
||||
pkgctl_rebuild_todo() {
|
||||
if (( $# < 1 )); then
|
||||
pkgctl_rebuild_todo_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local URL=""
|
||||
local REPO=""
|
||||
|
||||
local MAINTAINERS=()
|
||||
local IGNORE_PKGBASES=()
|
||||
local FILTER_REPOSITORY=("extra")
|
||||
|
||||
local DRY_RUN=0
|
||||
local MESSAGE_SET=0
|
||||
local NO_RELEASE=0
|
||||
local NO_BUILD=0
|
||||
|
||||
local RELEASE_OPTIONS=("--staging")
|
||||
local BUILD_OPTIONS=("--staging" "--rebuild")
|
||||
|
||||
local packages
|
||||
|
||||
# option checking
|
||||
while (( $# )); do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
pkgctl_rebuild_todo_usage
|
||||
exit 0
|
||||
;;
|
||||
--dry-run)
|
||||
DRY_RUN=1
|
||||
shift 1
|
||||
;;
|
||||
-f|--maintainer)
|
||||
(( $# <= 1 )) && die "missing argument for %s" "$1"
|
||||
MAINTAINERS+=("$2")
|
||||
shift 2
|
||||
;;
|
||||
-i|--ignore)
|
||||
(( $# <= 1 )) && die "missing argument for %s" "$1"
|
||||
IGNORE_PKGBASES+=("$2")
|
||||
shift 2
|
||||
;;
|
||||
-o|--offload)
|
||||
BUILD_OPTIONS+=("--offload")
|
||||
shift
|
||||
;;
|
||||
-e|--edit)
|
||||
BUILD_OPTIONS+=("--edit")
|
||||
shift
|
||||
;;
|
||||
-m|--message)
|
||||
(( $# <= 1 )) && die "missing argument for %s" "$1"
|
||||
MESSAGE_SET=1
|
||||
RELEASE_OPTIONS+=("--message" "$2")
|
||||
shift 2
|
||||
;;
|
||||
-s|--staging)
|
||||
RELEASE_OPTIONS+=("--staging")
|
||||
shift
|
||||
;;
|
||||
-t|--testing)
|
||||
RELEASE_OPTIONS+=("--testing")
|
||||
shift
|
||||
;;
|
||||
--no-release)
|
||||
NO_RELEASE=1
|
||||
shift
|
||||
;;
|
||||
--no-build)
|
||||
NO_BUILD=1
|
||||
shift
|
||||
;;
|
||||
-*)
|
||||
die "invalid option: %s" "$1"
|
||||
;;
|
||||
*)
|
||||
if [[ ! "$1" == https* ]]; then
|
||||
die "Missing url!"
|
||||
fi
|
||||
URL="$1"
|
||||
if [[ ! "$URL" == */ ]]; then
|
||||
URL+="/"
|
||||
fi
|
||||
if [[ ! "$URL" == *json ]]; then
|
||||
URL+="json"
|
||||
fi
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# TODO: setup default values for options
|
||||
|
||||
while read -r json; do
|
||||
readarray -t packages < <(jq --slurpfile repo <(printf '"%s" ' "${FILTER_REPOSITORY[@]}") \
|
||||
--slurpfile maint <(printf '"%s" ' "${MAINTAINERS[@]}") \
|
||||
-r '.created as $created
|
||||
| .packages[]
|
||||
| select(.status_str == "Incomplete" )
|
||||
| select([.repo] | inside($repo))
|
||||
| select(($maint[0] == "") or (($maint[0] == "orphan") and .maintainers == []) or (select(.maintainers | any([.] | inside($maint)))))
|
||||
| "\(.pkgbase)"' \
|
||||
- <<< "$json" | sort -u)
|
||||
|
||||
# This removes any elements we have ignored.... it's not pretty
|
||||
readarray -t packages < <(comm -1 -3 <(printf "%s\n" "${IGNORE_PKGBASES[@]}" | sort) <(printf "%s\n" "${packages[@]}"| sort))
|
||||
|
||||
# Default to include the list name in the commit message
|
||||
if (( ! MESSAGE_SET )); then
|
||||
RELEASE_OPTIONS+=("--message" "$(jq -r '.name' - <<< "$json")")
|
||||
fi
|
||||
|
||||
# If we are doing a Task we probably want to edit the PKGBUILD
|
||||
if [[ "$(jq -r '.kind' - <<< "$json")" == "Task" ]]; then
|
||||
BUILD_OPTIONS+=("--edit")
|
||||
fi
|
||||
done <<< "$(curl -s "$URL")"
|
||||
|
||||
if (( DRY_RUN )); then
|
||||
msg "Would rebuild the following packages:"
|
||||
msg2 '%s' "${packages[@]}"
|
||||
msg "by running the following for each:"
|
||||
if ! ((NO_BUILD)); then
|
||||
msg2 "pkgctl build ${BUILD_OPTIONS[*]}"
|
||||
fi
|
||||
if ! ((NO_RELEASE)); then
|
||||
msg2 "pkgctl release ${RELEASE_OPTIONS[*]}"
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if (( 0 == ${#packages[@]} )); then
|
||||
die "No packages to rebuild!"
|
||||
fi
|
||||
|
||||
msg "Rebuilding the following packages:"
|
||||
msg2 '%s' "${packages[@]}"
|
||||
msg "Press [Enter] to continue..."
|
||||
read <&1
|
||||
|
||||
[[ -z ${WORKDIR:-} ]] && setup_workdir
|
||||
pushd "$WORKDIR" &>/dev/null
|
||||
|
||||
# TODO set -j 1 to circumvent bug in repo clone
|
||||
msg "Clone the pacakges"
|
||||
if ! pkgctl_repo_clone -j 1 "${packages[@]}"; then
|
||||
die "error while cloning packages"
|
||||
fi
|
||||
|
||||
for pkg in "${packages[@]}"; do
|
||||
pushd "$pkg" &>/dev/null
|
||||
|
||||
# This should help us figure out if the package is already built
|
||||
readarray -t pkgs < <(makepkg --packagelist)
|
||||
if [[ -f ${pkgs[0]} ]]; then
|
||||
msg "${pkg[0]} has already been rebuilt!"
|
||||
continue
|
||||
fi
|
||||
|
||||
if ! ((NO_BUILD)); then
|
||||
SKIP_BUILD=0
|
||||
while true; do
|
||||
# TODO: it seems like pkgctl build does not set the exit code correctly if (offload?) build fails
|
||||
if pkgctl_build "${BUILD_OPTIONS[@]}"; then
|
||||
break
|
||||
fi
|
||||
error "We failed to build! You are in a subshell to fix the build. Exit the shell to build again."
|
||||
$SHELL || true
|
||||
read -p "Skip build? [N/y] " -n 1 -r
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
SKIP_BUILD=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if ((SKIP_BUILD)); then
|
||||
popd &>/dev/null
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
if ! ((NO_RELEASE)); then
|
||||
pkgctl_release "${RELEASE_OPTIONS[@]}"
|
||||
fi
|
||||
popd &>/dev/null
|
||||
done
|
||||
}
|
@@ -207,9 +207,14 @@ pkgctl_repo_configure() {
|
||||
fi
|
||||
|
||||
for path in "${paths[@]}"; do
|
||||
if ! realpath=$(realpath -e "${path}"); then
|
||||
# resolve symlink for basename
|
||||
if ! realpath=$(realpath --canonicalize-existing -- "${path}"); then
|
||||
die "No such directory: ${path}"
|
||||
fi
|
||||
# skip paths that aren't directories
|
||||
if [[ ! -d "${realpath}" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
pkgbase=$(basename "${realpath}")
|
||||
pkgbase=${pkgbase%.git}
|
||||
|
@@ -101,16 +101,21 @@ pkgctl_repo_switch() {
|
||||
fi
|
||||
|
||||
for path in "${paths[@]}"; do
|
||||
if ! realpath=$(realpath -e -- "${path}"); then
|
||||
# resolve symlink for basename
|
||||
if ! realpath=$(realpath --canonicalize-existing -- "${path}"); then
|
||||
die "No such directory: ${path}"
|
||||
fi
|
||||
pkgbase=$(basename "${realpath}")
|
||||
|
||||
if [[ ! -d "${path}/.git" ]]; then
|
||||
# skip paths that are not directories
|
||||
if [[ ! -d "${realpath}" ]]; then
|
||||
continue
|
||||
fi
|
||||
# skip paths that are not git repositories
|
||||
if [[ ! -d "${realpath}/.git" ]]; then
|
||||
error "Not a Git repository: ${path}"
|
||||
continue
|
||||
fi
|
||||
|
||||
pkgbase=$(basename "${realpath}")
|
||||
if ! git -C "${path}" checkout "${GIT_CHECKOUT_OPTIONS[@]}" "${GIT_REF}"; then
|
||||
die "Failed to switch ${pkgbase} to version ${VERSION}"
|
||||
fi
|
||||
|
@@ -108,6 +108,10 @@ pkgctl_version_check() {
|
||||
term_spinner_start "${status_dir}"
|
||||
|
||||
for path in "${pkgbases[@]}"; do
|
||||
# skip paths that are not directories
|
||||
if [[ ! -d "${path}" ]]; then
|
||||
continue
|
||||
fi
|
||||
pushd "${path}" >/dev/null
|
||||
|
||||
if [[ ! -f "PKGBUILD" ]]; then
|
||||
|
@@ -99,6 +99,10 @@ pkgctl_version_upgrade() {
|
||||
term_spinner_start "${status_dir}"
|
||||
|
||||
for path in "${pkgbases[@]}"; do
|
||||
# skip paths that aren't directories
|
||||
if [[ ! -d "${path}" ]]; then
|
||||
continue
|
||||
fi
|
||||
pushd "${path}" >/dev/null
|
||||
|
||||
if [[ ! -f "PKGBUILD" ]]; then
|
||||
|
@@ -19,15 +19,16 @@ usage() {
|
||||
Unified command-line frontend for devtools.
|
||||
|
||||
COMMANDS
|
||||
aur Interact with the Arch User Repository
|
||||
auth Authenticate with services like GitLab
|
||||
build Build packages inside a clean chroot
|
||||
db Pacman database modification for package update, move etc
|
||||
diff Compare package files using different modes
|
||||
release Release step to commit, tag and upload build artifacts
|
||||
repo Manage Git packaging repositories and their configuration
|
||||
search Search for an expression across the GitLab packaging group
|
||||
version Check and manage package versions against upstream
|
||||
aur Interact with the Arch User Repository
|
||||
auth Authenticate with services like GitLab
|
||||
build Build packages inside a clean chroot
|
||||
db Pacman database modification for package update, move etc
|
||||
diff Compare package files using different modes
|
||||
release Release step to commit, tag and upload build artifacts
|
||||
repo Manage Git packaging repositories and their configuration
|
||||
search Search for an expression across the GitLab packaging group
|
||||
rebuild-todo Rebuilds packages from a todo list.
|
||||
version Check and manage package versions against upstream
|
||||
|
||||
OPTIONS
|
||||
-h, --help Show this help text
|
||||
@@ -112,6 +113,14 @@ while (( $# )); do
|
||||
pkgctl_release "$@"
|
||||
exit 0
|
||||
;;
|
||||
rebuild-todo)
|
||||
_DEVTOOLS_COMMAND+=" $1"
|
||||
shift
|
||||
# shellcheck source=src/lib/rebuild-todo.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/rebuild-todo.sh
|
||||
pkgctl_rebuild_todo "$@"
|
||||
exit 0
|
||||
;;
|
||||
search)
|
||||
_DEVTOOLS_COMMAND+=" $1"
|
||||
shift
|
||||
|
Reference in New Issue
Block a user