mirror of
https://github.com/borgmatic-collective/borgmatic.git
synced 2026-07-22 02:03:01 +02:00
89 lines
3.6 KiB
Bash
Executable File
89 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
projects_token=${1:-}
|
|
github_token=${2:-}
|
|
|
|
if [[ -z $github_token ]]; then
|
|
echo "Usage: $0 [projects-token] [github-token]"
|
|
exit 1
|
|
fi
|
|
if [[ ! -f NEWS ]]; then
|
|
echo "Missing NEWS file. Try running from root of repository."
|
|
exit 1
|
|
fi
|
|
|
|
version=$(head --lines=1 NEWS)
|
|
|
|
if [[ $version =~ .*dev* ]]; then
|
|
echo "Refusing to release a dev version: $version"
|
|
exit 1
|
|
fi
|
|
|
|
if ! git diff-index --quiet HEAD -- ; then
|
|
echo "Refusing to release with local changes:"
|
|
git status --porcelain
|
|
exit 1
|
|
fi
|
|
|
|
git tag $version
|
|
git push origin $version
|
|
git push github $version
|
|
|
|
# Build borgmatic and publish to pypi.
|
|
rm -fr dist
|
|
uv build
|
|
tarball_path="dist/borgmatic-$version.tar.gz"
|
|
wheel_path=$(ls dist/borgmatic-*-py3-none-any.whl)
|
|
twine upload -r pypi --username __token__ "$tarball_path"
|
|
twine upload -r pypi --username __token__ "$wheel_path"
|
|
|
|
# Build docs and extract HTML.
|
|
scripts/export-docs-from-image
|
|
docs_path=dist/borgmatic-docs.tar.gz
|
|
|
|
# Build stand-alone binary.
|
|
uv venv --python 3.13 --clear binary
|
|
source binary/bin/activate
|
|
uv pip install -r binary_requirements.txt nuitka[onefile]
|
|
nuitka --mode=onefile --enable-plugin=upx --include-package-data=borgmatic --include-data-dir=borgmatic.egg-info=borgmatic.egg-info --include-package=borgmatic.hooks --include-package=apprise --no-deployment-flag=self-execution borgmatic/commands/borgmatic.py
|
|
deactivate
|
|
rm -fr binary borgmatic.build borgmatic.dist
|
|
standalone_binary_path="dist/borgmatic-${version}-binary-linux-glibc-x86_64"
|
|
mv borgmatic.bin "$standalone_binary_path"
|
|
|
|
# Set release changelogs on projects.torsion.org and GitHub.
|
|
release_changelog="$(cat NEWS | sed '/^$/q' | grep -v '^\S')"
|
|
escaped_release_changelog="$(echo "$release_changelog" | sed -z 's/\n/\\n/g' | sed -z 's/\"/\\"/g')"
|
|
release_id=$(curl --silent --request POST \
|
|
"https://projects.torsion.org/api/v1/repos/borgmatic-collective/borgmatic/releases" \
|
|
--header "Authorization: token $projects_token" \
|
|
--header "Accept: application/json" \
|
|
--header "Content-Type: application/json" \
|
|
--data "{\"body\": \"$escaped_release_changelog\", \"draft\": false, \"name\": \"borgmatic $version\", \"prerelease\": false, \"tag_name\": \"$version\"}" \
|
|
| jq ".id")
|
|
curl --silent --request POST \
|
|
"https://projects.torsion.org/api/v1/repos/borgmatic-collective/borgmatic/releases/$release_id/assets?name=$(basename $wheel_path)" \
|
|
--header "Authorization: token $projects_token" \
|
|
--header "Accept: application/json" \
|
|
--form attachment=@"$wheel_path"
|
|
curl --silent --request POST \
|
|
"https://projects.torsion.org/api/v1/repos/borgmatic-collective/borgmatic/releases/$release_id/assets?name=$(basename $tarball_path)" \
|
|
--header "Authorization: token $projects_token" \
|
|
--header "Accept: application/json" \
|
|
--form attachment=@"$tarball_path"
|
|
curl --silent --request POST \
|
|
"https://projects.torsion.org/api/v1/repos/borgmatic-collective/borgmatic/releases/$release_id/assets?name=$(basename $docs_path)" \
|
|
--header "Authorization: token $projects_token" \
|
|
--header "Accept: application/json" \
|
|
--form attachment=@"$docs_path"
|
|
curl --silent --request POST \
|
|
"https://projects.torsion.org/api/v1/repos/borgmatic-collective/borgmatic/releases/$release_id/assets?name=$(basename $standalone_binary_path)" \
|
|
--header "Authorization: token $projects_token" \
|
|
--header "Accept: application/json" \
|
|
--form attachment=@"$standalone_binary_path"
|
|
|
|
github-release create --token="$github_token" --owner=witten --repo=borgmatic --tag="$version" --target_commit="main" \
|
|
--name="borgmatic $version" --body="$release_changelog"
|