How to pass a folder via re-usable action workflow?
github - Running actions in another directory - Stack Overflow
Option to specify working directory in GitHub Actions
GitHub actions (self-hosted) leaves behind working directories, how to not?
Greetings! Trying to figure out if this is even possible, but I'm looking to standardize something via a re-usable workflow.
I would like to pass a directory with source code to a re-useable workflow. The re-useable workflow will then use that passed folder as the working directory:
Here is some dummy code to represent what I'm trying to do, see re-useable workflow.yml:
name: My Re-usable Workflow!
on:
workflow_call:
inputs:
dir:
required: true
type: string
jobs:
run-job:
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Test Hello World!
working-directory: ${{ inputs.dir }}
run: |
chmod +x hello-world.sh
./hello-world.shBelow is my original workflow that calls the re-usable one:
name: Original workflow calling re-useable one
jobs:
call-reusable-workflow:
uses: org/repo/.github/workflows/function1.yml@dev
with:
dir: /my-folderMy workflow above is essentially just passing the string /my-folder, but I would like to pass the entire directory. Inside /my-folder I have a hello world script just so I can test for functionality between passing a directory via workflow.
Would appreciate any guidance and if this is the way to proceed regarding my objective.
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.
https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun
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
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.
We've generally migrated from bitbucket to github actions, and in bitbucket there way to configure it such that after a job was executed that entire working directory was removed from the filesystem. How can I configure actions to do the same thing? Because my build server disks are slowly filling with this pointless data...