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.jsonObviously 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/phpunitHow 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/phpunitAlternatively, 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/phpunitCaveat: this only applies to run steps; eg you'll still need to add the subdirectory to with parameters of uses steps, if required.
Hope this will help somebody
name: CI
on: ...
defaults: run: working-directory: ./app
jobs: ... 0