chore(build): host GDAL and hastegeo wheels on GitHub Releases#75
Open
jQuinRivero wants to merge 1 commit into
Open
chore(build): host GDAL and hastegeo wheels on GitHub Releases#75jQuinRivero wants to merge 1 commit into
jQuinRivero wants to merge 1 commit into
Conversation
jQuinRivero
marked this pull request as ready for review
July 8, 2026 13:20
jQuinRivero
added a commit
that referenced
this pull request
Jul 13, 2026
Resolve PR #75 against current main and implement ADO 547517 with a credential-safe wheel and image release flow. - make Hatch build-only and resolve versions in pure tested policy code - build PR wheels and Docker images without write or Azure credentials - publish from a trusted workflow_run behind the protected release gate - validate wheel filename/METADATA and never clobber existing assets - use stable source tags for idempotent main releases - build and lock versioned ACR image tags - validate deploy wheel before Azure login and fail on func publish errors - make scheduled RC cleanup report-only and manual deletion gated - pin workflow actions to full SHAs and add release-policy tests/specs The protected hastegeo-release environment and enablement variables remain disabled until a repository administrator configures required reviewers.
Move GDAL and hastegeo wheels to the public haste-binaries GitHub Release and add a secure automated release pipeline. - keep local Function builds on editable checked-out hastegeo source - resolve and build sequential PEP 440 RC wheels in read-only PR jobs - publish same-repository RCs from trusted default-branch workflow code - build training and imageryprep once in ACR with the exact matching RC tag - preserve Docker-only PR behavior and avoid duplicate hastelib image builds - validate deployable wheel/image versions before Azure deployment - prevent wheel and versioned image overwrites - make stable releases idempotent through source tags - report stale RC cleanup candidates and require explicit deletion approval - add release policy, publisher, deployment, cleanup, and workflow tests
jQuinRivero
force-pushed
the
v-joaquinri/move-binaries-to-github
branch
from
July 15, 2026 13:19
6483a72 to
6ae5969
Compare
There was a problem hiding this comment.
Pull request overview
This PR migrates GDAL and hastegeo wheel distribution from legacy Azure Blob hosting to GitHub Releases (haste-binaries) and introduces a split, least-privilege CI pipeline that builds RC/stable wheels in an untrusted job and publishes them via a trusted default-branch workflow, with version-coherent ACR image tags and deploy-time validation.
Changes:
- Adds a version-resolution + immutable wheel publishing toolchain (
hastelib/haste_release.py+.github/scripts/*) and corresponding unit/workflow policy tests. - Updates function/Docker build and deployment flows to default to editable local
hastelibinstalls, while CI rewrites requirements to validated wheel URLs for remote builds. - Adds new GitHub Actions workflows for wheel build, trusted publication + ACR builds, and report-first RC cleanup; updates docs/specs accordingly.
Reviewed changes
Copilot reviewed 37 out of 37 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| spec/features/hastegeo-ci-pipeline/user-stories.md | Defines personas, acceptance criteria, and agent assignment map for the CI/publish pipeline. |
| spec/features/hastegeo-ci-pipeline/test-plan.md | Documents unit/integration scenarios and workflow security assertions for the new pipeline. |
| spec/features/hastegeo-ci-pipeline/README.md | Feature overview, motivation, success criteria, and affected components. |
| spec/features/hastegeo-ci-pipeline/plan.md | Execution plan and rollout gating variables/environments. |
| spec/features/hastegeo-ci-pipeline/design.md | Technical design and trust-boundary model for build vs publish vs ACR build steps. |
| README.md | Removes a stray formatting line in the repo README. |
| hastelib/tests/build/test_release_workflows.py | Adds policy tests for workflow pinning, permissions, gating, and deploy behavior. |
| hastelib/tests/build/test_release_scripts.py | Adds tests for wheel validation/publishing, deploy resolver, requirement toggling, and cleanup planning. |
| hastelib/tests/build/test_haste_release.py | Adds/updates tests for deterministic version resolution and error propagation. |
| hastelib/src/hastegeo/about.py | Sets local/editable installs to report 0.0.0+local; CI stamps explicit versions into wheels/images. |
| hastelib/README.md | Updates install instructions to GitHub Releases wheel URLs and documents the new CI-based release process. |
| hastelib/pyproject.toml | Removes Azure build-time deps from build-system requirements (hook is now build-only). |
| hastelib/haste_release.py | Introduces pure version policy and release-asset querying helpers used by CI scripts. |
| hastelib/haste_build.py | Converts the Hatch hook to only stamp an explicit version and emit outputs; removes blob upload/pin rewriting. |
| docs/requirements.txt | Updates documentation install commands to use GitHub Releases wheel URLs. |
| docs/api/hastefuncqueues.md | Updates docs to reflect editable-local default and CI rewrite to wheel for deployment. |
| docker/README.md | Updates wheel/image build documentation to reflect the new RC/stable workflows and artifact coherence rules. |
| docker/imageryprep/requirements.txt | Switches GDAL wheel source to GitHub Releases and removes now-unneeded hastegeo @ ... wheel line. |
| api/hastefuncqueues/requirements.txt | Defaults to editable -e ../../hastelib and keeps a commented wheel line for CI/deploy rewrite. |
| api/hastefuncqueues/README.md | Aligns component docs with editable-local default + CI rewrite behavior. |
| api/hastefuncqueues/Dockerfile | Copies full hastelib/ and installs via requirements (editable by default). |
| api/hastefuncapi/requirements.txt | Defaults to editable -e ../../hastelib and updates GDAL wheel URL host. |
| api/hastefuncapi/Dockerfile | Copies full hastelib/ and installs via requirements (editable by default). |
| AGENTS.md | Updates repository agent guidance to reflect build-only hook + trusted publisher model. |
| .github/workflows/README.md | Documents the new hastegeo wheel + versioned-image workflow behavior and gating variables. |
| .github/workflows/rc-cleanup.yml | Adds scheduled report-only RC cleanup with an approval-gated delete path. |
| .github/workflows/hastegeo-publish.yml | Adds trusted workflow_run publisher, RC ACR builds, and PR artifact comment summary. |
| .github/workflows/hastegeo-build.yml | Adds read-only wheel build workflow (version resolve, tests, build, validate, upload artifact). |
| .github/workflows/docker-build-and-push.yml | Prevents duplicate hastelib-driven image builds; pins actions to SHAs. |
| .github/workflows/deploy-apps.yml | Adds deploy-time wheel/version resolution and RC coherence enforcement before Azure mutation. |
| .github/scripts/set_hastegeo_source.py | Adds idempotent requirements toggling between editable and wheel sources. |
| .github/scripts/resolve_hastegeo_version.py | Adds CI resolver entrypoint emitting Actions outputs. |
| .github/scripts/resolve_hastegeo_deploy.py | Adds deploy resolver to verify asset existence and emit canonical wheel URL. |
| .github/scripts/publish_hastegeo_wheel.py | Adds trusted wheel validator/publisher enforcing immutability and tag policy. |
| .github/scripts/deploy_apps.sh | Ensures func publish failures fail the workflow and rewrites function requirements to wheel when deploying. |
| .github/scripts/cleanup_rc_releases.py | Adds fail-closed, report-first cleanup planner and optional deletion logic. |
| .github/rc-retain.txt | Adds retention file for RC cleanup allowlisting. |
Comments suppressed due to low confidence (1)
.github/workflows/hastegeo-build.yml:16
- The push path filter is also limited to hastelib/**. If CI scripts or the workflow wiring change on main (e.g., resolve/publish/deploy scripts), this build+test workflow won’t run on push, which increases the chance of breaking the default-branch trusted publisher/deploy path without immediately noticing.
push:
branches:
- main
paths:
- "hastelib/**"
Comment on lines
+7
to
+11
| paths: | ||
| - "hastelib/**" | ||
| - ".github/scripts/resolve_hastegeo_version.py" | ||
| - ".github/scripts/publish_hastegeo_wheel.py" | ||
| - ".github/workflows/hastegeo-build.yml" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Moves the GDAL and
hastegeowheels from legacy Azure Blob hosting to the publichaste-binariesGitHub Release, and adds an automated release-candidate pipeline forhastegeochanges.For each
hastelibrelease candidate, the pipeline produces one matching deployable set:Changes
hastegeowheels on GitHub Releases using anonymous public download URLs.hastelibsource.hastelibimage builds in the existing Docker workflow.hastegeoversion and rejects mismatched RC artifact sets.Why
Previously, wheel building, publication, and dependency pin updates were coupled together. The initial CI design also built the same large Docker images locally and then rebuilt them in ACR, adding unnecessary wait time.
The new design separates untrusted PR builds from privileged publication while ensuring each expensive Docker image is built only once. The wheel and both images share one version, making the exact artifact set straightforward to deploy and reproduce.
Security properties
Testing
Rollout
The RC build and trusted publication workflows become active after these workflow definitions are available on the default branch. Stable publication remains disabled until the repository's release controls are configured.
Legacy Blob-hosted files are not removed, preserving compatibility for existing external pins during migration.