How to Auto-Update Tailscale Addon to the Latest Tailscale Version

With ClaudeAI’s help, I have built a custom HA addon repository with GitHub Actions that automatically checks for new Tailscale releases daily, updates the addon Dockerfile, bumps the version number, and commits everything - all without manual intervention. Now I get Tailscale updates within 24 hours of release instead of waiting weeks/months for maintainers. The workflow runs on a schedule, detects version changes via GitHub API, updates the necessary files, and pushes commits automatically. HA just shows an update notification and I click “Update” - zero maintenance required.

If anyone is interested, I can post the details on how to do this.

2 Likes

Would definitely be interested in this.

1 Like

1. Create Your Addon Repository

# Create a new repo on GitHub called "ha-addons", then:
git clone https://github.com/YOUR_USERNAME/ha-addons.git
cd ha-addons

# Create repository.json
cat > repository.json << 'EOF'
{
  "name": "Your Home Assistant Add-ons",
  "url": "https://github.com/YOUR_USERNAME/ha-addons",
  "maintainer": "Your Name"
}
EOF

# Create README
cat > README.md << 'EOF'
# Home Assistant Add-ons

Custom Home Assistant add-ons with automated updates.

## Installation

Add this repository URL in Home Assistant:

https://github.com/YOUR_USERNAME/ha-addons

EOF

2. Copy the Addon Files

Find the official addon repository (example: hassio-addons/addon-tailscale)

# Clone the official addon
cd /tmp
git clone https://github.com/hassio-addons/addon-tailscale.git
cd addon-tailscale/tailscale

# Copy to your repo (adjust paths as needed)
cp -r . ~/ha-addons/tailscale/

cd ~/ha-addons

3. Fix the Config Version

# Check current format
grep '^version:' tailscale/config.yaml

# If it shows "dev", change to a real version
sed -i 's/version: dev/version: 0.26.2/' tailscale/config.yaml
# Or if you're on macOS:
sed -i '' 's/version: dev/version: 0.26.2/' tailscale/config.yaml

4. Create the Auto-Update Workflow

mkdir -p .github/workflows

cat > .github/workflows/update-tailscale.yml << 'EOF'
name: Update Tailscale

on:
  schedule:
    - cron: '0 0 * * *'  # Daily at midnight UTC
  workflow_dispatch:  # Manual trigger

jobs:
  update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Get latest Tailscale version
        id: tailscale
        run: |
          LATEST=$(curl -s https://api.github.com/repos/tailscale/tailscale/releases/latest | jq -r .tag_name | sed 's/v//')
          CURRENT=$(grep 'ARG TAILSCALE_VERSION=' tailscale/Dockerfile | cut -d'"' -f2)
          echo "latest=$LATEST" >> $GITHUB_OUTPUT
          echo "current=$CURRENT" >> $GITHUB_OUTPUT
          
      - name: Check if update needed
        id: check
        run: |
          if [ "${{ steps.tailscale.outputs.latest }}" != "${{ steps.tailscale.outputs.current }}" ]; then
            echo "needs_update=true" >> $GITHUB_OUTPUT
          else
            echo "needs_update=false" >> $GITHUB_OUTPUT
          fi
          
      - name: Update Dockerfile
        if: steps.check.outputs.needs_update == 'true'
        run: |
          sed -i "s/ARG TAILSCALE_VERSION=\".*\"/ARG TAILSCALE_VERSION=\"${{ steps.tailscale.outputs.latest }}\"/" tailscale/Dockerfile
          
      - name: Bump addon version
        if: steps.check.outputs.needs_update == 'true'
        run: |
          CURRENT_VERSION=$(grep '^version:' tailscale/config.yaml | awk '{print $2}')
          NEW_VERSION=$(echo $CURRENT_VERSION | awk -F. '{$NF = $NF + 1;} 1' | sed 's/ /./g')
          sed -i "s/version: $CURRENT_VERSION/version: $NEW_VERSION/" tailscale/config.yaml
          echo "Version bumped from $CURRENT_VERSION to $NEW_VERSION"
          
      - name: Commit and push
        if: steps.check.outputs.needs_update == 'true'
        run: |
          git config user.name "GitHub Actions"
          git config user.email "[email protected]"
          git add tailscale/Dockerfile tailscale/config.yaml
          git commit -m "Update Tailscale to ${{ steps.tailscale.outputs.latest }}"
          git push
EOF

5. Push and Enable

git add .
git commit -m "Initial setup with auto-updating Tailscale addon"
git push

Enable GitHub Actions permissions:

  1. Go to https://github.com/YOUR_USERNAME/ha-addons/settings/actions
  2. Under “Workflow permissions”, select “Read and write permissions”
  3. Save

Test the workflow:

  1. Go to https://github.com/YOUR_USERNAME/ha-addons/actions
  2. Click “Update Tailscale” workflow
  3. Click “Run workflow”
  4. Watch it update your addon automatically

6. Add to Home Assistant

  1. Settings → Add-ons → Add-on Store
  2. Three dots (top right) → Repositories
  3. Add: https://github.com/YOUR_USERNAME/ha-addons
  4. Install Tailscale from your repository

How It Works

  • Workflow runs daily at midnight UTC
  • Checks GitHub API for latest Tailscale release
  • Compares with current version in Dockerfile
  • If newer version exists:
    • Updates Dockerfile with new version
    • Bumps addon version number
    • Commits and pushes changes
  • HA shows update notification
  • You click “Update” - done!

Notes

  • Your addon will appear as separate from the official one in HA
  • GitHub Actions needs write permissions enabled

Example Repository

My working setup: GitHub - igorsrdanovic/ha-addons

Feel free to use as reference or fork and modify for your needs.