Chore: following suggestions from repo-review #2913
Workflow file for this run
This file contains hidden or 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: Basic Tests | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| shellcheck: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - uses: prefix-dev/[email protected] | |
| with: | |
| run-install: false | |
| post-cleanup: false | |
| - uses: prefix-dev/[email protected] | |
| with: | |
| cache: false | |
| environments: shellcheck | |
| - name: Run shellcheck | |
| run: pixi run shellcheck | |
| unittest: | |
| name: Unit test - ${{ matrix.package }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| package: | |
| - diracx-core | |
| - diracx-db | |
| - diracx-logic | |
| - diracx-routers | |
| - diracx-client | |
| - diracx-api | |
| - diracx-cli | |
| - gubbins-core | |
| - gubbins-db | |
| - gubbins-logic | |
| - gubbins-routers | |
| - gubbins-client | |
| - gubbins-api | |
| - gubbins-cli | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - uses: prefix-dev/[email protected] | |
| with: | |
| run-install: false | |
| post-cleanup: false | |
| - name: Apply workarounds | |
| run: | | |
| # Workaround for https://github.com/prefix-dev/pixi/issues/3762 | |
| sed -i.bak 's@editable = true@editable = false@g' pixi.toml | |
| rm pixi.toml.bak | |
| # Show any changes | |
| git diff | |
| - uses: prefix-dev/[email protected] | |
| with: | |
| cache: false | |
| environments: ${{ matrix.package }} | |
| - name: Run pytest | |
| run: pixi run pytest-${{ matrix.package }} --cov-report=xml:coverage.xml --junitxml=report.xml | |
| - name: Upload coverage report | |
| uses: codecov/[email protected] | |
| pytest-integration: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| extension: | |
| - diracx | |
| - gubbins | |
| steps: | |
| - name: Free disk space | |
| run: | | |
| echo "Before cleanup:" | |
| df -h | |
| # remove .NET SDKs | |
| sudo rm -rf /usr/share/dotnet || true | |
| # remove Android SDK | |
| sudo rm -rf usr/local/lib/android || true | |
| # remove Haskell Compiler | |
| sudo rm -rf /opt/ghc || true | |
| sudo rm -rf /usr/local/.ghcup || true | |
| sudo apt-get clean || echo "::warning::The command [sudo apt-get clean] failed to complete successfully. Proceeding..." | |
| # prune docker | |
| docker system prune -af || true | |
| echo "After cleanup:" | |
| df -h | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - uses: prefix-dev/[email protected] | |
| with: | |
| run-install: false | |
| post-cleanup: false | |
| - name: Apply workarounds | |
| run: | | |
| # Workaround for https://github.com/prefix-dev/pixi/issues/3762 | |
| sed -i.bak 's@editable = true@editable = false@g' pixi.toml | |
| rm pixi.toml.bak | |
| # Show any changes | |
| git diff | |
| - uses: prefix-dev/[email protected] | |
| with: | |
| cache: false | |
| environments: ${{ matrix.extension == 'diracx' && 'default' || 'default-gubbins' }} | |
| - name: Build gubbins wheels | |
| if: ${{ matrix.extension == 'gubbins' }} | |
| run: | | |
| for pkg_dir in $PWD/diracx-*; do | |
| echo "Building $pkg_dir" | |
| pixi exec python-build --outdir $PWD/extensions/containers/services/ $pkg_dir | |
| done | |
| # Also build the diracx metapackage | |
| pixi exec python-build --outdir $PWD/extensions/containers/services/ . | |
| # And build the gubbins package | |
| for pkg_dir in $PWD/extensions/gubbins/gubbins-*; do | |
| # Skip the testing package | |
| if [[ "${pkg_dir}" =~ .*testing.* ]]; | |
| then | |
| echo "Do not build ${pkg_dir}"; | |
| continue; | |
| fi | |
| echo "Building $pkg_dir" | |
| pixi exec python-build --outdir $PWD/extensions/containers/services/ $pkg_dir | |
| done | |
| - name: Set up Docker Buildx | |
| if: ${{ matrix.extension == 'gubbins' }} | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build container for gubbins | |
| if: ${{ matrix.extension == 'gubbins' }} | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: extensions/containers/services | |
| tags: gubbins/services:dev | |
| outputs: type=docker,dest=/tmp/gubbins_services_image.tar | |
| build-args: | | |
| EXTENSION_CUSTOM_SOURCES_TO_INSTALL=/bindmount/gubbins_db*.whl,/bindmount/gubbins_logic*.whl,/bindmount/gubbins_routers*.whl,/bindmount/gubbins_client*.whl | |
| - name: Load image | |
| if: ${{ matrix.extension == 'gubbins' }} | |
| run: | | |
| docker load --input /tmp/gubbins_services_image.tar | |
| # Free up disk space by removing the tarball after loading the image | |
| rm -Rf /tmp/gubbins_services_image.tar | |
| docker builder prune -af || true | |
| docker image ls -a | |
| - name: Start demo | |
| run: | | |
| git clone https://github.com/DIRACGrid/diracx-charts.git ../diracx-charts | |
| declare -a demo_args=() | |
| demo_args+=("--enable-open-telemetry") | |
| demo_args+=("--enable-coverage") | |
| demo_args+=("--exit-when-done") | |
| demo_args+=("--ci-values" "../diracx-charts/demo/ci_values.yaml") | |
| declare -a demo_source_dirs=("$PWD") | |
| # Download helm/kubectl/kind first | |
| ../diracx-charts/run_demo.sh --only-download-deps | |
| if [ ${{ matrix.extension }} == 'gubbins' ]; then | |
| demo_args+=("--set-value" "diracx.developer.autoReload=false") | |
| # We have to copy the code to another directory | |
| # and make it a git repository by itself because otherwise the | |
| # root in the pyproject do not make sense once mounted | |
| # in the containers. | |
| cp -r ./extensions/gubbins /tmp/ | |
| sed -i 's@../..@.@g' /tmp/gubbins/pyproject.toml | |
| sed -i 's@../../@@g' /tmp/gubbins/gubbins-*/pyproject.toml | |
| git init /tmp/gubbins/ | |
| # Copy gubbins-charts to a temporary location and build dependencies | |
| cp -r ./extensions/gubbins-charts /tmp/ | |
| ../diracx-charts/.demo/helm dependency build /tmp/gubbins-charts | |
| demo_args+=("--extension-chart-path" "/tmp/gubbins-charts") | |
| demo_args+=("--ci-values" "./extensions/gubbins_values.yaml") | |
| demo_args+=("--load-docker-image" "gubbins/services:dev") | |
| demo_source_dirs+=("/tmp/gubbins/") | |
| elif [ ${{ matrix.extension }} != 'diracx' ]; then | |
| echo "Unknown extension: ${{ matrix.extension }}" | |
| exit 1 | |
| else | |
| demo_args+=("--set-value" "developer.autoReload=false") | |
| fi | |
| # Run the demo with the provided arguments | |
| set -x | |
| ../diracx-charts/run_demo.sh "${demo_args[@]}" "${demo_source_dirs[@]}" | |
| - name: Debugging information | |
| run: | | |
| DIRACX_DEMO_DIR=$PWD/../diracx-charts/.demo | |
| export KUBECONFIG=${DIRACX_DEMO_DIR}/kube.conf | |
| export PATH=${DIRACX_DEMO_DIR}:$PATH | |
| kubectl get pods | |
| for pod_name in $(kubectl get pods -o json | jq -r '.items[] | .metadata.name' | grep -vE '(dex|minio|mysql|rabbitmq|opensearch)'); do | |
| echo "${pod_name}" | |
| kubectl describe pod/"${pod_name}" || true | |
| for container_name in $(kubectl get pods $pod_name -o jsonpath='{.spec.initContainers[*].name} {.spec.containers[*].name}'); do | |
| echo $pod_name $container_name | |
| kubectl logs "${pod_name}" -c "${container_name}" || true | |
| done | |
| done | |
| if [ ! -f "${DIRACX_DEMO_DIR}/.success" ]; then | |
| cat "${DIRACX_DEMO_DIR}/.failed" | |
| exit 1 | |
| fi | |
| - name: Run pytest | |
| run: | | |
| pixi run pytest-${{ matrix.extension }} --demo-dir="$PWD/../diracx-charts/" --cov-report=xml:coverage-pytest.xml --junitxml=report.xml | |
| - name: Collect demo coverage | |
| run: | | |
| pixi run -e ${{ matrix.extension == 'diracx' && 'default' || 'default-gubbins' }} python -m diracx.testing coverage collect-demo --demo-dir=../diracx-charts/.demo | |
| - name: Upload coverage report | |
| uses: codecov/[email protected] | |
| with: | |
| files: ./coverage-pytest.xml,./coverage-demo.xml | |
| client-generation: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| package: [diracx, gubbins] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - uses: prefix-dev/[email protected] | |
| with: | |
| run-install: false | |
| post-cleanup: false | |
| - uses: prefix-dev/[email protected] | |
| with: | |
| cache: false | |
| locked: false | |
| environments: ${{ matrix.package }}-generate-client | |
| - name: Run autorest | |
| run: pixi run -e ${{ matrix.package }}-generate-client generate-client |