Utilities for working with Python scripts in GitHub Actions
Project description
Hachitool
Hachitool is a set of utilities that make it easier to work with Python scripts in GitHub Actions.
Installation
Hachitool can be installed like any other Python package:
- run: pip install hachitool
Inline scripts
Hachitool can be ephemerally installed for inline Python scripts via uv:
- uses: astral-sh/setup-uv@v3
- shell: uv run --with hachitool python {0}
run: |
import hachitool
# Do stuff here
External scripts
Hachitool can be emphemerally installed for external scripts via uv and inline script metadata:
# script.py
# /// script
# dependencies = [
# "hachitool",
# ]
# ///
import hachitool
# Do stuff here
# workflow.yml
- uses: astral-sh/setup-uv@v3
- run: uv run script.py
Usage
hachitool.set_output
Set output parameters for a step. Takes either:
- a key as its first argument and a value as its second
- a set of key-value pairs as either a dictionary or keyword arguments
import hachitool
# All of these are equivalent
hachitool.set_output("key", "value")
hachitool.set_output({"key": "value"})
hachitool.set_output(key="value")
hachitool.set_env
Set environment variables. Takes either:
- a key as its first argument and a value as its second
- a set of key-value pairs as either a dictionary or keyword arguments
import hachitool
# All of these are equivalent
hachitool.set_env("key", "value")
hachitool.set_env({"key": "value"})
hachitool.set_env(key="value")
hachitool.add_path
Append something to the system path.
import hachitool
hachitool.add_path("/absolute/or/relative/path")
hachitool.summary.add
Add content to the step summary. Supports GitHub-flavored Markdown.
import hachitool
hachitool.summary.add("this is a summary")
[!TIP] Calling
hachitool.summarydirectly does the same thing:import hachitool hachitool.summary("this is a summary")
If the keyword-only overwrite argument is True, existing summary content will be erased:
import hachitool
hachitool.summary.add("this is a summary", overwrite=True)
hachitool.summary.clear
Clear the step summary.
import hachitool
hachitool.summary.clear()
hachitool.mask
import hachitool
hachitool.mask("super secret value")
hachitool.log
Print a message to the log. Takes the following arguments:
| Argument | Type | Description | Required? |
|---|---|---|---|
level |
"debug" | "notice" | "warning" | "error" |
The log level of the message. | Yes |
message |
str |
The message to print. | Yes |
file |
str |
The path to a file to annotate with the message. | No |
line |
int | tuple[int, int] |
The line(s) of file to annotate with the message. A tuple will be interpreted as a pair of starting and ending lines. |
No |
column |
int | tuple[int, int] |
The column(s) of file to annotate with the message. A tuple will be interpreted as a pair of starting and ending columns. |
No |
level and message are the first and second positional arguments, respectively.
file, line, and column are keyword-only.
import hachitool
hachitool.log("notice", "this is a notice message", file="main.py", line=1, column=6)
# Using tuples for `line` and `column`
hachitool.log("notice", "this is a notic message", file="main.py", line=(1, 5), column=(6, 10))
hachitool.debug, hachitool.notice, hachitool.warning, hachitool.error
Print a debug, notice, warning, or error message to the log, respectively. Takes all arguments of
hachitool.log except for level.
import hachitool
hachitool.debug("this is a debug message")
hachitool.notice("this is a notice message")
hachitool.warning("this is a warning message")
hachitool.error("this is an error message")
hachitool.fail
Optionally print an error-level message, then fail the workflow. Takes an optional exit_code argument
that must be an integer greater than or equal to 1. Additionally takes all arguments of hachitool.error,
except message is optional.
import hachitool
hachitool.fail("something went wrong", exit_code=1)
hachitool.log_group
Anything printed to the log inside this context manager will be nested inside an expandable group.
Takes a mandatory title argument.
import hachitool
with hachitool.log_group(title="group title"):
print("I'm part of a log group!")
print("me too!")
print("me three!")
hachitool.literal
Nothing printed to the log inside this context manager will be interpreted as a workflow command.
import hachitool
hachitool.warning("this is a warning message to show that commands are being processed")
with hachitool.literal():
hachitool.warning("this will not render as a warning because commands are not being processed")
hachitool.warning("this will render as a warning since commands are being processed again")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hachitool-1.0.1.tar.gz.
File metadata
- Download URL: hachitool-1.0.1.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb3ef4d42905756e8f9e22fb81ba268d829c545835e5d1967644b2071907b0c4
|
|
| MD5 |
ae70ae998e900cf070c3b21d5b025845
|
|
| BLAKE2b-256 |
f9c86b37f272a9a8765f8abe76fbf6a55da3d29c42d95870742dd99bb3ba01da
|
File details
Details for the file hachitool-1.0.1-py3-none-any.whl.
File metadata
- Download URL: hachitool-1.0.1-py3-none-any.whl
- Upload date:
- Size: 6.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de2cf86283f1f02e08d63650fc578eeb6afb715601e7a5bfb16f3b1e1607e606
|
|
| MD5 |
e712491b9d5e9fd2782cff7ddaa6bcc5
|
|
| BLAKE2b-256 |
350ce44d2891d937b02ebc5b5de395ff78430aedbd27462ffdc45bd5fedd1bc8
|