Skip to content
This repository has been archived by the owner on Jun 14, 2024. It is now read-only.

feat: add GitHub workflows #9

feat: add GitHub workflows

feat: add GitHub workflows #9

Workflow file for this run

name: Build package
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
on:
workflow_dispatch:
release:
types:
- "published"
push:
branches:
- "main"
- "develop"
- "releases/**"
tags:
- "*"
pull_request:
branches:
- "main"
- "develop"
- "releases/**"
- "feature/**"
- "feat/**"
- "fix/**"
# TODO: Delete this after we check that everything is working as expected.
- "project-creation-with-pdm"
types:
- opened
- reopened
- synchronize
- ready_for_review
jobs:
check_repo_files:
name: Check source changes
if: ${{ !github.event.pull_request.draft }}
uses: ./.github/workflows/check-repo-files.yml
deployable_check:
name: Check if must build & deploy from environment
runs-on: ubuntu-latest
needs: check_repo_files
env:
IS_DEPLOYABLE: ${{ secrets.AR_DOCKER_USERNAME != '' && needs.check_repo_files.outputs.buildChanges == 'true' }}
outputs:
isDeployable: ${{ steps.set_output.outputs.is_deployable }}
steps:
- name: set output
id: set_output
run: |
echo "is_deployable=$IS_DEPLOYABLE" >> $GITHUB_OUTPUT
run_unit_tests:
strategy:
matrix:
include:
- searchEngineDockerImage: docker.elastic.co/elasticsearch/elasticsearch:8.8.2
searchEngineDockerEnv: '{"discovery.type": "single-node", "xpack.security.enabled": "false"}'
coverageReport: coverage-elasticsearch-8.8.2
runsOn: ubuntu-latest
- searchEngineDockerImage: opensearchproject/opensearch:2.4.1
searchEngineDockerEnv: '{"discovery.type": "single-node", "plugins.security.disabled": "true"}'
coverageReport: coverage-opensearch-2.4.1
runsOn: ubuntu-latest
name: Run unit tests
uses: ./.github/workflows/run-python-tests.yml
# needs: check_repo_files
# if: needs.check_repo_files.outputs.pythonChanges == 'true'
with:
searchEngineDockerImage: ${{ matrix.searchEngineDockerImage }}
searchEngineDockerEnv: ${{ matrix.searchEngineDockerEnv }}
coverageReport: coverage
runsOn: ${{ matrix.runsOn }}
pytestArgs: tests/unit
secrets: inherit
run_end2end_tests:
strategy:
matrix:
include:
- searchEngineDockerImage: docker.elastic.co/elasticsearch/elasticsearch:8.8.2
searchEngineDockerEnv: '{"discovery.type": "single-node", "xpack.security.enabled": "false"}'
coverageReport: coverage-elasticsearch-8.8.2
runsOn: extended-runner
name: Run end2end tests
uses: ./.github/workflows/end2end-examples.yml
needs: check_repo_files
if: needs.check_repo_files.outputs.end2endChanges == 'true'
with:
runsOn: ${{ matrix.runsOn }}
searchEngineDockerImage: ${{ matrix.searchEngineDockerImage }}
searchEngineDockerEnv: ${{ matrix.searchEngineDockerEnv }}
secrets: inherit
run_unit_test_with_extra_engines:
strategy:
matrix:
include:
- searchEngineDockerImage: docker.elastic.co/elasticsearch/elasticsearch:8.8.0
searchEngineDockerEnv: '{"discovery.type": "single-node", "xpack.security.enabled": "false"}'
coverageReport: coverage-elasticsearch-8.8.0
runsOn: extended-runner
- searchEngineDockerImage: docker.elastic.co/elasticsearch/elasticsearch:8.6.0
searchEngineDockerEnv: '{"discovery.type": "single-node", "xpack.security.enabled": "false"}'
coverageReport: coverage-elasticsearch-8.6.0
runsOn: extended-runner
- searchEngineDockerImage: opensearchproject/opensearch:2.8.0
searchEngineDockerEnv: '{"discovery.type": "single-node", "plugins.security.disabled": "true"}'
coverageReport: coverage-opensearch-2.8.0
runsOn: extended-runner
name: Run unit tests with extra engines
uses: ./.github/workflows/run-python-tests.yml
needs: check_repo_files
if: |
needs.check_repo_files.outputs.pythonChanges == 'true' &&
startsWith(github.event.ref, 'refs/tags/v')
with:
searchEngineDockerImage: ${{ matrix.searchEngineDockerImage }}
searchEngineDockerEnv: ${{ matrix.searchEngineDockerEnv }}
coverageReport: coverage
runsOn: ${{ matrix.runsOn }}
pytestArgs: tests/unit
secrets: inherit
run_integration_tests:
name: Run integration tests
uses: ./.github/workflows/run-python-tests.yml
needs:
- check_repo_files
- run_unit_tests
if: needs.check_repo_files.outputs.pythonChanges == 'true'
with:
runsOn: extended-runner
coverageReport: coverage-extra
pytestArgs: tests/integration
secrets: inherit
push_coverage:
name: Upload code coverage
runs-on: ubuntu-latest
needs:
- run_unit_tests
- run_integration_tests
steps:
- name: Checkout Code 🛎
uses: actions/checkout@v3
- uses: actions/download-artifact@v3
- name: Copy all reports
run: find coverage-report*/ -name "*.xml" -exec mv '{}' . \;
- name: Display current files structure
run: ls -R
- name: Upload Coverage reports to Codecov 📦
uses: codecov/codecov-action@v2
build_python_package:
name: Build Argilla python package
uses: ./.github/workflows/build-python-package.yml
needs: deployable_check
if: needs.deployable_check.outputs.isDeployable == 'true'
secrets: inherit
build_server_docker_image:
name: Build Argilla server docker image
uses: ./.github/workflows/build-push-docker.yml
needs:
- build_python_package
- run_unit_tests
if: |
!cancelled() &&
needs.build_python_package.result == 'success' &&
!contains(needs.*.result, 'failure') &&
!contains(needs.*.result, 'cancelled')
with:
download-python-package: true
image-name: argilla/argilla-server
dockerfile: docker/Dockerfile
readme: README.md
platforms: linux/amd64,linux/arm64
secrets: inherit
build_quickstart_docker_image:
name: Build Argilla quickstart docker image
uses: ./.github/workflows/build-push-docker.yml
needs: build_server_docker_image
if: |
!cancelled() &&
needs.build_server_docker_image.result == 'success'
with:
download-python-package: false
image-name: argilla/argilla-quickstart
dockerfile: docker/quickstart.Dockerfile
readme: docker/quickstart.README.md
platforms: linux/amd64,linux/arm64
build-args: |
ARGILLA_VERSION=${{ needs.build_server_docker_image.outputs.version }}
secrets: inherit
deploy_environment:
name: Deploy branch environment
uses: ./.github/workflows/deploy-environment.yml
needs: build_quickstart_docker_image
if: |
!cancelled() &&
needs.build_quickstart_docker_image.result == 'success' &&
github.event_name == 'pull_request' && github.event.pull_request.draft == false
with:
image-name: argilla/argilla-quickstart
image-version: ${{ needs.build_quickstart_docker_image.outputs.version }}
secrets: inherit
# This job will upload a Python Package using Twine when a release is created
# For more information see:
# https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
publish_release:
name: Publish Release
runs-on: ubuntu-latest
if: ${{ github.event_name == 'release' }}
needs:
- run_integration_tests
- build_quickstart_docker_image
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout Code 🛎
uses: actions/checkout@v3
- name: Download python package
uses: actions/download-artifact@v2
with:
name: python-package
path: dist
- name: Publish Package to TestPyPI 🥪
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.AR_TEST_PYPI_API_TOKEN }}
repository_url: https://test.pypi.org/legacy/
- name: Test Installing 🍿
run: pip install --index-url https://test.pypi.org/simple --no-deps argilla==${GITHUB_REF#refs/*/v}
- name: Publish Package to PyPI 🥩
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.AR_PYPI_API_TOKEN }}