diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml new file mode 100644 index 0000000..1c52345 --- /dev/null +++ b/.github/workflows/ci-cd.yml @@ -0,0 +1,96 @@ +name: ci-cd + +on: [push, pull_request] + +jobs: + ci: + # set up os + runs-on: ubuntu-latest + + # define job steps + steps: + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + architecture: "x64" + env: + AGENT_TOOLSDIRECTORY: /opt/hostedtoolcache + + - name: Check-out repository + uses: actions/checkout@v4 + + - name: Install poetry + uses: snok/install-poetry@v1 + + - name: Install package + run: poetry install + + - name: Execute tests + run: poetry run python -m pytest -v tests/ --cov=src --cov-report=xml -rP + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + with: + files: ./coverage.xml + + - name: Build documentation + run: poetry run make html --directory docs/ + cd: + needs: ci + + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + + runs-on: ubuntu-latest + concurrency: release + permissions: + id-token: write + contents: write + + steps: + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + architecture: "x64" + env: + AGENT_TOOLSDIRECTORY: /opt/hostedtoolcache + + - name: Check-out repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install poetry + uses: snok/install-poetry@v1 + + - name: Install package + run: poetry install + + - name: Use Python Semantic Release to prepare release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name github-actions + git config user.email github-actions@github.com + poetry run semantic-release publish + + - name: Publish to TestPyPi + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.TEST_PYPI_API_TOKEN }} + repository_url: https://test.pypi.org/legacy/ + + - name: Test install from TestPyPI + run: | + pip install \ + --index-url https://test.pypi.org/simple/ \ + --extra-index-url https://pypi.org/simple \ + modelsight + + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 67534a6..95e5490 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,5 +38,13 @@ requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.semantic_release] -version_variable = "pyproject.toml:version" -version_source = "tag" \ No newline at end of file +version_variable = "pyproject.toml:version" # version location +version_source = "tag" +branch = "main" # branch to make releases of +changelog_file = "CHANGELOG.md" # changelog file +build_command = "poetry build" # build dists +dist_path = "dist/" # where to put dists +upload_to_release = true # auto-create GitHub release +upload_to_pypi = false # don't auto-upload to PyPI +remove_dist = false # don't remove dists +patch_without_tag = true # patch release by default \ No newline at end of file