Repositories¶
In a typical workflow, you will checkout the code at the beginning of each job. If you have many jobs in your workflow, duplicating the repository parameters can become tedious.
Workflows allow you to define repository resources, that you can share between
your jobs.
Additionally, those resources can carry their specific credentials, so that job generators can omit them.
Repository resources¶
Repository resources are defined in the .resources.repositories part of a workflow.
There can be any number of repository resources defined, and they may refer to the same repository, but they all must have different names.
resources:
  repositories:
  - name: foo
    type: github
    repository: a/b.git
    endpoint: https://github.com
  - name: bar
    type: gitlab
    repository: c/d.git
    endpoint: https://gitlab.com
Once defined, those repository resources can be referenced either explicitly or implicitly in your jobs:
jobs:
  job1:
    steps:
    - uses: actions/checkout@v2
      with:
        repository: ${{ resources.repositories.foo }}
    - uses: actions/checkout@v2
      with:
        repository: https://gitlab.com/c/d.git
The explicit reference uses the expression syntax. The implicit reference is used if the endpoint and repository match.
Credentials¶
If you define a repository in the resources section, all checkouts of this
repository will use the credentials you specified in the resources section, not
the ones you may have specified in the checkout function.
Examples¶
In the following example, the checkout will use the credentials specified in
variables.user and variables.pwd:
metadata:
  name: my workflow
resources:
  repositories:
  - name: awesome
    repository: awesome/stuff.git
    type: github
    endpoint: https://${{ variables.user }}:${{ variables.pwd }}@github.com/
jobs:
  job1:
    runs-on: linux
    steps:
    - uses: actions/checkout@v2
      with:
        repository: https://github.com/awesome/stuff.git
In that almost identical example, the checkout will also use the credentials
specified in variables.user and variables.pwd, not me and secret:
metadata:
  name: my workflow
resources:
  repositories:
  - name: awesome
    repository: awesome/stuff.git
    type: gitlab
    endpoint: https://${{ variables.user }}:${{ variables.pwd }}@gitlab.com/
jobs:
  job1:
    runs-on: linux
    steps:
    - uses: actions/checkout@v2
      with:
        repository: https://me:secret@gitlab.com/awesome/stuff.git
Next Steps¶
Here are some helpful resources for taking your next steps with the OpenTestFactory orchestrator:
- “actions/checkout@v2” for more details about configuring the checkout function
- “Guides” for specific use cases and examples
- “Expressions” for more information on expressions