1
0
Fork 0
mirror of https://code.forgejo.org/actions/cascading-pr synced 2025-03-14 22:36:58 +01:00
No description
Find a file
2023-10-24 19:47:51 +02:00
.forgejo/workflows upgrade to 1.21.0-5-rc2 2023-10-24 17:30:18 +02:00
tests test PR from a fork 2023-10-24 19:47:45 +02:00
.editorconfig .editorconfig 2023-10-14 20:46:18 +02:00
.gitignore cascading-pr.sh login both repos 2023-10-12 17:08:13 +02:00
action.yml store the tokens in files and never display them 2023-10-14 18:05:40 +02:00
cascading-pr-lib.sh increase the timeout waiting for success on the cascaded PR 2023-10-15 18:16:27 +02:00
cascading-pr.sh use ref instead of sha 2023-10-24 19:47:51 +02:00
forgejo-curl.sh install dependencies 2023-10-13 15:01:47 +02:00
LICENSE LICENSE 2023-10-13 19:47:35 +02:00
README.md do nothing if nothing is pushed 2023-10-22 23:35:43 +02:00

Create and synchronize a PR in a dependent repository

Description

When used in a workflow triggered by a PR event, it will create, update and close a matching PR in another repository. Whenever the matching PR is modified by cascading-pr, it waits for the CI to pass otherwise it fails.

As an example, when a PR is created in forgejo/runner, a matching PR is created in actions/setup-forgejo with the proposed change. cascading-pr will wait until the CI in actions/setup-forgejo is successful. When the PR in forgejo/runner is merged, the matching PR in actions/setup-forgejo is updated to use what was just merged and is ready to be reviewed.

The update script is expected to be found in the checked out repository running the PR. It is given three arguments:

  • A directory in which the destination repository is checked-out
  • A file with the JSON describing the pull request in the destination repository
  • A file with the JSON describing the pull request in the origin repository

If changes are found in the destination repository directory, they will be pushed as a new commit in the PR.

Inputs

parameter description required default
origin-url URL of the Forgejo instance where the PR that triggers the action is located (e.g. https://code.forgejo.org) true
origin-repo the repository in which the PR was created true
origin-token a token with write permission on origin-repo true
origin-pr number of the PR in {orign-repo} true
destination-url URL of the Forgejo instance where the cascading PR is created or updated (e.g. https://code.forgejo.org) true
destination-repo the repository in which the cascading PR is created or updated true
destination-branch the base branch of the destination repository for the cascading PR true
destination-token a token with write permission on destination-repo true
update path to the script to update the content of the cascading PR true
prefix prefix of the cascading PR created on destination-repo (default to {origin-repo}) false
verbose if true print verbose information false false
debug if true print debug information false false

Example

on:
  pull_request:
    types:
      - opened
      - synchronize
      - closed

jobs:
  test:
    runs-on: docker
    steps:
      - uses: actions/checkout@v4
      - uses: actions/cascading-pr@v1
        with:
          origin-url: https://code.forgejo.org
          origin-repo: forgejo/lxc-helpers
          origin-token: ${{ secrets.ORIGIN_TOKEN }}
          origin-pr: ${{ github.event.pull_request.number }}
          destination-url: https://code.forgejo.org
          destination-repo: forgejo/actd
          destination-branch: main
          destination-token: ${{ secrets.DESTINATION_TOKEN }}
          update: ./upgrade-lxc-helpers

Hacking

The test environment consists of the following (all users password is admin1234)

  • A forgejo instance with a runner
  • An unprivileged user user1
  • The repository user1/originrepo
    • contains a pull_request workflow using cascading-pr that targets user2/destinationrepo
    • contains a script that will modify user2/destinationrepo
    • a branch1 at the same commit as main
  • The repository user1/cascading-pr with the action under test
  • An unprivileged user user2
  • The repository user2/destinationrepo
git clone https://code.forgejo.org/actions/setup-forgejo
export PATH=$(pwd)/setup-forgejo:$PATH
git clone https://code.forgejo.org/actions/cascading-pr
cd cascading-pr
forgejo-curl.sh logout
forgejo-runner.sh teardown
forgejo.sh teardown
forgejo.sh setup root admin1234 codeberg.org/forgejo/forgejo 1.21
FORGEJO_RUNNER_CONFIG=$(pwd)/tests/runner-config.yaml forgejo-runner.sh setup
url=http://$(cat forgejo-ip):3000
firefox $url

The test for a successful run of the cascading-pr action consists of:

  • creating a PR from branch1 to main
  • wait for the commit status until it is successful

testing an update on the action

  • run tests/run.sh --debug once so all is in place
  • commit changes to the files that are in the cascading-pr action (action.yml, cascading-pr.sh etc.)
  • push the modified action to user1/cascading-pr
  • visit $url/user1/originrepo/actions/runs/1 and click re-run

interactive debugging

Following the steps below recreate the same environment as the integration workflow locally. It is helpful for forensic analysis when something does not run as expected and the error displayed are unclear.

To help with the development loop all steps are idempotent and running tests/run.sh --debug multiple times must succeed.

Individual steps can be run independendely by using the name of the function. For instance:

  • tests/run.sh --debug create_pull_request will only call the create_pull_request function found in tests/run.sh to (re)create the pull request in user1/originrepo.
  • ./cascading-pr.sh --debug --origin-url ... upsert_branch will only call the upsert_branch function found in cascading-pr.sh.

directories

The tests/run.sh script stores all its files in /tmp/cascading-pr-test. The temporary directories created by cascading-pr.sh are disposed of when the script ends.

logging

If --debug is used a full debug log is displayed, very complete and very verbose. Otherwise it is stashed in a temporary file and only displayed if an error happens.

snippets for copy/pasting

tests/run.sh --debug
tests/run.sh --debug no_change_no_cascade_pr
./cascading-pr.sh --debug --origin-url "$url" --origin-repo "user1/originrepo" --origin-token "$(cat /tmp/cascading-pr-test/user1/repo-token)" --origin-pr 1 --destination-url "$url" --destination-repo "user2/destinationrepo" --destination-token "$(cat /tmp/cascading-pr-test/user2/repo-token)" --destination-branch "main" --update "upgraded" run

Update the README

With https://github.com/npalm/action-docs action-docs --update-readme