Running actions in another directory

I've just started exploring Github actions however I've found myself placing a command in multiple places.

I have a PHP project where the composer.json is not in the root, my structure looks like:

my-project: readme.md app: composer.json

Obviously there is more to it and there is a reason why, but my composer.json sits in a subdirectory called 'app'. As a result in my workflow, I have to cd into that folder every time to run a command:

name: CI
on: [push]
jobs: phpunit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup Symfony run: | cd app cp .env.dev .env - name: Install Composer Dependencies run: | cd app composer install --prefer-dist - name: Run Tests run: | cd app php bin/phpunit

How can I remove the cd app in every stage?

3 Answers

Update: It's now possible to set a working-directory default for a job. See this answer.

There is an option to set a working-directory on a step, but not for multiple steps or a whole job. I'm fairly sure this option only works for script steps, not action steps with uses.

Using working-directory, your workflow would look like this. It's still quite verbose but maybe a bit cleaner.

name: CI
on: [push]
jobs: phpunit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup Symfony working-directory: ./app run: cp .env.dev .env - name: Install Composer Dependencies working-directory: ./app run: composer install --prefer-dist - name: Run Tests working-directory: ./app run: php bin/phpunit

Alternatively, you can run it all in one step so that you only need to specify working-directory once.

name: CI
on: [push]
jobs: phpunit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup and run tests working-directory: ./app run: | cp .env.dev .env composer install --prefer-dist php bin/phpunit
0

You can now add a default working directory for all steps in a job: docs

For the example here, this would be:

name: CI
on: [push]
jobs: phpunit: runs-on: ubuntu-latest defaults: run: working-directory: ./app steps: - uses: actions/checkout@v1 - name: Setup Symfony run: .env.dev .env - name: Install Composer Dependencies run: composer install --prefer-dist - name: Run Tests run: php bin/phpunit

Caveat: this only applies to run steps; eg you'll still need to add the subdirectory to with parameters of uses steps, if required.

4

Hope this will help somebody

name: CI
on: ...
defaults: run: working-directory: ./app
jobs: ...
0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like