1 Commits

Author SHA1 Message Date
ef46e79674 Improved desc. in README, explain why tool exists 2025-11-14 17:13:42 -06:00
9 changed files with 7 additions and 292 deletions

View File

@@ -1,6 +1,12 @@
# gt-tool # gt-tool
CLI tools for interacting with the Gitea API. Use interactively to talk to your Gitea instance, or automatically via a CI/CD pipeline. A CLI tool for interacting with the Gitea API. List existing releases, create new ones, and attach release-items (files) to them. It can be used interactively as one publishes their work, or automatically as part of a CI/CD pipeline.
## Why this thing exists
This program exists because I find GitHub Actions to be an insufficient system. There is no official "release-attachment" workflow. I have to either make my own or find someone else's. Since there is no standard Workflow for this task, the [Gitea version](https://gitea.com/actions/gitea-release-action) has a different API. Since I can only use branches, tags, or exact commit hashes, my dependency resolution is often manual or happens in surprising ways (e.g.: force pushing a new version tag). Adjacent to this is the issue that lots of dependencies are "assumed" and cannot be named -- like how the Ubuntu base image contains NodeJS, even if I never ask to install it. Finally, I can't easily execute or re-execute the workflows. There is no "run Action" button and I can't run any of it from my dev machine.
So I figured I'll make my own as a learning exercise and try to address as many of those problems as I can. The key is recognizing that a CI/CD platform needs a package manager. I like Debian, so I will stand on its package manager, although it might be better to pick NixOS or Gentoo. A GH Workflow which depends on this tool needs only to record it's name -- declarative build dependencies! This feature extends to the entire Debian container, automatically giving me full-system dependency knowledge. Updating the build environment is exactly like updating a normal Linux host because it *is* a normal Linux host. Lastly, it's also *a normal CLI program* so you can use it from your own dev workstation. There is no need for a "run Action" button.
## Usage ## Usage

View File

@@ -1 +0,0 @@
{"package":"62e0ece55a4e0150ab3a3f7f5299e6eb113134975100cddde5a68dfcbb5e1a5c","files":{}}

144
debian/changelog vendored
View File

