Aider-AI/aider

10 workflows · maturity 67% · 4 patterns · GitHub ↗

Security 2.5/100

Practices

✓ Matrix✓ Permissions○ Security scan○ AI review✓ Cache✓ Concurrency○ Reusable workflows

Detected patterns

Security dimensions

permissions
2.5
security scan
0
supply chain
0
secret handling
0
harden runner
0

Workflows (10)

check_pypi_version matrix .github/workflows/check_pypi_version.yml
Triggers
schedule, workflow_dispatch
Runs on
ubuntu-latest
Jobs
check_version
Matrix
python-version→ 3.10, 3.11, 3.12, 3.13, 3.14
Commands
  • pip install aider-chat
  • set -x # Enable debugging output aider_version_output=$(aider --version) if [ $? -ne 0 ]; then echo "Error: 'aider --version' command failed." exit 1 fi echo "Raw aider --version output: $aider_version_output" # Extract version number (format X.Y.Z) version_num=$(echo "$aider_version_output" | grep -oP '\d+\.\d+\.\d+') # Check if grep found anything if [ -z "$version_num" ]; then echo "Error: Could not extract version number using grep -oP '\d+\.\d+\.\d+' from output: $aider_version_output" exit 1 fi echo "Extracted version number: $version_num" echo "version=$version_num" >> $GITHUB_OUTPUT
  • set -x # Enable debugging output # Fetch all tags from remote just in case git fetch --tags origin main # Get the latest tag that strictly matches vX.Y.Z (no suffixes like .dev) # List all tags, sort by version descending, filter for exact pattern, take the first one latest_tag=$(git tag --sort=-v:refname | grep -P '^v\d+\.\d+\.\d+$' | head -n 1) if [ -z "$latest_tag" ]; then echo "Error: Could not find any tags matching the pattern '^v\d+\.\d+\.\d+$'" exit 1 fi echo "Latest non-dev tag: $latest_tag" # Remove 'v' prefix for comparison tag_num=${latest_tag#v} echo "Extracted tag number: $tag_num" echo "tag=$tag_num" >> $GITHUB_OUTPUT
  • echo "Installed version: ${{ steps.installed_version.outputs.version }}" echo "Latest tag version: ${{ steps.latest_tag.outputs.tag }}" if [ "${{ steps.installed_version.outputs.version }}" != "${{ steps.latest_tag.outputs.tag }}" ]; then echo "Error: Installed aider version (${{ steps.installed_version.outputs.version }}) does not match the latest tag (${{ steps.latest_tag.outputs.tag }})." exit 1 fi echo "Versions match."
View raw YAML
name: Check PyPI Version

# Check to be sure `pip install aider-chat` installs the most recently published version.
# If dependencies get yanked, it may render the latest version uninstallable.
# See https://github.com/Aider-AI/aider/issues/3699 for example.

on:
  schedule:
    # Run once a day at midnight UTC
    - cron: '0 0 * * *'
  workflow_dispatch: # Allows manual triggering

