Skip to content

Merge pull request #10 from ahmed-n-abdeltwab/feature/make-modular #11

Merge pull request #10 from ahmed-n-abdeltwab/feature/make-modular

Merge pull request #10 from ahmed-n-abdeltwab/feature/make-modular #11

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@v4
- 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: Install jq
run: sudo apt-get install -y jq
- name: Build Docker image
run: |
docker build -t $DOCKER_IMAGE .
docker images
- name: Prepare release directory
run: |
mkdir -p ./$RELEASE_DIR/latest
chmod -R 777 ./$RELEASE_DIR
- name: Run training pipeline
run: |
docker run --rm \
-v $(pwd)/data:/app/data \
-v $(pwd)/models:/app/models \
-v $(pwd)/$RELEASE_DIR:/app/release \
-e PYTHONPATH=/app \
-u 1001 \
$DOCKER_IMAGE
- name: Verify artifacts
run: |
echo "Generated artifacts:"
ls -lR ./$RELEASE_DIR
if [ ! -f ./$RELEASE_DIR/latest/model.pkl ]; then
echo "Error: model.pkl not found!"
docker logs $(docker ps -lq) || true
exit 1
fi
- name: Create release package
run: |
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
RELEASE_NAME="model_$TIMESTAMP"
tar -czvf ./$RELEASE_DIR/$RELEASE_NAME.tar.gz -C ./$RELEASE_DIR/latest .
- name: Upload artifact
uses: actions/upload-artifact@v4
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)
files: ./$RELEASE_DIR/*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}