Skip to content

Commit 5420416

Browse files
committed
separation of concern of creating a PR vs code to change the version
1 parent 3f39af2 commit 5420416

5 files changed

Lines changed: 124 additions & 29 deletions

File tree

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: Create a PR if one doesn't exists
2+
description: >
3+
Creates a commit with the current changes to the repo, and opens a PR for that commit. If
4+
any PR with the same title exists, then this action is marked as succeeded.
5+
inputs:
6+
commit-message:
7+
description: >
8+
The message for the commit to be created.
9+
required: true
10+
11+
title:
12+
description: >
13+
The title of the PR. If empty, the title and body will be determined from the commit message.
14+
default: ''
15+
required: false
16+
17+
body:
18+
description: >
19+
The body (description) of the PR. The `title` input must be specified in order for this input to be used.
20+
default: ''
21+
required: false
22+
23+
head-branch:
24+
description: >
25+
The name of the branch to hold the new commit. If an existing open PR with the same head
26+
branch exists, the new branch will be force-pushed to that PR instead of creating a new PR.
27+
required: true
28+
29+
base-branch:
30+
description: >
31+
The base branch to target with the new PR.
32+
required: true
33+
34+
token:
35+
description: |
36+
The GitHub token to use. It must have enough privileges to
37+
make API calls to create and close pull requests.
38+
required: true
39+
40+
runs:
41+
using: composite
42+
steps:
43+
- name: Update git config
44+
shell: bash
45+
run: |
46+
git config --global user.email "github-actions@github.com"
47+
git config --global user.name "github-actions[bot]"
48+
- name: Commit, Push and Open PR
49+
shell: bash
50+
env:
51+
COMMIT_MESSAGE: ${{ inputs.commit-message }}
52+
HEAD_BRANCH: ${{ inputs.head-branch }}
53+
BASE_BRANCH: ${{ inputs.base-branch }}
54+
GH_TOKEN: ${{ inputs.token }}
55+
TITLE: ${{ inputs.title }}
56+
BODY: ${{ inputs.body }}
57+
run: |
58+
set -exu
59+
if ! [[ $(git diff --stat) != '' ]]; then
60+
exit 0 # exit early
61+
fi
62+
# stage changes in the working tree
63+
git add .
64+
git commit -m "$COMMIT_MESSAGE"
65+
git checkout -b "$HEAD_BRANCH"
66+
# CAUTION: gits history changes with the following
67+
git push --force origin "$HEAD_BRANCH"
68+
PR_JSON=$(gh pr list --state open --json number --head "$HEAD_BRANCH")
69+
if [[ $? -ne 0 ]]; then
70+
echo "Failed to fetch existing PRs."
71+
exit 1
72+
fi
73+
PR_NUMBERS=$(echo $PR_JSON | jq '. | length')
74+
if [[ $PR_NUMBERS -ne 0 ]]; then
75+
echo "Found existing open PR: $PR_NUMBERS"
76+
exit 0
77+
fi
78+
gh pr create --head "$HEAD_BRANCH" --base "$BASE_BRANCH" --title "$TITLE" --body "$BODY" --assignee ${{ github.actor }}
79+
if [[ $? -ne 0 ]]; then
80+
echo "Failed to create new PR."
81+
exit 1
82+
fi

.github/workflows/bump-cli.yml

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
name: Bump CLI version
22
on:
3-
push:
4-
branches: [main]
3+
workflow_dispatch:
54
pull_request:
65
branches: [main]
6+
paths:
7+
- .github/actions/create-pr/action.yml
78
schedule:
89
- cron: 0 0 */14 * * # run every 14 days
910

