Skip to content

Commit

Permalink
Add CI and release workflows
Browse files Browse the repository at this point in the history
  • Loading branch information
artyom-morozov committed Jul 10, 2024
1 parent 7bc3590 commit 22756a1
Show file tree
Hide file tree
Showing 5 changed files with 249 additions and 2 deletions.
10 changes: 10 additions & 0 deletions .env_template
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
SOLACE_BROKER_URL="tcps://your_service.messaging.solace.cloud:55443"
SOLACE_BROKER_USERNAME=
SOLACE_BROKER_PASSWORD=
SOLACE_BROKER_VPN=
SOLACE_BROKER_TRUST_STORE_PATH="/usr/share/ca-certificates/mozilla"

AZURE_OPENAI_API_KEY=<api_key>
AZURE_OPENAI_API_ENDPOINT=<api_endpoint>
AZURE_OPENAI_API_VERSION=<api_version>
AZURE_OPENAI_MODEL_DEPLOYMENT=<model_deployment_id>
135 changes: 135 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
name: CI
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize]

permissions:
id-token: write
checks: write
pull-requests: write
contents: write

jobs:
test:
runs-on: ubuntu-latest
env:
HATCH_CACHE_DIR: ${{ github.workspace }}/.hatch_cache
HATCH_DATA_DIR: ${{ github.workspace }}/.hatch_data

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- 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') }}

- 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') }}

- name: Run Lint
continue-on-error: true
run: |
hatch run lint:ruff check -o lint.json --output-format json
shell: bash

- name: Run Unit Tests
continue-on-error: true
shell: bash
run: |
hatch test --cover --all --parallel --junitxml=junit.xml
- name: Combine Coverage Reports
continue-on-error: true
run: |
hatch run +py=3.12 test:coverage combine
shell: bash

- name: Report coverage
continue-on-error: true
run: |
hatch run +py=3.12 test:coverage xml
shell: bash

- name: SonarQube Scan
if: always()
uses: sonarsource/[email protected]
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
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=3.12 test:xargs -n1 twine check
ls dist/*.whl | hatch run +py=3.12 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
76 changes: 76 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Release
on:
workflow_dispatch:
inputs:
version:
type: choice
required: true
description: "Version bump type"
options:
- patch
- minor
- major

jobs:
release:
name: Release
timeout-minutes: 20
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/solace_ai_connector_slack
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 "[email protected]"
git config --local user.name "GitHub Action"
git commit -a -m "[ci skip] Bump version to $NEW_VERSION"
git push
27 changes: 25 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build-backend = "hatchling.build"

[project]
name = "solace_ai_connector_slack"
version = "0.0.1"
dynamic = ["version"]
authors = [
{ name="Edward Funnekotter", email="[email protected]" },
]
Expand All @@ -20,7 +20,7 @@ classifiers = [
dependencies = [
"PyYAML>=6.0.1",
"slack_bolt>=1.18.1",
"solace_ai_connector>=0.0.1",
"solace_ai_connector>=0.1.1",
]

[project.urls]
Expand All @@ -31,3 +31,26 @@ documentation = "https://github.com/SolaceLabs/solace-ai-connector-slack/blob/ma

[tool.hatch.build.targets.wheel]
packages = ["src/solace_ai_connector_slack"]

[tool.hatch.version]
path = "src/solace_ai_connector_slack/components/__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 = ["3.8", "3.12"]
3 changes: 3 additions & 0 deletions src/solace_ai_connector_slack/components/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Internal components that are dynamically loaded by the AI Connector
# Listing them here allows for them to use relative imports
__version__ = "0.0.1"

0 comments on commit 22756a1

Please sign in to comment.