我刚刚开始探索Github动作,但我发现自己在多个地方放置命令。

我有一个PHP项目,其中作曲家。Json不在根目录中,我的结构是这样的:

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

显然还有很多原因,但是我的作曲家。Json位于名为“app”的子目录中。因此,在我的工作流程中,我每次运行命令时都必须cd到这个文件夹中:

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

如何在每个阶段删除cd应用程序?


更新:现在可以为作业设置工作目录默认值了。请看这个答案。

有一个选项可以在一个步骤上设置工作目录,但不能为多个步骤或整个作业设置工作目录。我相当肯定这个选项只适用于脚本步骤,而不适用于使用的操作步骤。

https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun

使用working-directory,您的工作流看起来像这样。它仍然很啰嗦,但可能更清晰一些。

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

或者,您可以在一个步骤中运行它,这样您只需要指定一次工作目录。

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

您现在可以为作业中的所有步骤添加一个默认工作目录:docs

对于这里的例子,这将是:

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

注意:这只适用于运行步骤;Eg你仍然需要添加子目录的参数使用步骤,如果需要的话。


希望这能帮助到一些人

name: CI

on:
 ...

defaults:
 run:
  working-directory: ./app

jobs:
 ...