supabase / setup-cli

A GitHub action for interacting with your Supabase projects using the CLI.
MIT License
120 stars 16 forks source link

bind: address already in use #265

Open eliabieri opened 9 months ago

eliabieri commented 9 months ago

Bug report

Describe the bug

supabase start fails randomly due to a port already being in use. It seems to be a timing issue as it only happens every other time when running the Github Action below.

This is the error generated:

Digest: sha256:48d2fabef1b0b1e8f9b208518008686a1cd336503af4fd6f62e169268ed9066e
Status: Downloaded newer image for ghcr.io/supabase/postgres:15.1.0.137
failed to start docker container: Error response from daemon: driver failed programming external connectivity on endpoint supabase_db_jobmate (8a76852f7f3f62ebe3fbd7ebf9cff92182749ee130513dc2b2c51d2b672a422c): Error starting userland proxy: listen tcp4 0.0.0.0:54322: bind: address already in use
Try rerunning the command with --debug to troubleshoot the error.

To Reproduce

  1. Create a Github Action
    
    name: "Push migrations"
    on:
    push:
    branches:
      - main

jobs: test: runs-on: ubuntu-latest

permissions:
  # Required to checkout the code
  contents: read
env:
  SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
steps:
  - name: Checkout repo
    uses: actions/checkout@v4
  - uses: supabase/setup-cli@v1
  - name: Link Supabase project
    run: supabase link --project-ref ${{ vars.SUPABASE_PROJECT_ID }} --password ${{ secrets.SUPABASE_DB_PASSWORD }}
  - name: Start Supabase
    run: supabase start
  - name: Push migrations
    run: supabase db push --password ${{ secrets.SUPABASE_DB_PASSWORD }}

2. Run the action

## Expected behavior

I expect this action to run successfully every time.

## Full logs

[5_Start Supabase.txt](https://github.com/supabase/setup-cli/files/14347891/5_Start.Supabase.txt)
elyobo commented 2 months ago

This is intermittent but common for us. I don't think it's every other time, it will often fail many times in a row, but it does sometimes succeed.

elyobo commented 2 months ago

I've made some tweaks on the assumption that this is GHA keeping a "hot" function around to run the workflows, and so docker's already running and messing with things. None of this is robustly tested across test failures or concurrent workflows from other branches.

Try to start up more carefully

      - name: start or reset supabase db server
        run: |
          set +e
          supabase status
          if [ $? -eq 0 ]; then
            echo "Supabase is already running, resetting database..."
            supabase db reset
          else
            echo "Supabase is not running, starting database..."
            supabase db start
          fi
          set -e

Try to clean up by stopping supabase afterwads even in cases of test failures

      - name: cleanup supabase db service
        if: always()
        run: npx supabase stop

and also limit concurrency

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true