Recently, I tried setting up Gitea Actions to automatically update my Hugo blog whenever I pushed new content. The idea was simple:

  • Use Gitea’s built-in CI/CD to pull the repo,
  • Build the site using Hugo,
  • Deploy it to the server.

Setting Up Gitea Actions

First, I created a .gitea/workflows/deploy.yml file with the following steps:

``yaml name: Deploy Hugo Site

on: push: branches: - main

jobs: build: runs-on: ubuntu-latest steps: - name: Clone repository uses: actions/checkout@v3

  - name: Install Hugo
    run: |
      sudo apt update && sudo apt install -y hugo

  - name: Build site
    run: hugo -D

  - name: Deploy to server
    run: |
      scp -r public/* user@server:/var/www/html/

Authentication Issues 😩
To deploy, I needed SSH access to the server. Gitea doesn’t have built-in secrets management (like GitHub Actions), so I had to hardcode my SSH private key inside the workflow.

<placeholder>

I knew this wasn't ideal, but I just wanted to get it working first. Unfortunately, after multiple attempts, it still failed with permission denied (publickey) errors.

What's Next? 🤔
Instead of fighting with Gitea Actions, I decided to try something else. In my next post, I'll explain how I switched to a simpler, more reliable approach using a sync service.