Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 0 additions & 60 deletions .github/workflows/build.yml

This file was deleted.

93 changes: 82 additions & 11 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,92 @@ on:
push:
branches: [main]
paths:
- 'tmfeed/config.yml'
- 'tmfeed/feedforbot.config.yml'

jobs:
build:
name: 🏗️ Build image
runs-on: ubuntu-latest
if: >-
github.event_name == 'release'
&& !contains(github.event.release.tag_name, 'rc')
env:
REGISTRY_HOST: ghcr.io
steps:
- name: 📥 Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: 🏷️ Extract version
shell: bash
run: |
echo "name=$(echo ${GITHUB_REPOSITORY#*/})" >> "$GITHUB_OUTPUT"
echo "ver=$(echo ${GITHUB_REF#refs/*/})" >> "$GITHUB_OUTPUT"
echo "minor_ver=$(TMP_VAR=${GITHUB_REF#refs/*/}; echo ${TMP_VAR%.*})" >> "$GITHUB_OUTPUT"
echo "major_ver=$(TMP_VAR=${GITHUB_REF#refs/*/}; echo ${TMP_VAR%.*.*})" >> "$GITHUB_OUTPUT"
id: extract_name_and_version
- name: 🧰 Set up QEMU
uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4
- name: 🧰 Set up Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4
- name: 🔐 Login to Docker Hub
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_PASS }}
- name: 🔐 Login to GHCR
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
with:
registry: ${{ env.REGISTRY_HOST }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: ✏️ Patch version in pyproject.toml
run: sed -i 's/0.1.0/'"${{ steps.extract_name_and_version.outputs.ver }}"'/' pyproject.toml
- name: ✏️ Patch version in __version__.py
run: sed -i 's/0.1.0/'"${{ steps.extract_name_and_version.outputs.ver }}"'/' feedforbot/__version__.py
- name: 🐳 Build and push image
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7
with:
context: .
file: ./Dockerfile
push: true
tags: |
"${{ env.REGISTRY_HOST }}/${{ github.repository }}:latest"
"${{ env.REGISTRY_HOST }}/${{ github.repository }}:${{ steps.extract_name_and_version.outputs.major_ver }}"
"${{ env.REGISTRY_HOST }}/${{ github.repository }}:${{ steps.extract_name_and_version.outputs.minor_ver }}"
"${{ env.REGISTRY_HOST }}/${{ github.repository }}:${{ steps.extract_name_and_version.outputs.ver }}"
"${{ github.repository }}:latest"
"${{ github.repository }}:${{ steps.extract_name_and_version.outputs.major_ver }}"
"${{ github.repository }}:${{ steps.extract_name_and_version.outputs.minor_ver }}"
"${{ github.repository }}:${{ steps.extract_name_and_version.outputs.ver }}"
labels: |
org.opencontainers.image.title=feedforbot
org.opencontainers.image.description=Forward links from RSS/Atom feeds to messengers
org.opencontainers.image.source=https://github.com/${{ github.repository }}
org.opencontainers.image.url=https://github.com/${{ github.repository }}
org.opencontainers.image.authors=Aleksandr Shpak <shpaker@gmail.com>
org.opencontainers.image.version=${{ steps.extract_name_and_version.outputs.ver }}
org.opencontainers.image.created=${{ github.event.release.created_at }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.licenses=MIT
provenance: false
cache-from: type=registry,ref=${{ env.REGISTRY_HOST }}/${{ github.repository }}:${{ steps.extract_name_and_version.outputs.minor_ver }}
cache-to: type=inline

deploy:
name: 🚀 Deploy tmfeed
runs-on: ubuntu-latest
needs: [build]
if: >-
github.event_name == 'push'
|| (
github.event_name == 'release'
&& !contains(github.event.release.tag_name, 'rc')
always()
&& (needs.build.result == 'success' || needs.build.result == 'skipped')
&& (
github.event_name == 'push'
|| !contains(github.event.release.tag_name, 'rc')
)
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: 📥 Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

- name: Determine image tag
- name: 🏷️ Determine image tag
id: image
run: |
if [ "${{ github.event_name }}" = "release" ]; then
Expand All @@ -30,24 +101,24 @@ jobs:
echo "tag=latest" >> "$GITHUB_OUTPUT"
fi

- name: Set up SSH
- name: 🔑 Set up SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H ${{ vars.DEPLOY_HOST }} >> ~/.ssh/known_hosts

- name: Install Ansible
- name: 🧰 Install Ansible
run: pip install ansible

- name: Run deploy playbook
- name: 🚀 Run deploy playbook
working-directory: tmfeed
env:
FEEDFORBOT_TOKEN: ${{ secrets.FEEDFORBOT_TOKEN }}
FEEDFORBOT_SENTRY: ${{ secrets.FEEDFORBOT_SENTRY }}
FEEDFORBOT_IMAGE: "ghcr.io/${{ github.repository }}:${{ steps.image.outputs.tag }}"
run: >-
ansible-playbook deploy.yml
ansible-playbook deploy.playbook.yml
-i "${{ vars.DEPLOY_HOST }},"
-u "${{ vars.DEPLOY_USER }}"
--private-key ~/.ssh/id_ed25519
19 changes: 13 additions & 6 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:

jobs:
lint:
name: 🔍 Lint
runs-on: ubuntu-latest
strategy:
matrix:
Expand All @@ -19,11 +20,17 @@ jobs:
- "linters"
- "tests"
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: astral-sh/setup-uv@d0d8abe699bfb85fec6de9f7adb5ae17292296ff # v6
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
- name: 📥 Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: 🧰 Set up uv
uses: astral-sh/setup-uv@d0d8abe699bfb85fec6de9f7adb5ae17292296ff # v6
- name: 🐍 Set up Python ${{ matrix.PYTHON_VERSION }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.PYTHON_VERSION }}
- uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2
- run: uv sync --group dev
- run: just ${{ matrix.JUST_JOB }}
- name: 🧰 Set up just
uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2
- name: 📦 Sync dependencies
run: uv sync --group dev
- name: ✅ Run ${{ matrix.JUST_JOB }}
run: just ${{ matrix.JUST_JOB }}
24 changes: 16 additions & 8 deletions .github/workflows/pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,30 @@ on:

jobs:
build:
name: 📦 Publish to PyPI
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: astral-sh/setup-uv@d0d8abe699bfb85fec6de9f7adb5ae17292296ff # v6
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
- name: 📥 Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: 🧰 Set up uv
uses: astral-sh/setup-uv@d0d8abe699bfb85fec6de9f7adb5ae17292296ff # v6
- name: 🐍 Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: "3.12"
- name: Extract version
- name: 🏷️ Extract version
shell: bash
run: |
echo "ver=$(echo ${GITHUB_REF#refs/*/})" >> "$GITHUB_OUTPUT"
id: extract_version
- run: sed -i 's/0.1.0/'"${{ steps.extract_version.outputs.ver }}"'/' pyproject.toml
- run: sed -i 's/0.1.0/'"${{ steps.extract_version.outputs.ver }}"'/' feedforbot/__version__.py
- run: uv build
- run: uv publish
- name: ✏️ Patch version in pyproject.toml
run: sed -i 's/0.1.0/'"${{ steps.extract_version.outputs.ver }}"'/' pyproject.toml
- name: ✏️ Patch version in __version__.py
run: sed -i 's/0.1.0/'"${{ steps.extract_version.outputs.ver }}"'/' feedforbot/__version__.py
- name: 🏗️ Build package
run: uv build
- name: 🚀 Publish to PyPI
run: uv publish
env:
UV_PUBLISH_USERNAME: ${{ secrets.PYPI_LOGIN }}
UV_PUBLISH_PASSWORD: ${{ secrets.PYPI_PASS }}
2 changes: 1 addition & 1 deletion Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ help:

# Deploy tmfeed to VDS
tmfeed-deploy:
set -a && source tmfeed/.env && set +a && ansible-playbook -i tmfeed/inventory.ini tmfeed/deploy.yml
set -a && source tmfeed/.env && set +a && ansible-playbook -i tmfeed/inventory.ini tmfeed/deploy.playbook.yml
Loading
Loading