jobs:
  check_version:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]

    steps:
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install aider-chat
        run: pip install aider-chat

      - name: Get installed aider version
        id: installed_version
        run: |
          set -x # Enable debugging output
          aider_version_output=$(aider --version)
          if [ $? -ne 0 ]; then
            echo "Error: 'aider --version' command failed."
            exit 1
          fi
          echo "Raw aider --version output: $aider_version_output"

          # Extract version number (format X.Y.Z)
          version_num=$(echo "$aider_version_output" | grep -oP '\d+\.\d+\.\d+')

          # Check if grep found anything
          if [ -z "$version_num" ]; then
            echo "Error: Could not extract version number using grep -oP '\d+\.\d+\.\d+' from output: $aider_version_output"
            exit 1
          fi

          echo "Extracted version number: $version_num"
          echo "version=$version_num" >> $GITHUB_OUTPUT

      - name: Check out code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # Fetch all history for all tags

      - name: Get latest tag
        id: latest_tag
        run: |
          set -x # Enable debugging output
          # Fetch all tags from remote just in case
          git fetch --tags origin main
          # Get the latest tag that strictly matches vX.Y.Z (no suffixes like .dev)
          # List all tags, sort by version descending, filter for exact pattern, take the first one
          latest_tag=$(git tag --sort=-v:refname | grep -P '^v\d+\.\d+\.\d+$' | head -n 1)

          if [ -z "$latest_tag" ]; then
            echo "Error: Could not find any tags matching the pattern '^v\d+\.\d+\.\d+$'"
            exit 1
          fi

          echo "Latest non-dev tag: $latest_tag"
          # Remove 'v' prefix for comparison
          tag_num=${latest_tag#v}
          echo "Extracted tag number: $tag_num"
          echo "tag=$tag_num" >> $GITHUB_OUTPUT

      - name: Compare versions
        run: |
          echo "Installed version: ${{ steps.installed_version.outputs.version }}"
          echo "Latest tag version: ${{ steps.latest_tag.outputs.tag }}"
          if [ "${{ steps.installed_version.outputs.version }}" != "${{ steps.latest_tag.outputs.tag }}" ]; then
            echo "Error: Installed aider version (${{ steps.installed_version.outputs.version }}) does not match the latest tag (${{ steps.latest_tag.outputs.tag }})."
            exit 1
          fi
          echo "Versions match."
docker-build-test .github/workflows/docker-build-test.yml
Triggers
push, pull_request
Runs on
ubuntu-latest
Jobs
docker_build_and_push
Actions
docker/setup-qemu-action, docker/setup-buildx-action, docker/login-action, docker/build-push-action, docker/build-push-action, docker/build-push-action, docker/build-push-action
View raw YAML
name: Docker Build Test

on:
  push:
    paths-ignore:
      - 'aider/website/**'
      - 'README.md'
      - 'HISTORY.md'
      - '.github/workflows/*'
      - '!.github/workflows/docker-build-test.yml'
    branches:
      - main
  pull_request:
    paths-ignore:
      - 'aider/website/**'
      - 'README.md'
      - 'HISTORY.md'
      - '.github/workflows/*'
      - '!.github/workflows/docker-build-test.yml'
    branches:
      - main

jobs:
  docker_build_and_push:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up QEMU
      uses: docker/setup-qemu-action@v3

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3

    - name: Login to DockerHub
      if: ${{ github.event_name != 'pull_request' }}
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_PASSWORD }}

    - name: Build Docker images (PR)
      if: ${{ github.event_name == 'pull_request' }}
      uses: docker/build-push-action@v5
      with:
        context: .
        file: ./docker/Dockerfile
        platforms: linux/amd64,linux/arm64
        push: false
        target: aider

    - name: Build Docker images (Push)
      if: ${{ github.event_name != 'pull_request' }}
      uses: docker/build-push-action@v5
      with:
        context: .
        file: ./docker/Dockerfile
        platforms: linux/amd64,linux/arm64
        push: true
        tags: ${{ secrets.DOCKERHUB_USERNAME }}/aider:dev
        target: aider

    - name: Build Docker full image (PR)
      if: ${{ github.event_name == 'pull_request' }}
      uses: docker/build-push-action@v5
      with:
        context: .
        file: ./docker/Dockerfile
        platforms: linux/amd64,linux/arm64
        push: false
        target: aider-full

    - name: Build Docker full image (Push)
      if: ${{ github.event_name != 'pull_request' }}
      uses: docker/build-push-action@v5
      with:
        context: .
        file: ./docker/Dockerfile
        platforms: linux/amd64,linux/arm64
        push: true
        tags: ${{ secrets.DOCKERHUB_USERNAME }}/aider-full:dev
        target: aider-full
docker-release .github/workflows/docker-release.yml
Triggers
workflow_dispatch, push
Runs on
ubuntu-latest
Jobs
docker_build_and_push
Actions
docker/setup-qemu-action, docker/setup-buildx-action, docker/login-action, docker/build-push-action, docker/build-push-action
View raw YAML
name: Docker Release

on:
  workflow_dispatch:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'

jobs:
  docker_build_and_push:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up QEMU
      uses: docker/setup-qemu-action@v3

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3

    - name: Login to DockerHub
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_PASSWORD }}

    - name: Build and push Docker images
      uses: docker/build-push-action@v5
      with:
        context: .
        file: ./docker/Dockerfile
        platforms: linux/amd64,linux/arm64
        push: true
        tags: |
          ${{ secrets.DOCKERHUB_USERNAME }}/aider:${{ github.ref_name }}
          ${{ secrets.DOCKERHUB_USERNAME }}/aider:latest
        target: aider

    - name: Build and push Docker full image
      uses: docker/build-push-action@v5
      with:
        context: .
        file: ./docker/Dockerfile
        platforms: linux/amd64,linux/arm64
        push: true
        tags: |
          ${{ secrets.DOCKERHUB_USERNAME }}/aider-full:${{ github.ref_name }}
          ${{ secrets.DOCKERHUB_USERNAME }}/aider-full:latest
        target: aider-full
