Support linking PRs with tickets through commit messages #174
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: main | |
on: | |
push: { branches: [main] } | |
pull_request: { branches: [main] } | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: { python-version: "3.11", cache: pip } | |
- run: pip install .[test] | |
- name: "lint: isort" | |
run: make isort | |
- name: "lint: black" | |
run: make black | |
- name: "lint: flake8" | |
run: make flake8 | |
- name: "lint: pylint" | |
run: make pylint | |
- name: "lint: mypy" | |
run: make mypy | |
push_to_dockerhub: | |
runs-on: ubuntu-latest | |
env: | |
CLICKHOUSE_VERSIONS: "21.8.15.7, 22.3.20.29, 22.8.19.10, 23.3.4.17, 23.4.4.16, 23.5.3.24, latest" | |
if: ${{ github.event_name == 'push' }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: login to dockerhub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: build and push base images | |
uses: docker/bake-action@v3 | |
with: | |
files: tests/bake.hcl | |
push: true | |
build: | |
needs: lint | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- {python: "3.6.15", ubuntu: "20.04"} | |
- {python: "3.10.12", ubuntu: "latest"} | |
# a copy-paste of the above as github CI can't use env context in matrices | |
clickhouse: | |
- "21.8.15.7" | |
- "22.3.20.29" | |
- "22.8.19.10" | |
- "23.3.4.17" | |
- "23.4.4.16" | |
- "23.5.3.24" | |
- "latest" | |
runs-on: ubuntu-${{ matrix.target.ubuntu }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: set up python ${{ matrix.target.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.target.python }} | |
cache: pip | |
- name: install dependencies | |
# language=sh | |
run: | | |
pip install '.[test]' | |
- name: build project | |
# language=sh | |
run: | | |
make prepare-version | |
flit build --no-use-vcs | |
- name: upload wheel | |
uses: actions/upload-artifact@v3 | |
if: ${{ matrix.clickhouse == 'latest' }} | |
with: | |
name: ch_tools_py${{ matrix.target.python }}.whl | |
path: dist/*.whl | |
if-no-files-found: error | |
- name: upload sdist | |
uses: actions/upload-artifact@v3 | |
if: ${{ matrix.clickhouse == 'latest' }} | |
with: | |
name: ch_tools_py${{ matrix.target.python }}.tar.gz | |
path: dist/*.tar.gz | |
if-no-files-found: error | |
- {name: run unit tests, run: pytest} | |
- name: prepare integration tests | |
# language=sh | |
run: | | |
cd tests | |
CLICKHOUSE_VERSION=${{ matrix.clickhouse }} python3 -m env_control create | |
cd .. | |
- name: run integration tests | |
# language=sh | |
run: | | |
cd tests | |
behave --show-timings --junit -D skip_setup | |
cd .. | |
- name: publish test report | |
uses: mikepenz/action-junit-report@v3 | |
if: always() | |
with: | |
report_paths: 'tests/reports/*.xml' | |
- name: prepare build deb | |
if: ${{ matrix.clickhouse == 'latest' }} | |
run: sudo apt install python3-venv debhelper devscripts | |
- name: build deb | |
if: ${{ matrix.clickhouse == 'latest' }} | |
# language=sh | |
run: | | |
# deb building implicitly cleans dist/ | |
cp dist/*.tar.gz ch_tools.tar.gz | |
cp dist/*.whl ch_tools.whl | |
echo "force-unsafe-io" | sudo tee /etc/dpkg/dpkg.cfg.d/force-unsafe-io | |
sudo make build-deb-package | |
- name: test deb | |
if: ${{ matrix.clickhouse == 'latest' }} | |
# language=sh | |
run: | | |
sudo make uninstall | |
sudo apt-get install -q -y ./out/ch-tools*.deb | |
sudo chadmin --help | |
sudo ch-monitoring --no-user-check --help | |
sudo keeper-monitoring --help | |
sudo ch-s3-credentials --help | |
- name: upload deb package artifact | |
uses: actions/upload-artifact@v3 | |
if: ${{ matrix.clickhouse == 'latest' }} | |
with: | |
name: ch-tools_py-${{ matrix.target.python }}_ubuntu-${{ matrix.target.ubuntu }}.deb | |
path: out/ch-tools*.deb | |
if-no-files-found: error | |
- name: create a release | |
uses: softprops/action-gh-release@v1 | |
if: ${{ matrix.clickhouse == 'latest' && matrix.target.ubuntu == 'latest' && startsWith(github.ref, 'refs/tags/') }} | |
with: | |
generate_release_notes: true | |
fail_on_unmatched_files: true | |
files: | | |
*.whl | |
*.tar.gz | |
out/ch-tools*.deb | |
- name: publish to pypi | |
if: ${{ matrix.clickhouse == 'latest' && matrix.target.ubuntu == 'latest' && startsWith(github.ref, 'refs/tags/') }} | |
run: flit publish --no-use-vcs | |
env: | |
FLIT_USERNAME: "__token__" | |
FLIT_PASSWORD: "${{ secrets.PYPI_TOKEN }}" |