Skip to content

Commit ecbb0fb

Browse files
authored
Merge pull request #1871 from tjgurwara99/main
Workflow to automatically bump cli version if different from the current version
2 parents f82fde3 + 365519a commit ecbb0fb

5 files changed

Lines changed: 155 additions & 2 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: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
name: Bump CLI version
2+
on:
3+
workflow_dispatch:
4+
pull_request:
5+
branches: [main]
6+
paths:
7+
- .github/actions/create-pr/action.yml
8+
- .github/workflows/bump-cli.yml
9+
schedule:
10+
- cron: 0 0 */14 * * # run every 14 days
11+
12+
permissions:
13+
contents: write
14+
pull-requests: write
15+
16+
jobs:
17+
build:
18+
name: Build
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v3
23+
with:
24+
fetch-depth: 1
25+
- name: Bump CLI
26+
env:
27+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28+
run: |
29+
scripts/replace-cli-version.sh
30+
- name: Commit, Push and Open a PR
31+
uses: ./.github/actions/create-pr
32+
with:
33+
token: ${{ secrets.GITHUB_TOKEN }}
34+
base-branch: main
35+
head-branch: github-action/bump-cli
36+
commit-message: Bump CLI version from ${{ env.PREVIOUS_VERSION }} to ${{ env.LATEST_VERSION }} for integration tests
37+
title: Bump CLI Version to ${{ env.LATEST_VERSION }} for integration tests
38+
body: >
39+
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 "cli-versions=$(cat ./supported_cli_versions.json | jq -rc)" >> $GITHUB_OUTPUT
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: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/bash
2+
3+
VERSIONS=$(gh api -H "Accept: application/vnd.github+json" /repos/github/codeql-cli-binaries/releases | jq -r '.[].tag_name' | head -2)
4+
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 }')
8+
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
13+
sed -i "s/$PREVIOUS_VERSION/$LATEST_VERSION/g" extensions/ql-vscode/test/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.11.6",
3+
"v2.7.6",
4+
"v2.8.5",
5+
"v2.9.4",
6+
"v2.10.5",
7+
"nightly"
8+
]

0 commit comments

Comments
 (0)