diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7091239..1c57b67 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,7 @@ on: pull_request: branches: - main + workflow_call: jobs: typecheck: @@ -17,9 +18,6 @@ jobs: with: python-version: "3.13" - uses: pypa/hatch@install - # TODO: remove after we release codex-sdk package (and are no longer installing from github) - - name: setup git url rewrite - run: git config --global url."https://${{ secrets.GH_USERNAME }}:${{ secrets.CLEANLAB_BOT_PAT }}@github.com".insteadOf ssh://git@github.com - run: hatch run types:check fmt: name: Format and lint @@ -43,7 +41,4 @@ jobs: with: python-version: ${{ matrix.python }} - uses: pypa/hatch@install - # TODO: remove after we release codex-sdk package (and are no longer installing from github) - - name: setup git url rewrite - run: git config --global url."https://${{ secrets.GH_USERNAME }}:${{ secrets.CLEANLAB_BOT_PAT }}@github.com".insteadOf ssh://git@github.com - run: hatch test -v --cover --include python=$(echo ${{ matrix.python }}) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..22c567d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,82 @@ +name: Build and publish package +on: + push: + tags: + - 'v*.*.*' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + +jobs: + tests: + uses: ./.github/workflows/ci.yml + + build: + name: Build package and upload artifacts + needs: tests + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + - name: Install hatch + uses: pypa/hatch@install + - name: Check versions match + run: | + pkg_version=$(hatch version) + tag_version=${GITHUB_REF#refs/tags/v} + if [ "$pkg_version" != "$tag_version" ]; then + echo "Package version ($pkg_version) does not match git tag version ($tag_version)" + exit 1 + fi + - name: Build package + run: hatch build + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: cleanlab-codex + path: dist/* + if-no-files-found: error + + publish-pypi: + name: Publish to PyPI + needs: build + runs-on: ubuntu-latest + permissions: + id-token: write + steps: + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: cleanlab-codex + path: dist + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + + upload-release: + name: Upload release to GitHub + needs: build + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Extract release notes + id: extract-release-notes + uses: ffurrer2/extract-release-notes@v2 + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: cleanlab-codex + path: dist + - name: Upload release + uses: softprops/action-gh-release@v1 + with: + files: dist/* + body: ${{ steps.extract-release-notes.outputs.release_notes }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index edda17e..966c070 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,11 +7,9 @@ repos: language: python types: [python] pass_filenames: false - verbose: true - id: type-check name: type-check entry: hatch run types:check language: python types: [python] pass_filenames: false - verbose: true diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..8bdc015 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [0.0.1a1] - 2025-01-29 + +### Added + +- Pre-release of the Cleanlab Codex Python client. + +[Unreleased]: https://github.com/cleanlab/cleanlab-codex/compare/v0.0.1a1...HEAD +[0.0.1a1]: https://github.com/cleanlab/cleanlab-codex/compare/267a93300f77c94e215d7697223931e7926cad9e...v0.0.1a1 \ No newline at end of file diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index ef8e433..7d342b3 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -73,6 +73,21 @@ You can use [`hatch publish`][hatch-publish] if you want to manually publish bui [hatch-publish]: https://hatch.pypa.io/latest/publish/ [pypi]: https://pypi.org/ +### Automated releases + +Automated releases are handled by the [release workflow][release-workflow] which is triggered by pushing a new tag to the repository. To create a new release: + +1. Bump the version in `src/cleanlab_codex/__about__.py`. You can use the [`hatch version`][hatch-version] command to do this. +2. Ensure that the release notes are updated in [`CHANGELOG.md`][changelog]. You should update the `[Unreleased]` header to the new version and add a new `[Unreleased]` section at the top of the file. +3. Create a PR and merge these changes into the `main` branch. +4. After the PR is merged into `main`, create a new release tag by running `git tag v` (i.e. `git tag v0.0.1`). +5. Push the tag to the repository by running `git push origin `. +6. This will trigger the release workflow which will build the package, create a release on GitHub, and publish the package version to PyPI. The GitHub release notes will be automatically generated from the [changelog]. + +[release-workflow]: .github/workflows/release.yml +[hatch-version]: https://hatch.pypa.io/latest/version/#updating +[changelog]: CHANGELOG.md + ## Continuous integration Testing, type checking, and formatting/linting is [checked in CI][ci]. diff --git a/src/cleanlab_codex/__about__.py b/src/cleanlab_codex/__about__.py index b553216..9a373d2 100644 --- a/src/cleanlab_codex/__about__.py +++ b/src/cleanlab_codex/__about__.py @@ -1,2 +1,2 @@ # SPDX-License-Identifier: MIT -__version__ = "0.0.1" +__version__ = "0.0.1a1"