nektos / act

Run your GitHub Actions locally 🚀

Home Page:https://nektosact.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Services not working

fgimenez opened this issue · comments

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 :)

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!

Issue is stale and will be closed in 7 days unless there is new activity

shiiiiiiiiiiiiit

Same here. Services not working. Any workaround for the same?

@jadhavmanoj workaround is to use docker-compose

I have the same problem while using services of mysql and redis in action

Any updates? It's been another month

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!

@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 :)

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"
commented

BUMP

Issue is stale and will be closed in 14 days unless there is new activity

The bot closing issues after 14 days is pretty aggressive. :/

(I too have this issue locally. Works on GitHub)

commented

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

commented

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

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';"
commented

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

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.

commented

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

Getting this working would be AMAZING - our company heavily uses GitHub actions and act (mostly for debugging - makes it a breeze), but getting services running locally would dramatically cut our build times (as they could be done locally) and make debugging complex actions possible.

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

@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

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.