diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 02e4254..220f602 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,77 +1,58 @@ name: Docker on: - schedule: - - cron: "20 6 * * *" push: - branches: [master] pull_request: - branches: [master] workflow_dispatch: + schedule: + - cron: "0 6 * * *" + env: BOT_TOKEN: ${{ secrets.BOT_TOKEN }} TIMEZONE: Europe/Stockholm LOG_LEVEL: Info SQLITE_LOCATION: /data/jobs.sqlite - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + jobs: - build: + build-and-push-docker: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - - name: Download code - uses: actions/checkout@v4 - - - name: Set up QEMU for cross-platform Docker images - uses: docker/setup-qemu-action@v3 + - run: | + if [ -z "${{ env.BOT_TOKEN }}" ]; then + echo "BOT_TOKEN not set" + exit 1 + fi + - uses: actions/checkout@v4 + - uses: astral-sh/setup-uv@v5 + with: + python-version: 3.13 + - run: uv sync --all-extras --dev + - run: uv run pytest + - uses: docker/setup-qemu-action@v3 with: platforms: all - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Install Poetry - run: pipx install poetry - - - name: Setup Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: "3.11" - cache: "poetry" - - - name: Install dependencies - run: poetry install - - - name: Run tests - run: poetry run pytest - - - name: Login to Docker Hub - uses: docker/login-action@v3 + - uses: docker/setup-buildx-action@v3 + - uses: docker/login-action@v3 if: github.event_name != 'pull_request' with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + - uses: docker/login-action@v3 if: github.event_name != 'pull_request' with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push Docker image to Docker Hub - uses: docker/build-push-action@v5 + - uses: docker/build-push-action@v6 with: context: . platforms: linux/amd64, linux/arm64 push: ${{ github.event_name != 'pull_request' }} tags: thelovinator/discord-reminder-bot:latest - - - name: Build and push Docker image to GitHub Container Registry - uses: docker/build-push-action@v5 + - uses: docker/build-push-action@v6 with: context: . platforms: linux/amd64, linux/arm64 diff --git a/.github/workflows/poetry.yml b/.github/workflows/poetry.yml new file mode 100644 index 0000000..4abf44c --- /dev/null +++ b/.github/workflows/poetry.yml @@ -0,0 +1,38 @@ +name: Poetry + +on: + push: + pull_request: + workflow_dispatch: + schedule: + - cron: "0 6 * * *" + +env: + BOT_TOKEN: ${{ secrets.BOT_TOKEN }} + TIMEZONE: Europe/Stockholm + LOG_LEVEL: Info + SQLITE_LOCATION: /data/jobs.sqlite + +jobs: + test-on-poetry: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13"] + poetry-version: ["latest", "main"] + steps: + - run: | + if [ -z "${{ env.BOT_TOKEN }}" ]; then + echo "BOT_TOKEN not set" + exit 1 + fi + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - uses: abatilo/actions-poetry@v4 + with: + poetry-version: ${{ matrix.poetry-version }} + - run: poetry install + - run: poetry run pytest diff --git a/.github/workflows/uv.yml b/.github/workflows/uv.yml new file mode 100644 index 0000000..ddab5fa --- /dev/null +++ b/.github/workflows/uv.yml @@ -0,0 +1,41 @@ +name: uv + +on: + push: + pull_request: + workflow_dispatch: + schedule: + - cron: "0 6 * * *" + +env: + BOT_TOKEN: ${{ secrets.BOT_TOKEN }} + TIMEZONE: Europe/Stockholm + LOG_LEVEL: Info + SQLITE_LOCATION: /data/jobs.sqlite + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + test-on-uv: + name: Install with uv and run tests on Python ${{ matrix.python-version }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13"] + steps: + - run: | + if [ -z "${{ env.BOT_TOKEN }}" ]; then + echo "BOT_TOKEN not set" + exit 1 + fi + - name: Checkout code + uses: actions/checkout@v4 + - name: Install uv and set the python version to ${{ matrix.python-version }} + uses: astral-sh/setup-uv@v5 + with: + python-version: ${{ matrix.python-version }} + version: "latest" + - name: Install dependencies + run: uv sync --all-extras --dev + - name: Run tests + run: uv run pytest diff --git a/.vscode/settings.json b/.vscode/settings.json index 80e3eb4..f7c6df1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,9 +7,11 @@ "audioop", "autouse", "botuser", + "Buildx", "cookiejar", "dateparser", "delenv", + "DOCKERHUB", "docstrings", "dotenv", "filterwarnings", diff --git a/pyproject.toml b/pyproject.toml index 7d89558..be17139 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -144,6 +144,3 @@ log_cli_level = "INFO" log_cli_format = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)" log_cli_date_format = "%Y-%m-%d %H:%M:%S" filterwarnings = ["ignore::DeprecationWarning:aiohttp.cookiejar"] - -# [tool.uv.sources] -# discord-py = {git = "https://github.com/Rapptz/discord.py"}