@@ -1,144 +0,0 @@
gt-tool (3.0.1-2) unstable; urgency=medium
* Fix: debian/copyright was using old package name.
* Add a cargo-checksum.json, remove its fake
* Remove bogus pre-step inserts
* Strip out all the imports and exports
* Drop a copyright notice (!)
* Adopt debian/control contents from debcargo output
* Adopt debcargo auto-gen'd testing stuff
-- Robert Garrett <robertgarrett404@gmail.com> Thu, 13 Nov 2025 22:07:35 -0600
gt-tool (3.0.1-1) unstable; urgency=medium
* Update dependency versions for Debian 13 "Trixie"
* Add metadata required for publishing to crates.io
* Remove the comments tracking Debian-specific deps
* Mark v3.0.1 patch
* Update gbp.conf debian-branch to "deb/trixie"
* Drop entirety of old patch set
-- Robert Garrett <robertgarrett404@gmail.com> Thu, 13 Nov 2025 17:12:26 -0600
gt-tool (3.0.0-1) unstable; urgency=medium
* Make the README title singular
* Add a Cargo.toml & Git tag version comparison
* Scaffold the new config module
* Add property-get utility function
* Add a get-table util function
* Util fn's can use anything that impl's ToString
* Util to get sometimes-empty config property
* Add partial- and whole- config structs
* Prototype load-config function
* Put the per-project test expects in for lconf()
* Finish `fn lconf()`. Project-specific vals load
* Create-and-assign struct to whole.all
* Use the get_table util to extract "[all]" table
* Extract PartCfg readers to a try_from impl
* Add a builder-pattern proj-path setter, for flavor
* Assert empty conf str is an error, TODO: semantics
* Rename the config-string-reading function
* Externalize the test table
* Remove some debug prints
* Signature & tests for fn load_from_file()
* Implement the load_from_file function
* "Merge" method on PartialConfig
* Complete the public `get_config()` function
* Pass in search files rather than generating them
* Make default search paths available as util fn
* Remove `WholeFile` struct & anything that uses it
* Autoformat
* Cargo clippy fixes
* Delete a now-solved FIXME comment
* Make the URL and Repo FQRN CLI args optional
* Wire in the conf file loading, assume PWD project
* Add more unit tests for the config loader
* Add test for skipping unavailable conf files
* Fix config unit tests: project path is set!
* Add docstring for PartialConfig::try_from()
* Fix: use empty PartialConfig if proj conf missing
* Fix: use default "[all]" if one isn't present
* Another autoformat
* Fix some clippy lints
* Mark pre-release 3.0.0-alpha.1
* Add a project path CLI option
* Update CLI usage guide, add project lookup guide
* Write configuration guide in the README
* Split the owner and repo args apart in CLI parser
* Use current-dir as final fallback repo name
* Drop notice about CLI not having "repo" & "owner"
* Revise help text for CLI "--project" arg
* Update usage printout
* Create a short, complete explanation of req. info.
* New 'authentication' section
* Delete the old CLI option sections
* Rename remaining CLI arg sections
* Revise explanation of `--project` option
* Drop the "no-repo" comment in TOML example
* Rephrase the all-projects setting introduction
* Mark the file-format and search-path conf sections
* Lint and format
* Bump crate version to v3.0.0
* Update automation workflow with new CLI args
* Add new upstream dependency to debian/control
* Rediff patches
-- Robert Garrett <robertgarrett404@gmail.com> Tue, 22 Jul 2025 09:54:28 -0500
gt-tool (2.2.0-2) unstable; urgency=medium
* Fix: "Source:" URL in debian/copyright
* Fix typo in copyright comment
-- Robert Garrett <robertgarrett404@gmail.com> Sun, 13 Jul 2025 16:59:25 -0500
gt-tool (2.2.0-1) unstable; urgency=medium
* Basic impl Display for the Release struct
* Print releases in reverse order for easier reading
* Colorize the output!
* Remove trailing newline in Release item printout
* Galaxy-brained newline intersperse function
* Change to free-fn intersperse for stdlib compat
* `Release.colorized()`, not std::fmt::Display
* Address most of the cargo-clippy lints
* Prefix unused variables to quiet the linter
* Autoformat
* Oops, missed one
* Bump to v2.2.0
* Lift the empty-body string outside the let-if
* Add the new dependencies to debian/control
-- Robert Garrett <robertgarrett404@gmail.com> Fri, 04 Jul 2025 10:10:54 -0500
gt-tool (2.1.0-1) unstable; urgency=medium
* Fix: incorrect field names for `Attachment`
-- Robert Garrett <robertgarrett404@gmail.com> Thu, 12 Jun 2025 17:51:12 -0500
gt-tool (2.0.0-1) unstable; urgency=medium
* Interrogate list_releases result more closely
* Interrogate create_release result more closely
* Drop unused imports
* "Fix" the test case
* Interrogate create_release_attachment result
* Fold client-error-decode into a util function
* Add `Attachment` struct, new iface for create-rel
* Update main.rs to use new attachment iface
* Delete the unit tests
* ... and the unit testing notes in README.md
* Drop unused import in api/release.rs
* Use pre Rust 1.81 compatible file-exists test
* Rediff patches
-- Robert Garrett <robertgarrett404@gmail.com> Thu, 12 Jun 2025 16:28:18 -0500
gt-tool (1.0.0-1) unstable; urgency=low
* Experimental release.
-- Robert Garrett <robertgarrett404@gmail.com> Sun, 1 Jun 2025 16:05:00 -0500

88
debian/control vendored
View File

