在另一个目录中运行操作

Myl*_*esK 56 github github-actions

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

我有一个composer.json不在根目录中的 PHP 项目,我的结构如下所示:

my-project:
    readme.md
    app:
        composer.json
Run Code Online (Sandbox Code Playgroud)

显然还有更多内容并且有一个原因,但我composer.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
Run Code Online (Sandbox Code Playgroud)

如何cd app在每个阶段删除?

Vla*_*nin 91

希望这会对某人有所帮助

name: CI

on:
 ...

defaults:
 run:
  working-directory: ./app

jobs:
 ...
Run Code Online (Sandbox Code Playgroud)


pet*_*ans 87

更新:现在可以working-directory为作业设置默认值。看到这个答案

有一个选项可以working-directory在一个步骤上设置 a ,但不能为多个步骤或整个作业设置。我相当确定此选项仅适用于脚本步骤,而不适用于带有uses.

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
Run Code Online (Sandbox Code Playgroud)

或者,您可以在一个步骤中全部运行,这样您只需指定working-directory一次。

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
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在使用“uses”,例如 UploadArtifact 操作。这种边缘情况的解决方案是什么? (2认同)

Tom*_*mas 70

您现在可以为作业中的所有步骤添加默认工作目录: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
Run Code Online (Sandbox Code Playgroud)

警告:这仅适用于run步骤;例如,如果需要,您仍然需要将子目录添加到步骤的with参数中uses

  • @theprogrammer如果你使用“uses”,包的作者必须专门支持“working-directory”或实现类似的东西来满足其目的和上下文。据我所知,大多数人都没有。 (5认同)
  • 您知道如何将“工作目录”与“使用”一起使用吗?正如您提到的,您有使用“with”和“uses”的示例吗?谢谢 (2认同)