concrete-ml test #173
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: concrete-ml test | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths: | |
- .github/workflows/concrete_ml_test.yml | |
- frontends/concrete-python/** | |
push: | |
branches: | |
- 'main' | |
- 'release/*' | |
env: | |
DOCKER_IMAGE: ghcr.io/zama-ai/concrete-compiler | |
ACTION_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }} | |
SLACK_USERNAME: ${{ secrets.BOT_USERNAME }} | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} | |
concurrency: | |
group: concrete_ml_test_${{ github.ref }} | |
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
jobs: | |
setup-instance: | |
runs-on: ubuntu-latest | |
outputs: | |
runner-name: ${{ steps.start-instance.outputs.label }} | |
steps: | |
- name: Start instance | |
id: start-instance | |
uses: zama-ai/slab-github-runner@98f0788261a7323d5d695a883e20df36591a92b7 # v1.3.0 | |
with: | |
mode: start | |
github-token: ${{ secrets.SLAB_ACTION_TOKEN }} | |
slab-url: ${{ secrets.SLAB_BASE_URL }} | |
job-secret: ${{ secrets.JOB_SECRET }} | |
backend: aws | |
profile: cpu-test | |
build-and-run-tests: | |
strategy: | |
matrix: | |
python-version: ["3.8"] | |
needs: setup-instance | |
runs-on: ${{ needs.setup-instance.outputs.runner-name }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
submodules: recursive | |
- name: Set release version | |
run: echo "__version__ = \"$(date +"%Y.%m.%d")\"" >| frontends/concrete-python/version.txt | |
- name: Expose release version from Python | |
run: cp frontends/concrete-python/version.txt frontends/concrete-python/concrete/fhe/version.py | |
- name: Create build directory | |
run: mkdir build | |
- name: Build wheel | |
uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3 | |
id: build-compiler-bindings | |
with: | |
registry: ghcr.io | |
image: ${{ env.DOCKER_IMAGE }} | |
username: ${{ secrets.GHCR_LOGIN }} | |
password: ${{ secrets.GHCR_PASSWORD }} | |
options: >- | |
-v ${{ github.workspace }}:/concrete | |
-v ${{ github.workspace }}/build:/build | |
shell: bash | |
run: | | |
set -e | |
rm -rf /build/* | |
export PYTHON=${{ format('python{0}', matrix.python-version) }} | |
echo "Using $PYTHON" | |
cd /concrete/frontends/concrete-python | |
make PYTHON=$PYTHON venv | |
source .venv/bin/activate | |
cd /concrete/compilers/concrete-compiler/compiler | |
make BUILD_DIR=/build CCACHE=ON DATAFLOW_EXECUTION_ENABLED=ON Python3_EXECUTABLE=$(which python) python-bindings | |
echo "Debug: ccache statistics (after the build):" | |
ccache -s | |
cd /concrete/frontends/concrete-python | |
export COMPILER_BUILD_DIRECTORY="/build" | |
make whl | |
deactivate | |
- name: ML Tests | |
run: | | |
# Set wheel path and extract filename | |
WHEEL_PATH="frontends/concrete-python/dist" | |
WHEEL_FILENAME=$(ls ${WHEEL_PATH}/*manylinux*.whl | xargs basename) | |
# Copy the generated wheel to the concrete-ml directory | |
mkdir -p concrete-ml/wheels | |
cp ${WHEEL_PATH}/${WHEEL_FILENAME} concrete-ml/wheels/ | |
# Copy the test script | |
mkdir -p concrete-ml/ci/scripts | |
cp ci/scripts/test_cml.sh concrete-ml/ | |
# Make test script executable | |
chmod +x concrete-ml/test_cml.sh | |
# Build the docker image with specific tag | |
cd concrete-ml | |
DOCKER_BUILDKIT=1 docker build \ | |
--pull \ | |
-t concrete-ml-dev:py38 \ | |
-f docker/Dockerfile.dev . | |
# Run the tests | |
docker run --rm \ | |
-v "$(pwd):/src/" \ | |
-w /src/concrete-ml \ | |
concrete-ml-dev:py38 \ | |
/bin/bash -l -i -c "./test_cml.sh --use-wheel \"/src/wheels/${WHEEL_FILENAME}\" --verbose" | |
- name: Slack Notification | |
if: ${{ failure() && github.ref == 'refs/heads/main' }} | |
continue-on-error: true | |
uses: rtCamp/action-slack-notify@c33737706dea87cd7784c687dadc9adf1be59990 | |
env: | |
SLACK_COLOR: ${{ job.status }} | |
SLACK_MESSAGE: "build-and-run-tests finished with status: ${{ job.status }}. (${{ env.ACTION_RUN_URL }})" | |
teardown-instance: | |
if: ${{ always() && needs.setup-instance.result != 'skipped' }} | |
needs: [ setup-instance, build-and-run-tests ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Stop instance | |
id: stop-instance | |
uses: zama-ai/slab-github-runner@98f0788261a7323d5d695a883e20df36591a92b7 # v1.3.0 | |
with: | |
mode: stop | |
github-token: ${{ secrets.SLAB_ACTION_TOKEN }} | |
slab-url: ${{ secrets.SLAB_BASE_URL }} | |
job-secret: ${{ secrets.JOB_SECRET }} | |
label: ${{ needs.setup-instance.outputs.runner-name }} | |
- name: Slack Notification | |
if: ${{ failure() }} | |
continue-on-error: true | |
uses: rtCamp/action-slack-notify@c33737706dea87cd7784c687dadc9adf1be59990 | |
env: | |
SLACK_COLOR: ${{ job.status }} | |
SLACK_MESSAGE: "Instance teardown finished with status: ${{ job.status }}. (${{ env.ACTION_RUN_URL }})" |