issues .github/workflows/issues.yml
Triggers
schedule, workflow_dispatch
Runs on
ubuntu-latest
Jobs
process-issues
Commands
  • python -m pip install --upgrade pip pip install requests python-dotenv tqdm
  • python scripts/issues.py --yes
View raw YAML
name: Process GitHub Issues
on:
  schedule:
    - cron: '0 */12 * * *'  # Run every 12 hours
  workflow_dispatch:  # Allow manual triggers

jobs:
  process-issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write  # Required to modify issues
    
    steps:
      - uses: actions/checkout@v3
      
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'
          
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install requests python-dotenv tqdm
          
      - name: Run issues script
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: python scripts/issues.py --yes
pages perms .github/workflows/pages.yml
Triggers
push, workflow_dispatch
Runs on
ubuntu-latest, ubuntu-latest
Jobs
build, deploy
Actions
ruby/setup-ruby, actions/configure-pages, actions/upload-pages-artifact, actions/deploy-pages
Commands
  • bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
  • python -m pip install --upgrade pip python -m pip install linkchecker
  • linkchecker --ignore-url='.+\.(mp4|mov|avi)' https://aider.chat
View raw YAML
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

# Sample workflow for building and deploying a Jekyll site to GitHub Pages
name: Deploy Jekyll site to Pages

on:
  push:
    branches:
      - "main"
    paths:
      - "aider/website/**"
      - ".github/workflows/pages.yml"

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow one concurrent deployment
concurrency:
  group: "pages"
  cancel-in-progress: true

jobs:
  # Build job
  build:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: aider/website
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.3' # Not needed with a .ruby-version file
          bundler-cache: true # runs 'bundle install' and caches installed gems automatically
          cache-version: 0 # Increment this number if you need to re-download cached gems
          working-directory: '${{ github.workspace }}/aider/website'
      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v3
      - name: Build with Jekyll
        # Outputs to the './_site' directory by default
        run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
        env:
          JEKYLL_ENV: production
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: "aider/website/_site"

  # Deployment job
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
        
      - name: Set up Python 3.12
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install linkchecker
        run: |
          python -m pip install --upgrade pip
          python -m pip install linkchecker

      - name: Run linkchecker
        run: |
          linkchecker --ignore-url='.+\.(mp4|mov|avi)' https://aider.chat
pre-commit .github/workflows/pre-commit.yml
Triggers
pull_request, push, workflow_dispatch
Runs on
ubuntu-latest
Jobs
pre-commit
Actions
mdeweerd/logToCheckStyle
Commands
  • sudo apt-get update && sudo apt-get install cppcheck uncrustify
  • python -m pip install pre-commit
  • set -o pipefail pre-commit gc pre-commit run --show-diff-on-failure --color=always --all-files | tee ${RAW_LOG}
View raw YAML
---
name: pre-commit
on:
  pull_request:
  push:
  workflow_dispatch:
jobs:
  pre-commit:
    runs-on: ubuntu-latest
    env:
      RAW_LOG: pre-commit.log
      CS_XML: pre-commit.xml
    steps:
      - run: sudo apt-get update && sudo apt-get install cppcheck uncrustify
        if: false
      - uses: actions/checkout@v4
      - run: python -m pip install pre-commit
      - uses: actions/cache/restore@v4
        with:
          path: ~/.cache/pre-commit/
          key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }}
      - name: Run pre-commit hooks
        env:
          SKIP: no-commit-to-branch
        run: |
          set -o pipefail
          pre-commit gc
          pre-commit run --show-diff-on-failure --color=always --all-files | tee ${RAW_LOG}
      - name: Convert Raw Log to Checkstyle format (launch action)
        uses: mdeweerd/logToCheckStyle@v2025.1.1
        if: ${{ failure() }}
        with:
          in: ${{ env.RAW_LOG }}
          # out: ${{ env.CS_XML }}
      - uses: actions/cache/save@v4
        if: ${{ ! cancelled() }}
        with:
          path: ~/.cache/pre-commit/
          key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }}
      - name: Provide log as artifact
        uses: actions/upload-artifact@v4
        if: ${{ ! cancelled() }}
        with:
          name: precommit-logs
          path: |
            ${{ env.RAW_LOG }}
            ${{ env.CS_XML }}
          retention-days: 2
