Commit graph

4,526 commits

Author SHA1 Message Date
ad0e03f14c cmds.projects.BaseCmdPkgRelations: Fix cross-sec deps
If a package P is added, only those of its dependendencies are added
along which are in the same os-cascade section as P. That's wrong,
fix it.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-06 16:02:34 +02:00
a0dcf59277 cmds.projects.BaseCmdPkgRelations: Better variables
Make variable names a little more readable and searchable within the
long pkg_relations_list() method by making their names longer and
truer to what they actually mean.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-06 16:02:34 +02:00
8c34dae526 cmds.projects.CmdPrereq: Remove class
CmdPrereq was mostly redundant to PkgRequired all along. CmdPrereq
has grown more versatile, and CmdPrereq is not used throughout jw-pkg
anylonger by now. Remove it.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-06 16:02:34 +02:00
18a2ee6c99 App.get_value(): Beautify debug logging
Enclose sections / keys taken from project.conf in [square.brackets],
hinting at what they are supposed to mean.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-06 16:02:27 +02:00
af6de30546 scripts/usr-bin: Install symlink /usr/bin/jw-pkg
Install a symlink /usr/bin/jw-pkg -> /opt/jw-pkg/bin/jw-pkg.py in
order to have jw-pkg in $PATH.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-06 15:58:11 +02:00
67eab4b864 pgit.sh: Fix log_start_stop()
log_start_stop() is responsible for logging markers at the beginning
and end of a decorated log. They should not be applied if pgit.sh is
run with --porcelain. In fact, they are, and vice versa. Fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-06 15:57:30 +02:00
25bde31d75 Release 1.0.0-199@suse-tumbleweed/x86_64
Signed-off-by: janware DevOps <devops@janware.com>
2026-04-04 17:22:55 +00:00
e3090016b5 Release 1.0.0-199@kali-rolling/amd64
Signed-off-by: janware DevOps <devops@janware.com>
2026-04-04 17:12:36 +00:00
0342ec67b1 Start version: 1.0.0-199
Signed-off-by: janware DevOps <devops@janware.com>
2026-04-04 17:11:47 +00:00
91abb82879 pgit.sh: Set -o pipefail
Set -o pipefail at the start of the script. This makes pgit.sh commit
work. Before it didn't, because run_git() doesn't return a proper
return value when it's used in a pipe with a cosmetic sed afterwards.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-04 19:02:24 +02:00
1da3f37889 pgit.sh: Honour PGIT_IGNORE for pgit.sh commit
PGIT_INGORE is not honoured for pgit.sh commit, fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-04 18:57:40 +02:00
160cb993df projects-dir.mk: Add git-show-pushable
Rename git-show-pushable-master-branches to git-show-pushable,
because, the target's recipe doesn't show pushable master branches,
but all commits in the working directories current branch not present
in origin/master.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-04 18:57:40 +02:00
fe5f343536 projects-dir.mk: Re-enable persistent SSH connections
This reverts commit 88e81 and effectively re-enables persistent SSH
connections to speed up builds.

    commit 88e8197ed7
    Author: Jan Lindemann <jan@janware.com>
    Date:   Thu Apr 20 20:00:46 2017 +0000

    projects-dir.mk: Partly disable persistent SSH

    Don't use persistent SSH-connections any more for "pkg-" targets,
    because, sadly, this hangs after uploading a package.

