diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..ce98e4a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,67 @@ +name: Release + +on: + push: + tags: + - "v*.*.*" + +permissions: + contents: write + packages: write + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + + - uses: actions/setup-python@v7 + with: + python-version: "3.11" + + - name: Build Python distributions + run: | + python -m pip install --upgrade pip build + python -m build + + - name: Verify tag matches package version + run: | + python - <<'PY' + import pathlib, re, os + text = pathlib.Path("pyproject.toml").read_text() + version = re.search(r'^version = "([^"]+)"', text, re.M).group(1) + tag = os.environ["GITHUB_REF_NAME"] + assert tag == f"v{version}", f"tag {tag} does not match package version {version}" + PY + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Generate container metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository_owner }}/logsight-ai + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,value=latest + + - name: Build and publish container + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + generate_release_notes: true + files: | + dist/* diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..dfc707f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +All notable release-level changes to LogSight-AI are documented here. + +## [Unreleased] + +## [0.1.0] - 2026-08-21 + +### Added +- Installable `logsight-ai` Python package with the `logsight` console entry point. +- Automated quality checks covering formatting, linting, strict type checking, tests, and coverage. +- Package and Docker-image build verification in CI, including a container health command. +- Security checks including Bandit, dependency auditing, secret scanning, license inventory, and an SPDX SBOM artifact. +- Reproducible pytest-benchmark execution with JSON benchmark artifacts. +- Tagged release automation that builds Python distributions, publishes the LogSight-AI container to GHCR, and creates a GitHub Release. + +### Release scope +- Version `0.1.0` remains an alpha release, matching the package metadata. +- This changelog describes repository capabilities already represented by the package and CI/release configuration; it does not claim production readiness or measured real-world capacity. diff --git a/RELEASE_NOTES_v0.1.0.md b/RELEASE_NOTES_v0.1.0.md new file mode 100644 index 0000000..c2cc23b --- /dev/null +++ b/RELEASE_NOTES_v0.1.0.md @@ -0,0 +1,33 @@ +# LogSight-AI v0.1.0 + +LogSight-AI v0.1.0 is the first versioned release prepared from the repository's existing installable Python package and verified CI surface. + +## Verified release surface + +The repository declares package version `0.1.0`, Python `>=3.10`, and a `logsight` console entry point in `pyproject.toml`. + +The existing CI verifies: + +- formatting with Ruff; +- linting with Ruff; +- strict mypy checks for the `logsight` package; +- pytest with a 90% coverage floor; +- Python package builds; +- Docker image builds and the container `health` command; +- Bandit, pip-audit, Gitleaks, license inventory, and SPDX SBOM generation; +- a pytest-benchmark run with a JSON artifact. + +## Publishing contract + +The release workflow added for v0.1.0 triggers only on semantic-version tags matching `v*.*.*`. It verifies that the pushed tag matches the package version before publishing. + +For `v0.1.0`, a successful tagged workflow will: + +1. build the wheel and source distribution in `dist/`; +2. publish a container to `ghcr.io/CoreyLeath-code/logsight-ai` with semantic-version and `latest` tags; +3. create the GitHub Release with generated release notes; and +4. attach the built Python distributions to the GitHub Release. + +## Scope + +This is an alpha release. The release does not claim production readiness, horizontal scalability, or real-world capacity/performance beyond evidence explicitly stored and reproducible in the repository.