name: GRU Pipeline on: push: branches: - main tags: - '*' schedule: - cron: "0 7 * * *" # 14 - 7 = 7 jobs: scraping_extracting: name: Scraping and Extracting runs-on: ubuntu-latest environment: Scraping and Extraction 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 schedulers/gru_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 go run scraper.go \ --symbols-file=./postman/symbols_test.json - name: Zip Datasets if: env.match != 'true' run: zip -r datasets.zip datasets - name: Store Datasets to Google Drive if: env.match != 'true' uses: adityak74/google-drive-upload-git-action@main with: credentials: ${{ secrets.GDRIVE_GRU_CRED }} filename: datasets.zip folderId: ${{ secrets.GDRIVE_GRU_ID }} name: datasets.zip overwrite: "true" - name: Upload Artifact (datasets) if: env.match != 'true' uses: actions/upload-artifact@v3 with: name: datasets path: datasets.zip - name: Remove Temporarary Files and Directories if: env.match != 'true' run: | rm datasets.zip rm -rf datasets preprocessing_training: name: Preprocessing and Training runs-on: ubuntu-latest needs: scraping_extracting environment: Preprocessing and Training 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 schedulers/gru_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: Install Libraries if: env.match != 'true' run: pip install -r requirements.txt - name: Download Artifact (datasets) if: env.match != 'true' uses: actions/download-artifact@v3 with: name: datasets - name: Modeling and Training if: env.match != 'true' run: | unzip datasets.zip mkdir models mkdir pickles mkdir posttrained python training.py \ --epochs=200 \ --batchs=32 \ --sequences=5 \ --algorithm=GRU - name: Set Pipeline Schedule if: env.match != 'true' run: echo "$(date +'%Y-%m-%d')" > schedulers/gru_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 posttrained.zip posttrained - name: Store Models to Google Drive if: env.match != 'true' uses: adityak74/google-drive-upload-git-action@main with: credentials: ${{ secrets.GDRIVE_GRU_CRED }} filename: models.zip folderId: ${{ secrets.GDRIVE_GRU_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_GRU_CRED }} filename: pickles.zip folderId: ${{ secrets.GDRIVE_GRU_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_GRU_CRED }} filename: posttrained.zip folderId: ${{ secrets.GDRIVE_GRU_ID }} name: posttrained.zip overwrite: "true" - name: Remove Temporarary Files and Directories if: env.match != 'true' run: | rm models.zip rm pickles.zip rm posttrained.zip rm -rf models rm -rf pickles 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 tebakaja_crypto_space-0: name: crypto-forecast-svc-0 runs-on: ubuntu-latest needs: preprocessing_training environment: Deployment env: HF_TOKEN: ${{ secrets.HF_TOKEN }} SPACE_NAME: tebakaja_cryptocurrency_space-0 HF_USERNAME: tebakaja 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 tebakaja_crypto_space-1: name: crypto-forecast-svc-1 runs-on: ubuntu-latest needs: preprocessing_training environment: Deployment env: HF_TOKEN: ${{ secrets.HF_TOKEN }} SPACE_NAME: tebakaja_cryptocurrency_space-1 HF_USERNAME: tebakaja 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 tebakaja_crypto_space-2: name: crypto-forecast-svc-2 runs-on: ubuntu-latest needs: preprocessing_training environment: Deployment env: HF_TOKEN: ${{ secrets.HF_TOKEN }} SPACE_NAME: tebakaja_cryptocurrency_space-2 HF_USERNAME: tebakaja 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 tebakaja_crypto_space-3: name: crypto-forecast-svc-3 runs-on: ubuntu-latest needs: preprocessing_training environment: Deployment env: HF_TOKEN: ${{ secrets.HF_TOKEN }} SPACE_NAME: tebakaja_cryptocurrency_space-3 HF_USERNAME: tebakaja 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 tebakaja_crypto_space-4: name: crypto-forecast-svc-4 runs-on: ubuntu-latest needs: preprocessing_training environment: Deployment env: HF_TOKEN: ${{ secrets.HF_TOKEN }} SPACE_NAME: tebakaja_cryptocurrency_space-4 HF_USERNAME: tebakaja 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 functional_testing: name: Functional Testing runs-on: ubuntu-latest needs: - tebakaja_crypto_space-0 - tebakaja_crypto_space-1 - tebakaja_crypto_space-2 - tebakaja_crypto_space-3 - tebakaja_crypto_space-4 steps: - name: Set global directory run: git config --global --add safe.directory /github/workspace - uses: actions/checkout@v3 with: persist-credentials: false fetch-depth: 1 - name: Testing Proxy Endpoints run: | sleep 60 chmod +x endpoints_test.sh && ./endpoints_test.sh