This commit puts some safeguards against hanging SSH into place,
namely setting default SSH timeouts down, SSH keepalive, setting SSH
BatchMode to yes.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-04 18:57:16 +02:00
1d17d16519 projects-dir.mk: Retire BUILD_PROJECTS
Use DEP_PROJECTS instead of BUILD_PROJECTS everywhere. DEP_PROJECTS
considers more projects, and for all targets it is relevant to, it's
desirable to have them operate on the maximum blast radius.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-04 16:15:38 +02:00
ef027f7d06 Release 1.0.0-198@suse-tumbleweed/x86_64
Signed-off-by: janware DevOps <devops@janware.com>
2026-04-03 23:24:54 +00:00
d3dfcc523a Release 1.0.0-198@kali-rolling/amd64
Signed-off-by: janware DevOps <devops@janware.com>
2026-04-03 23:10:59 +00:00
ff460420ef Start version: 1.0.0-198
Signed-off-by: janware DevOps <devops@janware.com>
2026-04-03 23:10:05 +00:00
5916dca0c5 projects-dir.mk: Add variable DEP_PROJECTS
make git-show-pushable-master-branches misses projects which should
better be pulled in as dependencies. It searches $(BUILLD_PROJECTS)
for repositories with pushable commits, that variable leaves some
out, and DEP_PROJECTS has them. It make use of the renovated
pkg-requires command.

