From b6e5865446077cf1978677e4330c26762a452ffe Mon Sep 17 00:00:00 2001 From: gormaniac <83027042+gormaniac@users.noreply.github.com> Date: Tue, 7 Jul 2026 07:00:14 -0600 Subject: [PATCH 1/2] build: add actions to build and release --- .github/workflows/build.yml | 31 + .github/workflows/release.yml | 54 + Makefile | 8 +- README.md | 2 +- dist/pyhatching-0.2.1-py3-none-any.whl | Bin 19421 -> 0 bytes dist/pyhatching-0.2.1.tar.gz | Bin 17548 -> 0 bytes doc/conf.py | 4 +- docs/.nojekyll | 0 docs/_sources/index.rst.txt | 13 - docs/_sources/pyhatching.rst.txt | 45 - .../_sphinx_javascript_frameworks_compat.js | 123 - docs/_static/basic.css | 925 ------ docs/_static/css/badge_only.css | 1 - docs/_static/css/fonts/Roboto-Slab-Bold.woff | Bin 87624 -> 0 bytes docs/_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 67312 -> 0 bytes .../css/fonts/Roboto-Slab-Regular.woff | Bin 86288 -> 0 bytes .../css/fonts/Roboto-Slab-Regular.woff2 | Bin 66444 -> 0 bytes .../_static/css/fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes .../_static/css/fonts/fontawesome-webfont.svg | 2671 ----------------- .../_static/css/fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes .../css/fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes .../css/fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes docs/_static/css/fonts/lato-bold-italic.woff | Bin 323344 -> 0 bytes docs/_static/css/fonts/lato-bold-italic.woff2 | Bin 193308 -> 0 bytes docs/_static/css/fonts/lato-bold.woff | Bin 309728 -> 0 bytes docs/_static/css/fonts/lato-bold.woff2 | Bin 184912 -> 0 bytes .../_static/css/fonts/lato-normal-italic.woff | Bin 328412 -> 0 bytes .../css/fonts/lato-normal-italic.woff2 | Bin 195704 -> 0 bytes docs/_static/css/fonts/lato-normal.woff | Bin 309192 -> 0 bytes docs/_static/css/fonts/lato-normal.woff2 | Bin 182708 -> 0 bytes docs/_static/css/theme.css | 4 - docs/_static/doctools.js | 156 - docs/_static/documentation_options.js | 13 - docs/_static/file.png | Bin 286 -> 0 bytes docs/_static/jquery.js | 2 - docs/_static/js/badge_only.js | 1 - docs/_static/js/html5shiv-printshiv.min.js | 4 - docs/_static/js/html5shiv.min.js | 4 - docs/_static/js/theme.js | 1 - docs/_static/language_data.js | 199 -- docs/_static/minus.png | Bin 90 -> 0 bytes docs/_static/plus.png | Bin 90 -> 0 bytes docs/_static/pygments.css | 75 - docs/_static/searchtools.js | 574 ---- docs/_static/sphinx_highlight.js | 154 - docs/genindex.html | 105 - docs/index.html | 126 - docs/objects.inv | 7 - docs/py-modindex.html | 140 - docs/pyhatching.html | 133 - docs/search.html | 120 - docs/searchindex.js | 1 - 52 files changed, 94 insertions(+), 5602 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/release.yml delete mode 100644 dist/pyhatching-0.2.1-py3-none-any.whl delete mode 100644 dist/pyhatching-0.2.1.tar.gz delete mode 100644 docs/.nojekyll delete mode 100644 docs/_sources/index.rst.txt delete mode 100644 docs/_sources/pyhatching.rst.txt delete mode 100644 docs/_static/_sphinx_javascript_frameworks_compat.js delete mode 100644 docs/_static/basic.css delete mode 100644 docs/_static/css/badge_only.css delete mode 100644 docs/_static/css/fonts/Roboto-Slab-Bold.woff delete mode 100644 docs/_static/css/fonts/Roboto-Slab-Bold.woff2 delete mode 100644 docs/_static/css/fonts/Roboto-Slab-Regular.woff delete mode 100644 docs/_static/css/fonts/Roboto-Slab-Regular.woff2 delete mode 100644 docs/_static/css/fonts/fontawesome-webfont.eot delete mode 100644 docs/_static/css/fonts/fontawesome-webfont.svg delete mode 100644 docs/_static/css/fonts/fontawesome-webfont.ttf delete mode 100644 docs/_static/css/fonts/fontawesome-webfont.woff delete mode 100644 docs/_static/css/fonts/fontawesome-webfont.woff2 delete mode 100644 docs/_static/css/fonts/lato-bold-italic.woff delete mode 100644 docs/_static/css/fonts/lato-bold-italic.woff2 delete mode 100644 docs/_static/css/fonts/lato-bold.woff delete mode 100644 docs/_static/css/fonts/lato-bold.woff2 delete mode 100644 docs/_static/css/fonts/lato-normal-italic.woff delete mode 100644 docs/_static/css/fonts/lato-normal-italic.woff2 delete mode 100644 docs/_static/css/fonts/lato-normal.woff delete mode 100644 docs/_static/css/fonts/lato-normal.woff2 delete mode 100644 docs/_static/css/theme.css delete mode 100644 docs/_static/doctools.js delete mode 100644 docs/_static/documentation_options.js delete mode 100644 docs/_static/file.png delete mode 100644 docs/_static/jquery.js delete mode 100644 docs/_static/js/badge_only.js delete mode 100644 docs/_static/js/html5shiv-printshiv.min.js delete mode 100644 docs/_static/js/html5shiv.min.js delete mode 100644 docs/_static/js/theme.js delete mode 100644 docs/_static/language_data.js delete mode 100644 docs/_static/minus.png delete mode 100644 docs/_static/plus.png delete mode 100644 docs/_static/pygments.css delete mode 100644 docs/_static/searchtools.js delete mode 100644 docs/_static/sphinx_highlight.js delete mode 100644 docs/genindex.html delete mode 100644 docs/index.html delete mode 100644 docs/objects.inv delete mode 100644 docs/py-modindex.html delete mode 100644 docs/pyhatching.html delete mode 100644 docs/search.html delete mode 100644 docs/searchindex.js diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..e96ea8b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,31 @@ +name: Build + +on: + pull_request: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install pipenv + run: pip install pipenv + + - name: Set up project environment + run: make setup + + - name: Build package + run: make build + + - name: Build documentation + run: make docs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2b8b4dd --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,54 @@ +name: Release + +on: + push: + tags: + - "v*" + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install pipenv + run: pip install pipenv + + - name: Set up project environment + run: make setup + + - name: Build package + run: make build + + - name: Build documentation + run: make docs + + - name: Package documentation + run: tar -czf docs.tar.gz -C docs . + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + files: | + dist/* + docs.tar.gz + + - name: Notify cloud-infra repo + env: + GH_TOKEN: ${{ secrets.DOCS_DISPATCH_TOKEN }} + run: | + gh api repos/gormaniac/cloud-infra/dispatches \ + -f event_type=doc-release \ + -f 'client_payload[tag]=${{ github.ref_name }}' \ + -f 'client_payload[repository]=${{ github.repository }}' \ + -f 'client_payload[github_sha]=${{ github.sha }}' diff --git a/Makefile b/Makefile index 284815d..7d7d24a 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ install-self: # Install this project's python package using the pipenv's pip .PHONY: docs docs: # Build the documentation for this package pipenv run sphinx-apidoc -T -f -o doc $(PKG_DIR) - pipenv run sphinx-build doc/ docs/ + pipenv run sphinx-build -b dirhtml doc/ docs/ .PHONY: clean-py clean-py: # Clean up Python generated files @@ -37,6 +37,8 @@ clean-py: # Clean up Python generated files clean: clean-py # Remove build files - including a forced "git rm" of "dist/*" git rm -f dist/* --ignore-unmatch rm -rf dist + git rm -f docs/* --ignore-unmatch + rm -rf docs .PHONY: read-docs read-docs: # Open the package docs locally @@ -48,12 +50,12 @@ read-docs: # Open the package docs locally .PHONY: release release: change-version clean setup build docs # Build a new versioned release and push it (requires VERSION=#.#.#) - git add dist/* doc/* docs/* pyproject.toml $(PKG_DIR)/__init__.py + git add doc/* pyproject.toml $(PKG_DIR)/__init__.py git commit -m "build: release v$(VERSION)" git push git tag -a v$(VERSION) -m "Release v$(VERSION)" git push origin v$(VERSION) - $(MAKE) clean-py + $(MAKE) clean .PHONY: pypi pypi: # Upload all Python packages in "dist/" to PyPI. diff --git a/README.md b/README.md index cde4fc4..ab35934 100644 --- a/README.md +++ b/README.md @@ -10,4 +10,4 @@ Supports: - Profile getting/setting - Yara rule getting/setting -Read the full documentation [here](https://gormo.co/pyhatching/). +Read the full documentation [here](https://gormo.co/docs/pyhatching/). diff --git a/dist/pyhatching-0.2.1-py3-none-any.whl b/dist/pyhatching-0.2.1-py3-none-any.whl deleted file mode 100644 index 692acc8ef41bc8a73b1a57e84e3da843b96495de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19421 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 diff --git a/dist/pyhatching-0.2.1.tar.gz b/dist/pyhatching-0.2.1.tar.gz deleted file mode 100644 index 5634c593c4fe2dd9561ca9b8b078016de7d499e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17548 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