name: pipeline on: push: branches: - main tags: - '*' schedule: - cron: "0 13 * * *" # 20 - 7 = 13 jobs: extraction_train_modeling: name: Data Extraction, Training, and Modeling runs-on: ubuntu-latest steps: - name: Set global directory run: git config --global --add safe.directory /github/workspace - uses: actions/checkout@v3 with: lfs: true persist-credentials: false fetch-depth: 1 - name: Read pipeline schedule date id: read_schedule run: | SCHEDULE_DATE=$(cat pipeline_schedule.ctl) echo "schedule_date=${SCHEDULE_DATE}" >> $GITHUB_ENV - name: Get current date id: get_date run: echo "current_date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV - name: Check if dates match id: date_check run: | if [ "$schedule_date" = "$current_date" ]; then echo "match=true" >> $GITHUB_ENV else echo "match=false" >> $GITHUB_ENV fi - name: Scraping Yahoo Finance if: env.match != 'true' run: | mkdir datasets wget https://github.com/belajarqywok/cryptocurrency_prediction/raw/main/postman/symbols.json \ -O postman/symbols.json go run scraper.go - name: Install Libraries if: env.match != 'true' run: pip install -r requirements.txt - name: Modeling and Training if: env.match != 'true' run: | mkdir models mkdir pickles mkdir posttrained python training.py - name: Set Pipeline Schedule if: env.match != 'true' run: echo "$(date +'%Y-%m-%d')" > pipeline_schedule.ctl - name: Zip Posttrained, Models, and Pickles if: env.match != 'true' run: | zip -r models.zip models zip -r pickles.zip pickles zip -r datasets.zip datasets zip -r posttrained.zip posttrained - name: Store Datasets to Google Drive if: env.match != 'true' uses: adityak74/google-drive-upload-git-action@main with: credentials: ${{ secrets.GDRIVE_CRED }} filename: datasets.zip folderId: ${{ secrets.GDRIVE_ID }} name: datasets.zip overwrite: "true" - name: Store Models to Google Drive if: env.match != 'true' uses: adityak74/google-drive-upload-git-action@main with: credentials: ${{ secrets.GDRIVE_CRED }} filename: models.zip folderId: ${{ secrets.GDRIVE_ID }} name: models.zip overwrite: "true" - name: Store Pickles to Google Drive if: env.match != 'true' uses: adityak74/google-drive-upload-git-action@main with: credentials: ${{ secrets.GDRIVE_CRED }} filename: pickles.zip folderId: ${{ secrets.GDRIVE_ID }} name: pickles.zip overwrite: "true" - name: Store Posttrained to Google Drive if: env.match != 'true' uses: adityak74/google-drive-upload-git-action@main with: credentials: ${{ secrets.GDRIVE_CRED }} filename: posttrained.zip folderId: ${{ secrets.GDRIVE_ID }} name: posttrained.zip overwrite: "true" - name: Remove Temporarary Files and Directories if: env.match != 'true' run: | rm models.zip rm pickles.zip rm datasets.zip rm posttrained.zip rm -rf models rm -rf pickles rm -rf datasets rm -rf posttrained - name: Commit changes if: env.match != 'true' run: | git config --local user.email "belajarqywok@gmail.com" git config --local user.name "belajarqywok" git add -A git commit -m "Data Extraction, Training, and Modeling" - name: Push changes if: env.match != 'true' uses: ad-m/github-push-action@master with: github_token: ${{ secrets.GH_TOKEN }} branch: main model_deployment: name: Model Deployment runs-on: ubuntu-latest needs: extraction_train_modeling environment: Production env: HF_TOKEN: ${{ secrets.HF_TOKEN }} SPACE_NAME: cryptocurrency_prediction HF_USERNAME: qywok steps: - name: Set global directory run: git config --global --add safe.directory /github/workspace - uses: actions/checkout@v3 with: persist-credentials: false fetch-depth: 1000 - name: Check git status run: git status - name: Configure git run: | git config --local user.email "alfariqyraihan@gmail.com" git config --local user.name "qywok" - name: Pull changes from remote run: | git pull https://$HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/$HF_USERNAME/$SPACE_NAME main || \ (git merge --strategy-option theirs) - name: Add and commit changes run: | git add -A git diff-index --quiet HEAD || git commit -m "Model Deployment" - name: Push to Hugging Face run: | git push https://$HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/$HF_USERNAME/$SPACE_NAME main --force