action #159171
Updated by okurz 8 months ago
## Motivation
Consider transient openQA instances like openQA-single-instance-container but also new instances where we do not want to rely on admins to manually put stuff into /var/lib/openqa/share/tests. For those we want to ensure that openQA automatically clones git repos specified as part of tests but also keeps those working copies up to date.
## Acceptance criteria
* **AC1:**
* *Given* Given CASEDIR has a git repo
* *And* /var/lib/openqa/share/tests does not already have the corresponding distri checked out
* *When* tests are created
* *Then* openQA clones the test repo
* **AC2:** Same as AC1 but for NEEDLE_DIR
* **AC3:**
* *When* Whenever new tests are created and repo already exists
* *Then* the git repo is updated
* **AC4:**
* *Given* CASEDIR with specific commit in refspec
* *When* tests are created
* *Then* the git repo still stays on that refspec
## Suggestions
The following describes something like a TOFU approach, where the first CASEDIR/NEEDLE_DIR for a DISTRI
is deemed to be the authoritative one in the future.
- Job gets created
- If job has CASEDIR / NEEDLE_DIR:
- CASEDIR / NEEDLE_DIR is cloned or updated on the webui server
- See HDD=1=http:// mechanism
- Where to actually clone to? --> /var/lib/openqa/share/tests/DISTRI/products/DISTRI/needles
- ~~(- What to do with different forks? -> use https://git-scm.com/docs/git-worktree)~~
- If there is not /var/lib/openqa/share/tests/DISTRI, clone CASEDIR to /var/lib/openqa/share/tests/DISTRI
- If there is /var/lib/openqa/share/tests/DISTRI, only update it if git url is equal origin url in /var/lib/openqa/share/tests/DISTRI and branch in CASEDIR is equal checked out branch in /var/lib/openqa/share/tests/DISTRI
- Analog with NEEDLE_DIR and /var/lib/openqa/share/tests/DISTRI/products/DISTRI/needles
- Job is assigned
- Also make sure that fetchneedles doesn't interfere.
- The initial clone as well as updating should be handled in asynchronous tasks like ..._URL asset downloading
Back