From 8e6403210ffd5055071e09d94e10891518784ee6 Mon Sep 17 00:00:00 2001 From: Art Morozov Date: Wed, 24 Jul 2024 13:23:20 -0400 Subject: [PATCH] DATAGO-80480: Change workflows to use shareable public actions (#10) * Add reusable workflows * Run docker tests in parallel --- .github/workflows/ci.yml | 135 ++++----------------------------- .github/workflows/release.yaml | 78 ++++--------------- pyproject.toml | 16 ---- 3 files changed, 29 insertions(+), 200 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 00e94ee0..21e2b8b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,61 +9,35 @@ on: permissions: id-token: write checks: write - issues: read pull-requests: write + contents: write jobs: - test: + ci: + uses: SolaceDev/solace-public-workflows/.github/workflows/hatch_ci.yml@v1.0.0 + secrets: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + SONAR_HOST_URL: ${{ vars.SONAR_HOST_URL }} + structure-test: + name: Test Docker Image Structure runs-on: ubuntu-latest - env: - HATCH_CACHE_DIR: ${{ github.workspace }}/.hatch_cache - HATCH_DATA_DIR: ${{ github.workspace }}/.hatch_data - steps: - - uses: actions/checkout@v4 + - name: Checkout + uses: actions/checkout@v4 with: fetch-depth: 0 + ssh-key: ${{ secrets.COMMIT_KEY }} - - name: Install Hatch - uses: pypa/hatch@install - - - name: Restore Hatch Directory - uses: actions/cache/restore@v4 - id: cache-restore - with: - path: | - ${{ env.HATCH_CACHE_DIR }} - ${{ env.HATCH_DATA_DIR }} - key: ${{ runner.os }}-hatch-${{ hashFiles('pyproject.toml','requirements.txt') }} - - - name: Install Dependencies - if: steps.cache-restore.outputs.cache-hit != 'true' - run: | - hatch python install 3.8 3.12 - - - name: Install Dependencies - if: steps.cache-restore.outputs.cache-hit != 'true' - run: | - hatch env create test - - - name: Cache Hatch Directory - uses: actions/cache/save@v4 - if: steps.cache-restore.outputs.cache-hit != 'true' - id: cache-hatch - with: - path: | - ${{ env.HATCH_CACHE_DIR }} - ${{ env.HATCH_DATA_DIR }} - key: ${{ runner.os }}-hatch-${{ hashFiles('pyproject.toml','requirements.txt') }} + - name: Set up Hatch + uses: SolaceDev/solace-public-workflows/.github/actions/hatch-setup@v1.0.0 - - name: Set up Docker Buildx + - name: Set Up Docker Buildx id: builder uses: docker/setup-buildx-action@v3 - name: Prepare env file run: | cp .env_template .env - shell: bash - name: Build Docker Image uses: docker/build-push-action@v6 @@ -74,84 +48,7 @@ jobs: builder: ${{ steps.builder.outputs.name }} load: true - - name: Run Lint - continue-on-error: true - run: | - hatch run lint:ruff check -o lint.json --output-format json - shell: bash - - - name: Run Structured Tests - run: | - hatch run +py=312 test:make structure-test + - name: Run Structure Tests shell: bash - - - name: Run Unit Tests - shell: bash - run: | - hatch test --cover --all --parallel --junitxml=junit.xml - - - name: Combine Coverage Reports - continue-on-error: true run: | - hatch run +py=312 test:coverage combine - shell: bash - - - name: Report coverage - run: | - hatch run +py=312 test:coverage xml - shell: bash - - - name: SonarQube Scan - if: always() && github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository - uses: sonarsource/sonarqube-scan-action@v2.2.0 - env: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - SONAR_HOST_URL: ${{ vars.SONAR_HOST_URL }} - with: - args: > - -Dsonar.tests=tests/ - -Dsonar.verbose=true - -Dsonar.sources=src/ - -Dsonar.projectKey=${{github.repository_owner}}_${{github.event.repository.name}} - -Dsonar.python.coverage.reportPaths=coverage.xml - -Dsonar.python.ruff.reportPaths=lint.json - - - name: SonarQube Quality Gate check - id: sonarqube-quality-gate-check - if: always() && github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository - uses: sonarsource/sonarqube-quality-gate-action@master - env: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - SONAR_HOST_URL: ${{ vars.SONAR_HOST_URL }} - - # Build and verify packages - - name: Build - run: hatch build - - - name: Verify Packages - run: | - ls dist/*.tar.gz | hatch run +py=312 test:xargs -n1 twine check - ls dist/*.whl | hatch run +py=312 test:xargs -n1 twine check - shell: bash - - - name: Surface failing tests - if: always() - uses: pmeier/pytest-results-action@main - with: - # A list of JUnit XML files, directories containing the former, and wildcard - # patterns to process. - # See @actions/glob for supported patterns. - path: junit.xml - - # (Optional) Add a summary of the results at the top of the report - summary: true - - # (Optional) Select which results should be included in the report. - # Follows the same syntax as `pytest -r` - display-options: fEX - - # (Optional) Fail the workflow if no JUnit XML was found. - fail-on-empty: true - - # (Optional) Title of the test results section in the workflow summary - title: Unit Test results + hatch run make structure-test diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 79c1343f..f4ab1235 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -7,71 +7,19 @@ on: required: true description: "Version bump type" options: - - patch - - minor - - major + - patch + - minor + - major + +permissions: + id-token: write + checks: write jobs: release: - name: Release - timeout-minutes: 20 - runs-on: ubuntu-latest - environment: - name: pypi - url: https://pypi.org/p/solace_ai_connector - permissions: - id-token: write - contents: write - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - ssh-key: ${{ secrets.COMMIT_KEY }} - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - - name: Install hatch - run: | - pip install --upgrade pip - pip install hatch - - - name: Get Current Version - run: | - CURRENT_VERSION=$(hatch version) - echo "CURRENT_VERSION=${CURRENT_VERSION}" >> $GITHUB_ENV - - - name: Fail if the current version doesn't exist - if: env.CURRENT_VERSION == '' - run: exit 1 - - - name: Build project for distribution - run: hatch build - - - name: Publish package distributions to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 - - - name: Create Release - uses: ncipollo/release-action@v1 - with: - artifacts: "dist/*.whl" - makeLatest: true - generateReleaseNotes: true - tag: ${{ env.CURRENT_VERSION }} - - - name: Bump Version - run: | - hatch version "${{ github.event.inputs.version }}" - NEW_VERSION=$(hatch version) - echo "NEW_VERSION=${NEW_VERSION}" >> $GITHUB_ENV - - - name: Commit new version - run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - git commit -a -m "[ci skip] Bump version to $NEW_VERSION" - git push + uses: SolaceDev/solace-public-workflows/.github/workflows/hatch_release_pypi.yml@v1.0.0 + with: + version: ${{ github.event.inputs.version }} + pypi-project: solace-ai-connector + secrets: + COMMIT_KEY: ${{ secrets.COMMIT_KEY }} diff --git a/pyproject.toml b/pyproject.toml index e3154b17..7c1f63a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,22 +42,6 @@ packages = ["src/solace_ai_connector"] [tool.hatch.version] path = "src/solace_ai_connector/__init__.py" -[tool.hatch.envs.test] -dependencies = [ - "pytest>=8.2.2", - "coverage>=7.5.4", - "twine>=5.1.1", -] - -[tool.hatch.envs.lint] -detached = true -dependencies = [ - "ruff>=0.5.0", -] - [tool.ruff] lint.select = ["E4", "E7", "E9", "F"] lint.ignore = ["F401", "E731"] - -[[tool.hatch.envs.test.matrix]] -python = ["38", "312"]