name: build & deploy on: push: branches: ["**"] tags: ["*"] pull_request: jobs: test: runs-on: ubuntu-latest env: VROBBLER_DATABASE_URL: sqlite:///test.db VROBBLER_USDA_API_KEY: ${{ vars.VROBBLER_USDA_API_KEY }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.11" # Cache pip + Poetry caches (rough equivalent to your mounted pip_cache) - name: Cache pip/poetry uses: actions/cache@v4 with: path: | ~/.cache/pip ~/.cache/pypoetry key: ${{ runner.os }}-py311-${{ hashFiles('**/poetry.lock') }} restore-keys: | ${{ runner.os }}-py311- - name: Install Poetry run: | python -m pip install --upgrade pip pip install poetry - name: Install deps run: | cp vrobbler.conf.test vrobbler.conf poetry install --with test - name: Pytest with coverage run: | poetry run pytest -n 5 --cov-report term:skip-covered --cov=vrobbler tests # Notifications (success/failure) for the test job - name: Notify success (ntfy) if: success() run: | curl -fsS \ -H "Title: vrobbler CI success" \ -H "Priority: low" \ -H "Tags: success,vrobbler" \ -H "Actions: view, Changes, ${{ gitea.server_url }}/${{ gitea.repository }}/commit/${{ gitea.sha }}; view, Build, ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}" \ -d "✅ Build succeeded: ${{ gitea.repository }} @ ${{ gitea.sha }}" \ https://ntfy.unbl.ink/drone - name: Notify failure (ntfy) if: failure() run: | curl -fsS \ -H "Title: vrobbler CI failure" \ -H "Priority: high" \ -H "Tags: failure,vrobbler" \ -H "Actions: view, Changes, ${{ gitea.server_url }}/${{ gitea.repository }}/commit/${{ gitea.sha }}; view, Build, ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}" \ -d "❌ Build failed: ${{ gitea.repository }} @ ${{ gitea.sha }}" \ https://ntfy.unbl.ink/drone deploy: # Only deploy on tags (equivalent to Drone when: ref: refs/tags/*) # if: startsWith(gitea.ref, 'refs/tags/') needs: [test] runs-on: ubuntu-latest steps: - name: Deploy via SSH uses: appleboy/ssh-action@v1.0.3 with: host: vrobbler.service username: root key: ${{ secrets.JAIL_KEY }} command_timeout: 2m script: | pip uninstall -y vrobbler pip install git+https://code.lab.unbl.ink/secstate/vrobbler.git@main vrobbler migrate vrobbler collectstatic --noinput immortalctl restart celery && immortalctl restart vrobbler - name: Notify deploy success (ntfy) if: success() run: | curl -fsS \ -H "Title: vrobbler deploy success" \ -H "Priority: low" \ -H "Tags: success,vrobbler,deploy" \ -H "Actions: view, View changes, ${{ gitea.server_url }}/${{ gitea.repository }}/commit/${{ gitea.sha }}; view, View build, ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}" \ -d "🚀 Deploy succeeded: ${{ gitea.ref_name }} (${{ gitea.sha }})" \ https://ntfy.unbl.ink/drone - name: Notify deploy failure (ntfy) if: failure() run: | curl -fsS \ -H "Title: vrobbler deploy failure" \ -H "Priority: high" \ -H "Tags: failure,vrobbler,deploy" \ -H "Actions: view, View changes, ${{ gitea.server_url }}/${{ gitea.repository }}/commit/${{ gitea.sha }}; view, View build, ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}" \ -d "💥 Deploy failed: ${{ gitea.ref_name }} (${{ gitea.sha }})" \ https://ntfy.unbl.ink/drone