This move should be extended to other uses of BUILD_PROJECTS as well,
after giving it some test runs. And the legacy and redundant command
prereq should be removed.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-03 19:07:44 +02:00
3c9ce19deb lib.ec.ssh.Paramiko: Fix exception logging
The catch-block around Paramiko's connect code throws another
exception, fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-04-03 17:29:44 +02:00
d5130bf9ba Release 1.0.0-197@kali-rolling/amd64
Signed-off-by: janware DevOps <devops@janware.com>
2026-04-03 02:29:44 +00:00
c2e683deb1 Release 1.0.0-197@suse-tumbleweed/x86_64
Signed-off-by: janware DevOps <devops@janware.com>
2026-04-01 02:28:05 +00:00
ad578db5c0 Start version: 1.0.0-197
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-31 23:24:28 +00:00
3e36e5f8ff Release 1.0.0-196@suse-tumbleweed/x86_64
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-30 06:16:28 +00:00
cf71367aa5 Release 1.0.0-196@kali-rolling/amd64
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-30 06:15:26 +00:00
706b74a20b Start version: 1.0.0-196
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-30 06:14:36 +00:00
e589cdbdbf cmds and lib: Don't print() log messages
print() should be used to output information requested by a certain
command, but not for logging the process to achieve it. log() should
be used for the latter. The current code has the distinction not down
clearly, fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-30 08:11:39 +02:00
6ba76ea44b Release 1.0.0-195@suse-tumbleweed/x86_64
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-29 15:59:07 +00:00
e3773cc180 Release 1.0.0-195@kali-rolling/amd64
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-29 15:46:48 +00:00
c402f70415 Start version: 1.0.0-195
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-29 15:45:54 +00:00
7cfe2c4775 lib.App._run(): default_completer=NoopCompleter()
By default, argcomplete uses argcomplete.FilesCompleter as default
for every argument. This mixes accessible files into the list of
possible completions. For most of jw-pkg's commands, that's unwanted,
so turn it off by defining a NoopCompleter class which does nothing,
and by set every arguments's default completer to a NoopCompleter
instance. If desired, completing files can be restored for an
argument by

   parser.add_argument("some-arg").completer = FilesCompleter()

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-28 12:45:50 +01:00
ce1b8b6744 lib.App: Fully parse argparse tree if _ARGCOMPLETE
Every module derived from lib.Cmd implements its own
parser.add_argument() logic. As a consequence, all Cmd derived
modules need to be loaded to have the full argument tree available.
This is avoided during normal program startup because it takes some
time. It's not necessary during normal program execution, nor for
showing help messages. It is, however, needed for argcomplete to do
its thing, so fully parse the command line if the program runs in
argcomplete mode, as determined by checking if _ARGCOMPLETE is
present in the environment.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-27 09:16:14 +01:00
9b208ecc1e lib.ExecContext.log_delim(): No interactive footer
lib.ExecContext.log_delim() logs a header not designed for enclosing
command output, and, hence, no footer should be output. This commit
suppresses it.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-27 09:16:14 +01:00
9b6ec109a1 cmds and lib: Don't print() log messages
print() should be used to output information requested by a certain
command, but not for logging the process to achieve it. log() should
be used for the latter. The current code has the distinction not down
clearly, fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-27 09:16:14 +01:00
27bf98f747 pgit.sh: Beautify logging
Log to stderr and add some ASCII-art around the output. Also, add a
--porcelain option to allow more stable output parsing. Subsequently,
use that option in make targets parsing the output, notably make diff
and make git-show-xxx.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-27 09:16:14 +01:00
0ca51e16ee Release 1.0.0-194@suse-tumbleweed/x86_64 2026-03-25 10:03:15 +00:00
d3344fedc0 Release 1.0.0-194@kali-rolling/amd64
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-25 09:51:15 +00:00
b62366d0df Start version: 1.0.0-194
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-25 09:50:30 +00:00
e461b2815d cmds.projects.BaseCmdPkgRelations: Fix Debian simple deps
Simple dependencies (i.e. non-triplet dependencies, e.g gcc > 15.0)
raise an exception on Debian, fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 09:50:28 +00:00
0a19f3173a Release 1.0.0-193@kali-rolling/amd64
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-25 07:38:43 +00:00
47a8230701 Start version: 1.0.0-193
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-25 07:37:58 +00:00
6d876e88f6 lib.util.run_sudo(): Pass argument list on unchanged
run_sudo() is a thin wrapper around ExecContext.sudo(), so don't try
to make sense more arguments than necessary.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 07:37:56 +00:00
6d9adfb5ff Release 1.0.0-192@kali-rolling/amd64
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-25 06:55:45 +00:00
97d6421f27 Start version: 1.0.0-192
Signed-off-by: janware DevOps <devops@janware.com>
2026-03-25 06:54:57 +00:00
b21d2d1c21 lib.ec.ssh.AsyncSSH: Add interactivity
Request a remote PTY from AsyncSSH, and wire the local terminal's
stdin up with it if interactive == True. This gives a real
interactive session if local stdin belongs to a terminal. Also,
thanks to AsyncSSH understanding that, forward terminal size changes
to the remote end.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 07:32:46 +01:00
737cbc3e24 lib.ec.ssh.AsyncSSH: Add class
Add a SSHClient implementation using AsyncSSH. This is the first and
currently only class derived from SSHClient which implements
SSHClient.Cap.LogOutput, designed to consume and log command output
as it streams in. It felt like the lower hanging fruit not to do that
with Paramiko: Paramiko doesn't provide a native async API, so it
would need to spawn additional worker threads. I think.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 07:32:46 +01:00
279b7789e2 lib.ec.SSHClient: Add property port
Add a port property to SSHClient, parsed from the ctor's URL, to
supply the obvious information.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 07:32:46 +01:00
3a84408436 lib.ec.SSHClient.__init__(): Add parameter caps
Add an optional caps ("capabilities") argument to the constructor of
SSHClient. It is meant to be used by derived classes in order to
declare that they don't want the base class to handle a default
behaviour for a certain capability, but that they want to implement
it themselves instead.

Also, give the _run_ssh() callbacks the necessary info as parameters,
so that the derived classes have the means to do so.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 07:32:46 +01:00
4393ca21fc App.os_cascade: Don't use platform.system()
Python's platform.system() outputs 'Linux', and to use it is
tempting. Sadly, that's wrong, because it reflects the host's idea of
the target system, not the execution context's, so replace it with
straight 'linux' if the distro is known, or, failing that, the output
of uname -s.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 07:32:46 +01:00
b2e1e411f1 lib.pm.*.query_packages(): Make it non-interactive
lib.pm.query_packages() uses a TTY for doing its thing and outputs
half-digested stuff to the terminal, fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 07:32:46 +01:00
8280327602 App.os_release: cat os-release non-interactively
Even with --interactive=[true|auto], there's no point in trying to
read /etc/os-release interactively, so don't do that. Most notably,
this commit keeps the property method from spilling /etc/os-release's
content over the terminal.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-03-25 07:32:46 +01:00