Skip to content

Commit

Permalink
Merge pull request #175 from kschrief/next
Browse files Browse the repository at this point in the history
feature: CI/CD Merges (next->next-major and next->main)
  • Loading branch information
kschrief authored Apr 2, 2024
2 parents ef3fc8c + 23bc305 commit 23ea7c9
Show file tree
Hide file tree
Showing 2 changed files with 243 additions and 0 deletions.
94 changes: 94 additions & 0 deletions .github/workflows/merge-to-main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Attempt to merge next to main
on:
workflow_dispatch:

jobs:
# Check if next can merge into main
check_merge:
name: Check if "next" can merge into "main"
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
repo-token: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }}
persist-credentials: true

# Set user identity
- name: Set-Identity
run: |
git config --global user.email "${{ secrets.GLOBAL_GITHUB_EMAIL }}"
git config --global user.name "${{ secrets.GLOBAL_GITHUB_USER }}"
# Checkout "main"
- name: Checkout main
run: git checkout "main"

# Attempt a dry-run merge
- name: Attempt a dry-run merge
run: |
git merge --no-commit --no-ff origin/${{github.ref_name}}
exit $?
# Attempt to merge to main if our dry-run succeeded
process_merge_on_success:
name: Perform merge from "next" to "main"
needs: check_merge
runs-on: ubuntu-latest
if: ${{ success() }}

steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
repo-token: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }}
persist-credentials: true

# Set user identity
- name: Set-Identity
run: |
git config --global user.email "${{ secrets.GLOBAL_GITHUB_EMAIL }}"
git config --global user.name "${{ secrets.GLOBAL_GITHUB_USER }}"
# Checkout "main"
- name: Checkout main
run: git checkout "main"

- name: Perform the merge from next to main
run: |
git merge origin/next
merge_status=$?
git push origin "main"
push_status=$?
if [ "$merge_status" -eq 0 ] && [ "$push_status" -eq 0 ]; then
echo "Push to main succeeded"
exit 0
else
exit 1
fi
# If the merge cannot be performed, let stakeholders know
process_merge_on_failure:
name: Merge dry-run failure
needs: check_merge
runs-on: ubuntu-latest
if: ${{ failure() }}

steps:
- name: Post error message (To-Do)
run: echo "Next cannot be merged into main cleanly"

# If we attempted to merge/push to next-main but there was a failure
process_push_failure:
name: Merge failure
needs: process_merge_on_success
runs-on: ubuntu-latest
if: ${{ failure() && needs.process_merge_on_success.result != 'skipped' }}

steps:
- name: Post error message (To-Do)
run: echo "There was a failure when merging next into main"
149 changes: 149 additions & 0 deletions .github/workflows/merge-to-next-major.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: Attempt to merge next to next-major
on:
workflow_dispatch:
push:
branches:
- "next"

jobs:
# Check if next can merge into next-major
check_merge:
name: Check if "next" can merge into "next-major"
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
repo-token: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }}
persist-credentials: true

# Set user identity
- name: Set-Identity
run: |
git config --global user.email "${{ secrets.GLOBAL_GITHUB_EMAIL }}"
git config --global user.name "${{ secrets.GLOBAL_GITHUB_USER }}"
# Checkout "next-major"
- name: Checkout next-major
run: git checkout "next-major"

# Get the "next-major" version number
- name: Extract next-major version
id: extract_version
run: echo "::set-output name=version::$(node -e 'console.log(require("./package.json").version)')"

# Checkout "next"
- name: Checkout next
run: git checkout "next"

# Update "next" version to match "next-major"
- name: Update "next" version to match "next-major"
run: |
jq '.version = "${{ steps.extract_version.outputs.version }}"' package.json > temp.json
if diff -q "package.json" "temp.json" >/dev/null; then
echo "Versions are identical. No change required."
rm temp.json
else
mv temp.json package.json
git add package.json && git commit -m "Sync version to ${{ steps.extract_version.outputs.version }}"
fi
# Checkout "next-major"
- name: Checkout next-major
run: git checkout "next-major"

# Attempt a dry-run merge
- name: Attempt a dry-run merge
run: |
git merge --no-commit --no-ff ${{github.ref_name}}
exit $?
# Attempt to merge to next-major if our dry-run succeeded
process_merge_on_success:
name: Perform merge from "next" to "next-major"
needs: check_merge
runs-on: ubuntu-latest
if: ${{ success() }}

steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
repo-token: ${{ secrets.SEMANTIC_RELEASE_BOT_PAT }}
persist-credentials: true

# Set user identity
- name: Set-Identity
run: |
git config --global user.email "${{ secrets.GLOBAL_GITHUB_EMAIL }}"
git config --global user.name "${{ secrets.GLOBAL_GITHUB_USER }}"
# Checkout "next-major"
- name: Checkout next-major
run: git checkout "next-major"

# Get the "next-major" version number
- name: Extract next-major version
id: extract_version
run: echo "::set-output name=version::$(node -e 'console.log(require("./package.json").version)')"

# Checkout "next"
- name: Checkout next
run: git checkout "next"

# Update "next" version to match "next-major"
- name: Update "next" version to match "next-major"
run: |
jq '.version = "${{ steps.extract_version.outputs.version }}"' package.json > temp.json
if diff -q "package.json" "temp.json" >/dev/null; then
echo "Versions are identical. No change required."
rm temp.json
else
mv temp.json package.json
git add package.json && git commit -m "Sync version to ${{ steps.extract_version.outputs.version }}"
fi
# Checkout "next-major"
- name: Checkout next-major
run: git checkout "next-major"

- name: Perform the merge from next to next-major
run: |
git merge next
merge_status=$?
git push origin "next-major"
push_status=$?
if [ "$merge_status" -eq 0 ] && [ "$push_status" -eq 0 ]; then
echo "Push to next-major succeeded"
exit 0
else
exit 1
fi
# If the merge cannot be performed, let stakeholders know
process_merge_on_failure:
name: Merge dry-run failure
needs: check_merge
runs-on: ubuntu-latest
if: ${{ failure() }}

steps:
- name: Post error message (To-Do)
run: echo "Next cannot be merged into next-major cleanly"

# If we attempted to merge/push to next-main but there was a failure
process_push_failure:
name: Merge failure
needs: process_merge_on_success
runs-on: ubuntu-latest
if: ${{ failure() && needs.process_merge_on_success.result != 'skipped' }}

steps:
- name: Post error message (To-Do)
run: echo "There was a failure when merging next into next-major"

0 comments on commit 23ea7c9

Please sign in to comment.