Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Services not working #173

Closed
fgimenez opened this issue Mar 28, 2020 · 25 comments · Fixed by #1949
Closed

Services not working #173

fgimenez opened this issue Mar 28, 2020 · 25 comments · Fixed by #1949
Assignees
Labels
area/runner Relating to errors in the runner kind/feature-request New feature or request needs-work Extra attention is needed stale-exempt Exempt from stale

Comments

@fgimenez
Copy link

Hello! I have this workflow:

on: [push]

jobs:
  tests:
    runs-on: ubuntu-latest
    container: node:12.16.1-stretch
    services:
      mongodb:
        image: "mongo:4.0.17"
    steps:
      - uses: actions/checkout@v2
      - run: yarn
      - run: yarn test

The yarn test command expects to find a mongodb service listening on 27017, but running act the command fails with MongooseServerSelectionError: getaddrinfo ENOTFOUND mongodb. The same workflow succeeds on GitHub.

I've also tried -P ubuntu-latest=nektos/act-environments-ubuntu:18.04, any help is very appreciated :)

@cplee cplee added area/runner Relating to errors in the runner kind/feature-request New feature or request labels Apr 16, 2020
@thatdoogieguy
Copy link

I was having a similar problem, especially when i was trying to combine rails caching with postgresql and redis. In the end i created a seperate workflow file called ci-local.yml based off of the production Github Actions file i had created and manually defined the services by calling apt-get then service %service_name% start.

Massive PITA but for localised testing this was the only way i could thoroughly test the functional parts of GitHub Actions where multiple parts are as yet unsupported.

Not a fix, just a hacky workaround to get myself out of trouble!

@github-actions

This comment was marked as outdated.

@github-actions github-actions bot added the stale label Jul 1, 2020
@cplee cplee removed the stale label Jul 1, 2020
@mossad-zika

This comment was marked as outdated.

@jadhavmanoj

This comment was marked as duplicate.

@mossad-zika
Copy link

@jadhavmanoj workaround is to use docker-compose

@chenxilinsidney

This comment was marked as duplicate.

@theoparis

This comment was marked as duplicate.

MatMoore added a commit to MatMoore/etl that referenced this issue Dec 29, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 30, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 30, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 31, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 31, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 31, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 31, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 31, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 31, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
MatMoore added a commit to MatMoore/etl that referenced this issue Dec 31, 2020
Airflow needs the db to be intialised even if DAGS aren't actually run.

This github actions workflow creates a postgres service container[1],
and then runs initdb before running pytest.

However, I can't use act to test this locally, because it doesn't
support service containers[2].

[1]. https://docs.github.com/en/free-pro-team@latest/actions/guides/creating-postgresql-service-containers
[2]. nektos/act#173
@Lzok
Copy link

Lzok commented Jan 25, 2021

Hello, any update on this?

My code:

jobs:
  test:
    runs-on: ubuntu-latest

    services:
      mongodb:
        image: mongo:4.0
        ports:
          - 27017/tcp
# ...etc

In the env section of my job I have: MONGO_URI_TESTS: localhost:${{ job.services.mongodb.ports[27017] }}/dbtest

The error: ERRO[0082] Unable to interpolate string 'localhost:${{ job.services.mongodb.ports[27017] }}/dbtest' - [TypeError: Cannot access member 'ports' of undefined]

Thank you!

@Systho
Copy link

Systho commented Feb 4, 2021

@thatdoogieguy Could you provide a snippet of the step you wrote tha install & start postgresql ?
I have a feeling that is a simple one but since you have experience about it let's ensure there is no nasty corner case :)

@loklaan
Copy link

loklaan commented Feb 17, 2021

Edit: I thought this was a bug, but in fact support for services aren't implemented yet in act, so for those shouting BUMP please consider contributing instead if you can! 🙌

@Systho A small reproduction is:

  1. Create .github/workflows/repro.yml
name: "Reproduction"