@@ -16,29 +17,18 @@ jobs:
1617
uses: actions/checkout@v3
1718
with:
1819
fetch-depth: 1
19-
token: ${{ secrets.WORKFLOW_TOKEN }}
20-
- name: Install dependencies
21-
run: |
22-
sudo apt-get update
23-
sudo apt-get install -qq jq
24-
sudo apt-get install gh
25-
shell: bash
2620
- name: Bump CLI
2721
env:
2822
GH_TOKEN: ${{ github.token }}
2923
run: |
3024
scripts/replace-cli-version.sh
31-
- name: Push changes to a branch
32-
env:
33-
GH_TOKEN: ${{ secrets.WORKFLOW_TOKEN }}
34-
run: |
35-
git config user.name github-actions
36-
git config user.email github-actions@github.com
37-
git checkout -b bump-cli
38-
if [[ `git status --porcelain` ]]; then
39-
git add .
40-
git commit -m "automatically bump cli version"
41-
git push --set-upstream origin bump-cli
42-
git push
43-
gh pr create --title "Bump CLI Version for integration tests" --body ""
44-
fi
25+
- name: Commit, Push and Open a PR
26+
uses: ./.github/actions/create-pr
27+
with:
28+
token: ${{ github.token }}
29+
base-branch: refs/heads/main
30+
head-branch: bump-cli
31+
commit-message: Bump CLI version from ${{ env.PREVIOUS_VERSION }} to ${{ env.LATEST_VERSION }} for integration tests
32+
title: Bump CLI Version to ${{ env.LATEST_VERSION }} for integration tests
33+
body: >
34+
Bumps CLI version from ${{ env.PREVIOUS_VERSION }} to ${{ env.LATEST_VERSION }}

.github/workflows/main.yml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,25 @@ jobs:
183183
run: |
184184
npm run integration
185185
186+
set-matrix:
187+
name: Set Matrix for cli-test
188+
runs-on: ubuntu-latest
189+
steps:
190+
- name: Checkout
191+
uses: actions/checkout@v3
192+
- name: Set the variables
193+
id: set-variables
194+
run: echo "::set-output name=cli-versions::$(cat ./supported_cli_versions.json | jq)"
195+
outputs:
196+
cli-versions: ${{ steps.set-variables.outputs.cli-versions }}
186197
cli-test:
187198
name: CLI Test
188199
runs-on: ${{ matrix.os }}
189-
needs: [find-nightly]
200+
needs: [find-nightly, set-matrix]
190201
strategy:
191202
matrix:
192203
os: [ubuntu-latest, windows-latest]
193-
version: ['v2.7.6', 'v2.8.5', 'v2.9.4', 'v2.10.5', 'v2.11.6', 'nightly']
204+
version: ${{ fromJson(needs.set-matrix.outputs.cli-versions) }}
194205
fail-fast: false
195206
env:
196207
CLI_VERSION: ${{ matrix.version }}

scripts/replace-cli-version.sh

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
#!/bin/bash
22

3-
VERSIONS=$(gh api -H "Accept: application/vnd.github+json" /repos/github/codeql-cli-binaries/releases | jq '.[].tag_name' | head -2)
3+
VERSIONS=$(gh api -H "Accept: application/vnd.github+json" /repos/github/codeql-cli-binaries/releases | jq -r '.[].tag_name' | head -2)
44

5-
LATEST_VERSION=$(echo $VERSIONS | awk '{ print $1 }' | sed "s/\"//g")
6-
PREVIOUS_VERSION=$(echo $VERSIONS | awk '{ print $2 }' | sed "s/\"//g")
5+
# we are exporting these variables so that we can access these variables in the workflow
6+
LATEST_VERSION=$(echo $VERSIONS | awk '{ print $1 }')
7+
PREVIOUS_VERSION=$(echo $VERSIONS | awk '{ print $2 }')
78

8-
sed -i "s/$PREVIOUS_VERSION/$LATEST_VERSION/g" .github/workflows/main.yml
9+
echo "LATEST_VERSION=$LATEST_VERSION" >> $GITHUB_ENV
10+
echo "PREVIOUS_VERSION=$PREVIOUS_VERSION" >> $GITHUB_ENV
11+
12+
sed -i "s/$PREVIOUS_VERSION/$LATEST_VERSION/g" supported_cli_versions.json
913
sed -i "s/$PREVIOUS_VERSION/$LATEST_VERSION/g" extensions/ql-vscode/src/vscode-tests/ensureCli.ts

supported_cli_versions.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
"v2.7.6",
3+
"v2.8.5",
4+
"v2.9.4",
5+
"v2.10.5",
6+
"v2.11.5",
7+
"nightly"
8+
]

0 commit comments

Comments
 (0)