@@ -1,88 +0,0 @@
Source: gt-tool
Maintainer: Robert Garrett <robertgarrett404@gmail.com>
Section: rust
Priority: optional
Standards-Version: 4.6.2
Build-Depends:
debhelper-compat (= 13),
dh-sequence-cargo
Build-Depends-Arch:
cargo:native,
rustc:native,
libstd-rust-dev,
librust-clap-4+default-dev (>= 4.5.23-~~),
librust-clap-4+derive-dev (>= 4.5.23-~~),
librust-clap-4+env-dev (>= 4.5.23-~~),
librust-colored-2+default-dev (>= 2.2.0-~~),
librust-itertools-0.13+default-dev,
librust-reqwest-0.12+default-dev (>= 0.12.15-~~),
librust-reqwest-0.12+json-dev (>= 0.12.15-~~),
librust-reqwest-0.12+multipart-dev (>= 0.12.15-~~),
librust-reqwest-0.12+stream-dev (>= 0.12.15-~~),
librust-serde-1+default-dev (>= 1.0.217-~~),
librust-serde-1+derive-dev (>= 1.0.217-~~),
librust-tokio-1+default-dev (>= 1.43.1-~~),
librust-tokio-1+macros-dev (>= 1.43.1-~~),
librust-tokio-1+rt-multi-thread-dev (>= 1.43.1-~~),
librust-toml-0.8+default-dev (>= 0.8.19-~~)
Homepage: https://git.gelvin.dev/robert/gt-tool
Vcs-Git: https://git.gelvin.dev/robert/gt-tool
Vcs-Browser: https://git.gelvin.dev/robert/gt-tool
Rules-Requires-Root: no
X-Cargo-Crate: gt-tool
Package: librust-gt-tool-dev
Architecture: any
Multi-Arch: same
Depends:
${misc:Depends},
librust-clap-4+default-dev (>= 4.5.23-~~),
librust-clap-4+derive-dev (>= 4.5.23-~~),
librust-clap-4+env-dev (>= 4.5.23-~~),
librust-colored-2+default-dev (>= 2.2.0-~~),
librust-itertools-0.13+default-dev,
librust-reqwest-0.12+default-dev (>= 0.12.15-~~),
librust-reqwest-0.12+json-dev (>= 0.12.15-~~),
librust-reqwest-0.12+multipart-dev (>= 0.12.15-~~),
librust-reqwest-0.12+stream-dev (>= 0.12.15-~~),
librust-serde-1+default-dev (>= 1.0.217-~~),
librust-serde-1+derive-dev (>= 1.0.217-~~),
librust-tokio-1+default-dev (>= 1.43.1-~~),
librust-tokio-1+macros-dev (>= 1.43.1-~~),
librust-tokio-1+rt-multi-thread-dev (>= 1.43.1-~~),
librust-toml-0.8+default-dev (>= 0.8.19-~~)
Provides:
librust-gt-tool+default-dev (= ${binary:Version}),
librust-gt-tool-3-dev (= ${binary:Version}),
librust-gt-tool-3+default-dev (= ${binary:Version}),
librust-gt-tool-3.0-dev (= ${binary:Version}),
librust-gt-tool-3.0+default-dev (= ${binary:Version}),
librust-gt-tool-3.0.1-dev (= ${binary:Version}),
librust-gt-tool-3.0.1+default-dev (= ${binary:Version})
Description: CLI tools for interacting with the Gitea API - Rust source code
Mainly for attaching files to releases.
.
Source code for Debianized Rust crate "gt-tool"
Package: gt-tool
Architecture: any
Depends:
${misc:Depends},
${shlibs:Depends},
${cargo:Depends}
Recommends:
${cargo:Recommends}
Suggests:
${cargo:Suggests}
Provides:
${cargo:Provides}
Built-Using: ${cargo:Built-Using}
Static-Built-Using: ${cargo:Static-Built-Using}
Description: CLI tools for interacting with the Gitea API.
Use interactively to talk to your Gitea instance, or automatically via a CI/CD
pipeline. Currently supports:
.
- showing the Releases for a project
- creating a new Release for a project
- attaching files to a release

30
debian/copyright vendored
View File

@@ -1,30 +0,0 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: gt-tool
Upstream-Contact: Robert Garrett <robertgarrett404@gmail.com>
Source: https://git.gelvin.dev/robert/gt-tool
Files: *
Copyright: 2025 Robert Garrett <robertgarrett404@gmail.com>
License: GPL-3+
Files: debian/*
Copyright: 2025 Robert Garrett <robertgarrett404@gmail.com>
License: GPL-3+
License: GPL-3+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
.
It is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
.
You should have received a copy of the GNU General Public License
along with it. If not, see <http://www.gnu.org/licenses/>.
.
On Debian systems, the full text of the GNU General Public License version 3
can be found in the file /usr/share/common-licenses/GPL-3.

6
debian/gbp.conf vendored
View File

@@ -1,6 +0,0 @@
[DEFAULT]
compression = xz
compression-level = 9
upstream-tag = v%(version)s
debian-branch = deb/trixie

7
debian/rules vendored
View File

@@ -1,7 +0,0 @@
#!/usr/bin/make -f
%:
dh $@ --buildsystem cargo
override_dh_auto_test:
dh_auto_test -- test --all

View File

@@ -1 +0,0 @@
3.0 (quilt)

14
debian/tests/control vendored
View File

@@ -1,14 +0,0 @@
Test-Command: /usr/share/cargo/bin/cargo-auto-test gt-tool 3.0.1 --all-targets --all-features
Features: test-name=rust-gt-tool:@
Depends: dh-cargo (>= 31), rustc, @
Restrictions: allow-stderr, skip-not-installable
Test-Command: /usr/share/cargo/bin/cargo-auto-test gt-tool 3.0.1 --all-targets
Features: test-name=librust-gt-tool-dev:default
Depends: dh-cargo (>= 31), rustc, @
Restrictions: allow-stderr, skip-not-installable
Test-Command: /usr/share/cargo/bin/cargo-auto-test gt-tool 3.0.1 --all-targets --no-default-features
Features: test-name=librust-gt-tool-dev:
Depends: dh-cargo (>= 31), rustc, @
Restrictions: allow-stderr, skip-not-installable