name: Build and test model using a dummy prediction pipeline on: # push: # branches: # - "model-**" pull_request: branches: ["sap-dev", "heat-dev", "carbon-dev"] label: types: ["created", "edited"] permissions: write-all jobs: Check-Label: runs-on: ubuntu-latest steps: - uses: yogevbd/enforce-label-action@2.1.0 with: REQUIRED_LABELS_ANY: "major,minor,patch" REQUIRED_LABELS_ANY_DESCRIPTION: "Select at least one label ['major','minor','patch']" BANNED_LABELS: "banned" # No-Label: # if: ${{ github.event.label.name != 'major' }} || ${{ github.event.label.name != 'minor' }} || ${{ github.event.label.name != 'patch' }} # runs-on: ubuntu-latest # steps: # - name: No label associated with PR # run: | # echo "Please choose one of these tags: 'major', 'major', 'patch'" # exit(1) Verify-Lambda: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install packages to retrieve artifacts env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} run: | pip install --upgrade pip pip install -r modules/ml-pipeline/src/pipeline/requirements/version_control/requirements.txt - name: Retrieve artifacts (dvc.lock) env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} run: | cd modules/ml-pipeline/src/pipeline dvc pull -r experiments - name: Set timestamp id: set_timestamp run: | echo "timestamp=$(date +%Y%m%d)" >> $GITHUB_ENV echo "Generated timestamp: ${timestamp}" - name: Upload sample row dataset to S3 env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} run: | cd modules/ml-pipeline/src/pipeline/data/prepared_data/ aws s3 cp sample_test.parquet s3://retrofit-data-dev/sap_change_model/sample_data_for_cicd/${timestamp}/sample_test.parquet - name: Build Lambda docker Image run: | docker build . --file ./deployment/Dockerfile.prediction.lambda --tag lambda_test - name: Run lambda docker container env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} run: | docker run -d -p 9000:8080 \ -e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \ -e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \ -e RUNTIME_ENVIRONMENT=dev \ -e PREDICTIONS_BUCKET=retrofit-sap-predictions-dev lambda_test - name: Test Lambda endpoint run: | sleep 2 curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \ -H "Content-Type: application/json" \ -d "{\"body\": \"{\\\"file_location\\\": \\\"s3://retrofit-data-dev/sap_change_model/sample_data_for_cicd/${timestamp}/sample_test.parquet\\\", \\\"property_id\\\": 1, \\\"portfolio_id\\\": 4, \\\"created_at\\\": \\\"now\\\", \\\"warm\\\": true}\"}" - name: Get Lambda logs run: | docker logs $(docker ps -al -q) - name: Test Lambda endpoint again run: | sleep 2 curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \ -H "Content-Type: application/json" \ -d "{\"body\": \"{\\\"file_location\\\": \\\"s3://retrofit-data-dev/sap_change_model/sample_data_for_cicd/${timestamp}/sample_test.parquet\\\", \\\"property_id\\\": 1, \\\"portfolio_id\\\": 4, \\\"created_at\\\": \\\"now\\\", \\\"testing\\\": true}\"}" - name: Get Lambda logs run: | docker logs $(docker ps -al -q) - name: Stop Lambda container run: | docker stop lambda_test || echo "Container already stopped" - name: Remove uploaded sample row dataset from S3 if: always() env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} run: | aws s3 rm --recursive s3://retrofit-data-dev/sap_change_model/sample_data_for_cicd/${timestamp}/ Verify-Model: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install packages to retrieve artifacts env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} run: | pip install --upgrade pip pip install -r modules/ml-pipeline/src/pipeline/requirements/version_control/requirements.txt - name: Retrieve artifacts (dvc.lock) env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} run: | cd modules/ml-pipeline/src/pipeline dvc pull -r experiments - name: Build Prediction docker Image run: | cd modules/ml-pipeline/src/ docker build . --file Prediction.Dockerfile --tag prediction_test - name: Run Prediction docker container run: | docker run prediction_test Trigger-CML: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install packages to retrieve artifacts run: | pip install --upgrade pip pip install -r modules/ml-pipeline/src/pipeline/requirements/version_control/requirements.txt - name: Retrieve artifacts (dvc.lock) env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} run: | cd modules/ml-pipeline/src/pipeline dvc pull -r experiments - uses: actions/setup-python@v4 - uses: iterative/setup-cml@v1 - name: Generate report env: AWS_ACCESS_KEY_ID: ${{ secrets.ROBOT_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.ROBOT_AWS_SECRET_ACCESS_KEY }} REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} TARGET_BRANCH: ${{ github.base_ref }} run: | cd modules/ml-pipeline/src/pipeline echo "## Model metrics" > report.md # Compare metrics to master git fetch --depth=1 origin ${TARGET_BRANCH}:${TARGET_BRANCH} dvc metrics diff --md --all ${TARGET_BRANCH} >> report.md echo "## Scenario comparison" >> report.md cat metrics/scenario_table.md >> report.md echo "" >> report.md echo "## Scenario metrics" >> report.md cat metrics/scenario_metrics.md >> report.md cml comment create report.md # echo "## Residuals plot from model" >> report.md # metrics_location=$(find . -maxdepth 10 -name "residuals.png") # echo $metrics_location # cd $metric_location # echo "![](./residuals.png)" >> report.md