release .github/workflows/release.yml
Triggers
workflow_dispatch, push
Runs on
ubuntu-latest
Jobs
build_and_publish
Commands
  • python -m pip install --upgrade pip pip install build setuptools wheel twine importlib-metadata==7.2.1
  • python -m build twine upload dist/*
View raw YAML
name: PyPI Release

on:
  workflow_dispatch:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'

jobs:
  build_and_publish:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: 3.x

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install build setuptools wheel twine importlib-metadata==7.2.1

    - name: Build and publish
      env:
        TWINE_USERNAME: __token__
        TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
      run: |
        python -m build
        twine upload dist/*
ubuntu-tests matrix .github/workflows/ubuntu-tests.yml
Triggers
push, pull_request
Runs on
ubuntu-latest
Jobs
build
Matrix
python-version→ 3.10, 3.11, 3.12, 3.13, 3.14
Commands
  • sudo apt-get update sudo apt-get install -y libportaudio2
  • python -m pip install --upgrade pip pip install pytest pip install .
  • pytest
View raw YAML
name: Ubuntu Python Tests

on:
  push:
    paths-ignore:
      - 'aider/website/**'
      - 'README.md'
      - 'HISTORY.md'
      - '.github/workflows/*'
      - '!.github/workflows/ubuntu-tests.yml'
    branches:
      - main
  pull_request:
    paths-ignore:
      - 'aider/website/**'
      - 'README.md'
      - 'HISTORY.md'
      - '.github/workflows/*'
      - '!.github/workflows/ubuntu-tests.yml'
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]

    steps:
    - name: Check out repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install system dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y libportaudio2

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install pytest
        pip install .

    - name: Run tests
      env:
        AIDER_ANALYTICS: false
      run: |
        pytest
windows-tests matrix .github/workflows/windows-tests.yml
Triggers
push, pull_request
Runs on
windows-latest
Jobs
build
Matrix
python-version→ 3.10, 3.11, 3.12, 3.13, 3.14
Commands
  • python -m pip install --upgrade pip pip install pytest pip install .
  • pytest
View raw YAML
name: Windows Python Tests

on:
  push:
    paths-ignore:
      - 'aider/website/**'
      - 'README.md'
      - 'HISTORY.md'
      - '.github/workflows/*'
      - '!.github/workflows/windows-tests.yml'
    branches:
      - main
  pull_request:
    paths-ignore:
      - 'aider/website/**'
      - 'README.md'
      - 'HISTORY.md'
      - '.github/workflows/*'
      - '!.github/workflows/windows-tests.yml'
    branches:
      - main

jobs:
  build:
    runs-on: windows-latest
    strategy:
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]

    steps:
    - name: Check out repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install pytest
        pip install .

    - name: Run tests
      env:
        AIDER_ANALYTICS: false
      run: |
        pytest
        
windows_check_pypi_version matrix .github/workflows/windows_check_pypi_version.yml
Triggers
schedule, workflow_dispatch
Runs on
windows-latest
Jobs
check_version
Matrix
python-version→ 3.10, 3.11, 3.12, 3.13, 3.14
Commands
  • pip install aider-chat
  • Write-Host "Running 'aider --version'..." $aider_version_output = aider --version if ($LASTEXITCODE -ne 0) { Write-Error "Error: 'aider --version' command failed." exit 1 } Write-Host "Raw aider --version output: $aider_version_output" # Extract version number (format X.Y.Z) using PowerShell regex $match = [regex]::Match($aider_version_output, '\d+\.\d+\.\d+') if (-not $match.Success) { Write-Error "Error: Could not extract version number using regex '\d+\.\d+\.\d+' from output: $aider_version_output" exit 1 } $version_num = $match.Value Write-Host "Extracted version number: $version_num" echo "version=$version_num" >> $env:GITHUB_OUTPUT
  • Write-Host "Fetching tags..." # Fetch all tags from remote just in case git fetch --tags origin main Write-Host "Getting latest non-dev tag..." # Get the latest tag that strictly matches vX.Y.Z (no suffixes like .dev) # List all tags, sort by version descending, filter for exact pattern, take the first one $latest_tag = (git tag --sort=-v:refname | Select-String -Pattern '^v\d+\.\d+\.\d+$' | Select-Object -First 1).Line if (-not $latest_tag) { Write-Error "Error: Could not find any tags matching the pattern '^v\d+\.\d+\.\d+$'" exit 1 } Write-Host "Latest non-dev tag: $latest_tag" # Remove 'v' prefix for comparison $tag_num = $latest_tag.Substring(1) Write-Host "Extracted tag number: $tag_num" echo "tag=$tag_num" >> $env:GITHUB_OUTPUT
  • Write-Host "Installed version: ${{ steps.installed_version.outputs.version }}" Write-Host "Latest tag version: ${{ steps.latest_tag.outputs.tag }}" if ("${{ steps.installed_version.outputs.version }}" -ne "${{ steps.latest_tag.outputs.tag }}") { Write-Error "Error: Installed aider version (${{ steps.installed_version.outputs.version }}) does not match the latest tag (${{ steps.latest_tag.outputs.tag }})." exit 1 } Write-Host "Versions match."
View raw YAML
name: Windows Check PyPI Version

# Check to be sure `pip install aider-chat` installs the most recently published version on Windows.
# If dependencies get yanked, it may render the latest version uninstallable.
# See https://github.com/Aider-AI/aider/issues/3699 for example.

on:
  schedule:
    # Run once a day at 1 AM UTC (offset from Ubuntu check)
    - cron: '0 1 * * *'
  workflow_dispatch: # Allows manual triggering

jobs:
  check_version:
    runs-on: windows-latest
    strategy:
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
    defaults:
      run:
        shell: pwsh # Use PowerShell for all run steps

    steps:
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install aider-chat
        run: pip install aider-chat

      - name: Get installed aider version
        id: installed_version
        run: |
          Write-Host "Running 'aider --version'..."
          $aider_version_output = aider --version
          if ($LASTEXITCODE -ne 0) {
            Write-Error "Error: 'aider --version' command failed."
            exit 1
          }
          Write-Host "Raw aider --version output: $aider_version_output"

          # Extract version number (format X.Y.Z) using PowerShell regex
          $match = [regex]::Match($aider_version_output, '\d+\.\d+\.\d+')

          if (-not $match.Success) {
            Write-Error "Error: Could not extract version number using regex '\d+\.\d+\.\d+' from output: $aider_version_output"
            exit 1
          }
          $version_num = $match.Value

          Write-Host "Extracted version number: $version_num"
          echo "version=$version_num" >> $env:GITHUB_OUTPUT

      - name: Check out code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # Fetch all history for all tags

      - name: Get latest tag
        id: latest_tag
        run: |
          Write-Host "Fetching tags..."
          # Fetch all tags from remote just in case
          git fetch --tags origin main
          Write-Host "Getting latest non-dev tag..."
          # Get the latest tag that strictly matches vX.Y.Z (no suffixes like .dev)
          # List all tags, sort by version descending, filter for exact pattern, take the first one
          $latest_tag = (git tag --sort=-v:refname | Select-String -Pattern '^v\d+\.\d+\.\d+$' | Select-Object -First 1).Line

          if (-not $latest_tag) {
            Write-Error "Error: Could not find any tags matching the pattern '^v\d+\.\d+\.\d+$'"
            exit 1
          }

          Write-Host "Latest non-dev tag: $latest_tag"
          # Remove 'v' prefix for comparison
          $tag_num = $latest_tag.Substring(1)
          Write-Host "Extracted tag number: $tag_num"
          echo "tag=$tag_num" >> $env:GITHUB_OUTPUT

      - name: Compare versions
        run: |
          Write-Host "Installed version: ${{ steps.installed_version.outputs.version }}"
          Write-Host "Latest tag version: ${{ steps.latest_tag.outputs.tag }}"
          if ("${{ steps.installed_version.outputs.version }}" -ne "${{ steps.latest_tag.outputs.tag }}") {
            Write-Error "Error: Installed aider version (${{ steps.installed_version.outputs.version }}) does not match the latest tag (${{ steps.latest_tag.outputs.tag }})."
            exit 1
          }
          Write-Host "Versions match."