From 40e70d3b09ea9c74dfeca3a0f2190664db4897c9 Mon Sep 17 00:00:00 2001 From: Eduardo Valdes <1084551+emvaldes@users.noreply.github.com> Date: Tue, 14 Jan 2025 12:13:07 -0700 Subject: [PATCH] devsecops/emvaldes/remote-branch (#17022) * Importing JosiahSiegel/remote-branch-action default state. * Appending default configuration changes. * Purging the .gitignore (auto-generated) file. * Purging build-status badge from README.md --------- Co-authored-by: matts <22215332+devopsmatt@users.noreply.github.com> --- .github/actions/remote-branch/LICENSE | 21 +++++ .github/actions/remote-branch/README.md | 106 +++++++++++++++++++++++ .github/actions/remote-branch/action.yml | 61 +++++++++++++ 3 files changed, 188 insertions(+) create mode 100644 .github/actions/remote-branch/LICENSE create mode 100644 .github/actions/remote-branch/README.md create mode 100644 .github/actions/remote-branch/action.yml diff --git a/.github/actions/remote-branch/LICENSE b/.github/actions/remote-branch/LICENSE new file mode 100644 index 00000000000..ade79f7960a --- /dev/null +++ b/.github/actions/remote-branch/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Josiah Siegel + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.github/actions/remote-branch/README.md b/.github/actions/remote-branch/README.md new file mode 100644 index 00000000000..af36d8f980a --- /dev/null +++ b/.github/actions/remote-branch/README.md @@ -0,0 +1,106 @@ +# Remote Branch Action + +## Synopsis + +1. Create a branch on a remote repository. +2. [actions/checkout](https://github.com/actions/checkout) determins the active repo. + +## Usage + +### Single repo +```yml +jobs: + create-branch-action: + name: Create branch + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Create branch + uses: CDCgov/prime-reportstream/.github/actions/remote-branch@v1.0.1 + with: + branch: new-branch +``` +### Single alternative repo +```yml +jobs: + create-branch-action: + name: Create branch + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Checkout alt repo + uses: actions/checkout@v4 + with: + sparse-checkout: . + repository: me/alt-repo + token: ${{ secrets.ALT_REPO_TOKEN }} + path: alt-repo + + - name: Create branch on alt repo + uses: CDCgov/prime-reportstream/.github/actions/remote-branch@v1.0.1 + with: + branch: new-branch-alt-repo + path: alt-repo +``` +### Multiple repos +```yml +jobs: + create-branch-action: + name: Create branch + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Checkout second repo + uses: actions/checkout@v4 + with: + sparse-checkout: . + repository: me/second-repo + token: ${{ secrets.SECONDARY_REPO_TOKEN }} + path: second-repo + + - name: Create branch + id: create-branch-action + uses: CDCgov/prime-reportstream/.github/actions/remote-branch@v1.0.1 + with: + branch: new-branch + + - name: Create branch on second repo + id: create-branch-action-second-repo + uses: CDCgov/prime-reportstream/.github/actions/remote-branch@v1.0.1 + with: + branch: new-branch-second-repo + path: second-repo + + - name: Get create branch status + run: echo ${{ steps.create-branch-action.outputs.create-status }} + + - name: Get create branch status on second repo + run: echo ${{ steps.create-branch-action-second-repo.outputs.create-status }} +``` + +## Inputs + +```yml +inputs: + branch: + description: Branch name + required: true + path: + description: Relative path under $GITHUB_WORKSPACE to place the repository + required: false + default: '.' +``` + +## Outputs +```yml +outputs: + create-status: + description: Branch creation status + value: ${{ steps.create-branch.outputs.create_status }} +``` diff --git a/.github/actions/remote-branch/action.yml b/.github/actions/remote-branch/action.yml new file mode 100644 index 00000000000..215d2203407 --- /dev/null +++ b/.github/actions/remote-branch/action.yml @@ -0,0 +1,61 @@ +# action.yml +name: Remote Branch Action +description: Create and manage a remote branch +branding: + icon: 'git-branch' + color: 'blue' +inputs: + branch: + description: Branch name + required: true + path: + description: Relative path under $GITHUB_WORKSPACE to place the repository + required: false + default: '.' +outputs: + create-status: + description: Branch creation status + value: ${{ steps.create-branch.outputs.create_status }} + +runs: + using: "composite" + steps: + + - name: Create branch + id: create-branch + working-directory: ${{ inputs.path }} + shell: bash + run: | + # Assign the arguments to variables + branch_name=${{ inputs.branch }} + + # Create a new branch locally + git checkout -b $branch_name + + # Check if the branch exists on the remote + check_status=$(git ls-remote --heads origin $branch_name | wc -l) + + # Check if the branch does not exist on the remote + if [ $check_status -eq 0 ]; then + # Push the new branch to the remote repository using the token + git push -u origin $branch_name + + # Store the status of the push command + status=$? + + # Check if the push was successful + if [ $status -eq 0 ]; then + # Print a success message + echo "Branch $branch_name created and pushed" + else + # Print an error message + echo "Branch creation failed with status $status" + status="Branch creation failed with status $status" + fi + else + # Print a message that the branch already exists on the remote + echo "Branch $branch_name already exists" + status="Branch $branch_name already exists" + fi + + echo "create_status=$status" >> $GITHUB_OUTPUT