Skip to content

Model Training and Release Pipeline #6

Model Training and Release Pipeline

Model Training and Release Pipeline #6

name: Train and Release Model
on:
push:
branches: [ main ]
workflow_dispatch:
env:
DOCKER_IMAGE: spyware-detector
RELEASE_DIR: release
jobs:
train-and-release:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
actions: read
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Build Docker image
run: docker build -t $DOCKER_IMAGE .
- name: Run training pipeline
run: |
mkdir -p ./$RELEASE_DIR
docker run --rm \
-v $(pwd)/data:/app/data \
-v $(pwd)/models:/app/models \
-v $(pwd)/$RELEASE_DIR:/app/$RELEASE_DIR \
$DOCKER_IMAGE
- name: Verify artifacts
run: |
echo "Generated artifacts:"
ls -lR ./$RELEASE_DIR
[ -f ./$RELEASE_DIR/latest/model.pkl ] || exit 1
[ -f ./$RELEASE_DIR/latest/metadata.json ] || exit 1
- name: Create release package
run: |
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
RELEASE_NAME="model_$TIMESTAMP"
mkdir -p ./$RELEASE_DIR/$RELEASE_NAME
cp -r ./$RELEASE_DIR/latest/* ./$RELEASE_DIR/$RELEASE_NAME/
tar -czvf ./$RELEASE_DIR/$RELEASE_NAME.tar.gz -C ./$RELEASE_DIR/$RELEASE_NAME .
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: model-release
path: ./$RELEASE_DIR/*.tar.gz
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v1
with:
name: "Model Release $(date +'%Y-%m-%d')"
body: |
Automated model training results:
- Model: $(jq -r '.model_type' ./$RELEASE_DIR/latest/metadata.json)
- Timestamp: $(jq -r '.timestamp' ./$RELEASE_DIR/latest/metadata.json)
- Metrics:
Accuracy: $(jq -r '.metrics.accuracy' ./$RELEASE_DIR/latest/metrics.json)
F1 Score: $(jq -r '.metrics.f1' ./$RELEASE_DIR/latest/metrics.json)
files: ./$RELEASE_DIR/*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GH_PAT }}