name: ci on: push: branches: ["**"] tags: ["*"] pull_request: concurrency: group: ${{ gitea.workflow }} cancel-in-progress: false 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" - 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 - 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 build-and-deploy: needs: [test] if: startsWith(gitea.ref, 'refs/tags/') runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.11" - name: Install Poetry run: | python -m pip install --upgrade pip pip install poetry - name: Write commit hash to build file run: | mkdir -p build_meta echo "${{ gitea.sha }}" | cut -c1-8 > build_meta/commit.txt - name: Build package with commit info run: | echo "commit = '$(echo ${{ gitea.sha }} | cut -c1-8)'" > vrobbler/_commit.py poetry build git checkout vrobbler/_commit.py - name: Clean old wheels from server uses: appleboy/ssh-action@v1.0.3 with: host: vrobbler.service username: root key: ${{ secrets.JAIL_KEY }} script: | rm -f /var/lib/vrobbler/dist/*.whl - name: Copy wheel to server and deploy uses: appleboy/scp-action@v1.0.0 with: host: vrobbler.service username: root key: ${{ secrets.JAIL_KEY }} source: "dist/*.whl" target: "/var/lib/vrobbler" - name: Install wheel and restart services uses: appleboy/ssh-action@v1.0.3 with: host: vrobbler.service username: root key: ${{ secrets.JAIL_KEY }} command_timeout: 2m script: | set -e mkdir -p /var/lib/vrobbler echo "${{ gitea.sha }}" | cut -c1-8 > /var/lib/vrobbler/commit.txt pip uninstall -y vrobbler pip install /var/lib/vrobbler/dist/*.whl rm -f /var/lib/vrobbler/dist/*.whl python3 -c "import vrobbler; print(f'vrobbler {vrobbler.__version__} installed OK')" vrobbler migrate vrobbler collectstatic --noinput immortalctl restart vrobbler-celery && immortalctl restart vrobbler-celerybeat && 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