parent
e0e7eadbe0
commit
12f020b0c8
3
.github/workflows/build_and_release.yml
vendored
3
.github/workflows/build_and_release.yml
vendored
@ -29,8 +29,6 @@ jobs:
|
||||
make build
|
||||
- name: Create release!
|
||||
run: |
|
||||
echo ${{ github.event.repository.name }}
|
||||
echo ${GITHUB_REPOSITORY#*/}
|
||||
echo """release_id=$(\
|
||||
curl -s https://git.joekaufeld.com/api/v1/repos/${GITHUB_REPOSITORY%/*}/${{ github.event.repository.name }}/releases \
|
||||
-H "Authorization: token ${{ secrets.PAT }}" \
|
||||
@ -39,7 +37,6 @@ jobs:
|
||||
)""" >> $GITHUB_ENV
|
||||
- name: Upload assets!
|
||||
run: |
|
||||
echo ${{ env.release_id }}
|
||||
curl https://git.joekaufeld.com/api/v1/repos/${GITHUB_REPOSITORY%/*}/${{ github.event.repository.name }}/releases/${{ env.release_id }}/assets \
|
||||
-H "Authorization: token ${{ secrets.PAT }}" \
|
||||
-F attachment=@utils
|
||||
|
36
src/cli.py
36
src/cli.py
@ -7,6 +7,7 @@ import uuid
|
||||
import click
|
||||
import httpx
|
||||
from rich import pretty
|
||||
from rich.status import Status
|
||||
from rich.traceback import install
|
||||
from shiv.bootstrap import current_zipfile
|
||||
|
||||
@ -21,9 +22,17 @@ from src.art import BANNERS
|
||||
)
|
||||
@click.pass_context
|
||||
@click.version_option(version=src.__version__, prog_name="utils")
|
||||
def main(ctx):
|
||||
@click.option(
|
||||
"--update",
|
||||
is_flag=True,
|
||||
help="Check Gitea for a new version and auto-update.",
|
||||
)
|
||||
def main(ctx, update):
|
||||
"""Launch a utility or drop into a command line REPL if no command is given."""
|
||||
if ctx.invoked_subcommand is None:
|
||||
if update:
|
||||
update_from_gitea()
|
||||
sys.exit()
|
||||
elif ctx.invoked_subcommand is None:
|
||||
banner = random.choice(BANNERS)
|
||||
|
||||
pretty.install() # type: ignore
|
||||
@ -91,31 +100,42 @@ def beautify(words: list[str]):
|
||||
click.echo("".join(new_beautiful_string))
|
||||
|
||||
|
||||
@main.command()
|
||||
def update():
|
||||
def update_from_gitea():
|
||||
"""Get the newest release from Gitea and install it."""
|
||||
status = Status("Checking for new release...")
|
||||
status.start()
|
||||
|
||||
response = httpx.get(
|
||||
# "https://api.github.com/repos/itsthejoker/utils/releases/latest"
|
||||
"https://git.joekaufeld.com/api/v1/repos/jkaufeld/utils/releases/latest"
|
||||
)
|
||||
if response.status_code != 200:
|
||||
status.stop()
|
||||
click.echo(
|
||||
f"Something went wrong when talking to Gitea; got a"
|
||||
f" {response.status_code} with the following content:\n"
|
||||
f"{response.content}"
|
||||
)
|
||||
return
|
||||
status.update("Checking for new release...")
|
||||
release_data = response.json()
|
||||
if release_data["tag_name"] == src.__version__:
|
||||
click.echo("Server version is the same as current version; nothing to update.")
|
||||
status.stop()
|
||||
click.echo(
|
||||
"Server version is the same as current version;" " nothing to update."
|
||||
)
|
||||
return
|
||||
status.update("Updating...")
|
||||
|
||||
url = release_data["assets"][0]["browser_download_url"]
|
||||
with current_zipfile() as archive:
|
||||
with open(archive.filename, "wb") as f, httpx.stream("GET", url, follow_redirects=True) as r:
|
||||
with open(archive.filename, "wb") as f, httpx.stream(
|
||||
"GET", url, follow_redirects=True
|
||||
) as r:
|
||||
for line in r.iter_bytes():
|
||||
f.write(line)
|
||||
click.echo(f"Updated to {release_data['name']}! 🎉")
|
||||
|
||||
status.stop()
|
||||
click.echo(f"Updated to {release_data['tag_name']}! 🎉")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
Loading…
Reference in New Issue
Block a user