on:
  push:

jobs:
  repro:
    name: Reproduction of failing Services interpolation
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:12
        env:
          POSTGRES_USER: runner
          POSTGRES_PASSWORD: mysecretdbpass
          POSTGRES_DB: mydb
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432
    steps:
      - name: Echo the Postgres service ID / Network / Ports
        run: |
          echo "id: ${{ job.services.postgres.id }}"
          echo "network: ${{ job.services.postgres.network }}"
          echo "ports: ${{ job.services.postgres.ports }}"
  1. Run act "push" --job "repro"

@amacgregorhumi

This comment has been minimized.

1 similar comment
@moki9

This comment has been minimized.

@github-actions

This comment has been minimized.

@catthehacker catthehacker added the needs-work Extra attention is needed label Apr 2, 2021
@elitan

This comment was marked as duplicate.

@catthehacker
Copy link
Member

Services were drafted in #638 but author stopped responding, it works but it also breaks easily thus it wasn't merged

@catthehacker
Copy link
Member

Notification for people subscribed to this thread, please see latest PR mentioned.
artefacts: https://github.com/nektos/act/actions/runs/1118549374

@techpeace
Copy link

techpeace commented Aug 24, 2021

I added the following steps to my workflow in order to get the actions for my Rails app running locally:

# Install local deps if this action is being run locally
- name: Install local dependencies
  if: ${{ env.ACT }}
  run: |
    npm i -g yarn
    sudo apt-get update
    sudo apt-get -yqq install libgconf-2-4 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev libasound2 libxshmfence-dev postgresql postgresql-contrib redis-server

- name: Boot local dependencies
  if: ${{ env.ACT }}
  run: |
    sudo service postgresql start
    sudo service redis-server start

- name: Configure local dependencies
  if: ${{ env.ACT }}
  run: |
    sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password 'password';"

@neongreen
Copy link

It would be great if the readme mentioned that services isn't supported.

@kent-avl
Copy link

kent-avl commented Nov 8, 2022

I added the following steps to my workflow in order to get the actions for my Rails app running locally:

# Install local deps if this action is being run locally
- name: Install local dependencies
  if: ${{ env.ACT }}
  run: |
    npm i -g yarn
    sudo apt-get update
    sudo apt-get -yqq install libgconf-2-4 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev libasound2 libxshmfence-dev postgresql postgresql-contrib redis-server

- name: Boot local dependencies
  if: ${{ env.ACT }}
  run: |
    sudo service postgresql start
    sudo service redis-server start

- name: Configure local dependencies
  if: ${{ env.ACT }}
  run: |
    sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password 'password';"

thanks for providing this workaround. but installing everything every time is quite annoying, is any way to make act connect host service? e.g make act connect PostgreSQL that runs in the host.

@till
Copy link
Contributor

till commented Nov 8, 2022

You can probably use host.docker.internal on osx.

@edmundsj

This comment was marked as duplicate.

@bilogic
Copy link

bilogic commented Mar 31, 2023

thanks for providing this workaround. but installing everything every time is quite annoying, is any way to make act connect host service? e.g make act connect PostgreSQL that runs in the host.

Yea it is annoying, but connecting to host will likely restrict you to only 1 runner. Probably makes more sense to have database as part of the image, but I'm still researching how that can be done, i.e. where are they pulling unbuntu-latest from

@tarikhagustia

This comment was marked as off-topic.

@GuessWhoSamFoo
Copy link
Contributor

@catthehacker Are you aware of any active development efforts? Last I've seen is #775 and would love to help get it over the finish line

@ChristopherHX
Copy link
Contributor

This is finished in a fork https://gitea.com/gitea/act.
Maybe this can be backported by someone.

There aren't any active development efforts for this in nektos/act.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/runner Relating to errors in the runner kind/feature-request New feature or request needs-work Extra attention is needed stale-exempt Exempt from stale
Projects
None yet