Skip to content

Commit c56e779

Browse files
committed
feat(ci): Add publishing script and workflow
1 parent a39fe89 commit c56e779

File tree

2 files changed

+173
-0
lines changed

2 files changed

+173
-0
lines changed

.github/workflows/release.yml

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
name: Build and Publish Extractor Pack
2+
3+
on:
4+
push:
5+
branches: ["main"]
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: write
10+
packages: write
11+
12+
jobs:
13+
release-check:
14+
runs-on: ubuntu-latest
15+
outputs:
16+
release: ${{ steps.get_version.outputs.release }}
17+
version: ${{ steps.get_version.outputs.version }}
18+
steps:
19+
- uses: actions/checkout@v4
20+
21+
- name: "Check release version"
22+
id: get_version
23+
env:
24+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
25+
run: |
26+
set -e
27+
28+
pip install yq
29+
current_version=$(cat .release.yml | yq -r ".version")
30+
31+
released_version=$(gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /repos/:owner/:repo/releases/latest | jq -r ".tag_name")
32+
33+
if [[ "$current_version" == "NA" || "$current_version" == "$released_version" ]]; then
34+
echo "No new release found"
35+
echo "release=false" >> "$GITHUB_OUTPUT"
36+
else
37+
echo "New release found"
38+
echo "version=$current_version" >> "$GITHUB_OUTPUT"
39+
echo "release=true" >> "$GITHUB_OUTPUT"
40+
fi
41+
42+
compile:
43+
name: "Compile Extractor Pack for ${{ matrix.os }}"
44+
needs: [release-check]
45+
46+
runs-on: ${{ matrix.os }}
47+
strategy:
48+
fail-fast: false
49+
matrix:
50+
# TODO: Add windows-latest
51+
os: [ubuntu-latest, macos-latest]
52+
53+
if: ${{ needs.release-check.outputs.release == 'true' }}
54+
steps:
55+
- name: "Checkout"
56+
uses: actions/checkout@v4
57+
58+
- name: "Set up Rust"
59+
uses: dtolnay/rust-toolchain@nightly
60+
if: ${{ matrix.os != 'windows-latest' }}
61+
62+
- name: "Build Extractor"
63+
if: ${{ matrix.os != 'windows-latest' }}
64+
env:
65+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
66+
run: ./scripts/create-extractor-pack.sh
67+
68+
- name: "Upload bundle artifact"
69+
uses: actions/upload-artifact@v4
70+
with:
71+
name: "extractor-bundle-${{ matrix.os }}"
72+
path: "./extractor-pack"
73+
74+
bundle:
75+
name: "Bundle Extractor Pack"
76+
runs-on: ubuntu-latest
77+
needs: [compile]
78+
if: ${{ needs.release-check.outputs.release == 'true' }}
79+
80+
steps:
81+
- name: "Checkout"
82+
uses: actions/checkout@v4
83+
84+
- name: "Downloadd all artifacts"
85+
uses: actions/download-artifact@v4
86+
with:
87+
path: "./extractor-pack"
88+
merge-multiple: true
89+
90+
- name: "Publish Extractor Pack"
91+
if: github.ref == 'refs/heads/main'
92+
env:
93+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
94+
EXTRACTOR_NAME: "bicep"
95+
run: |
96+
./scripts/publish-extractor-pack.sh
97+
98+
queries:
99+
runs-on: ubuntu-latest
100+
needs: [release-check]
101+
if: ${{ needs.release-check.outputs.release == 'true' }}
102+
103+
permissions:
104+
contents: read
105+
packages: write
106+
107+
strategy:
108+
fail-fast: false
109+
matrix:
110+
packs: ["lib", "src"]
111+
112+
steps:
113+
- name: "Checkout"
114+
uses: actions/checkout@v4
115+
116+
- name: "Check and Publish CodeQL Packs"
117+
env:
118+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
119+
run: |
120+
PACK_PATH=ql/${{ matrix.packs }}/qlpack.yml
121+
CURRENT_VERSION=$(grep version $PACK_PATH | awk '{print $2}')
122+
PACK_FULLNAME=$(cat $PACK_PATH | grep "name:" | awk '{print $2}')
123+
PACK_NAME=$(echo $PACK_FULLNAME | awk -F '/' '{print $2}')
124+
125+
PUBLISHED_VERSION=$(gh api /orgs/advanced-security/packages/container/$PACK_NAME/versions --jq '.[0].metadata.container.tags[0]')
126+
echo "Packs :: ${CURRENT_VERSION} -> ${PUBLISHED_VERSION}"
127+
128+
if [ "$PUBLISHED_VERSION" != "$CURRENT_VERSION" ]; then
129+
gh extension install github/gh-codeql
130+
gh codeql pack install "ql/${{ matrix.packs }}"
131+
gh codeql pack publish "ql/${{ matrix.packs }}"
132+
fi

scripts/publish-extractor-pack.sh

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Extractor info
5+
EXTRACTOR_INFO="./codeql-extractor.yml"
6+
EXTRACTOR_NAME="${EXTRACTOR_NAME:-$(basename $(dirname $EXTRACTOR_INFO))}"
7+
EXTRACTOR_VERSION=$(grep version $EXTRACTOR_INFO | awk '{print $2}')
8+
9+
LATEST_RELEASE=$(gh release list | head -n 1 | awk '{print $1}' | sed 's/v//')
10+
11+
echo "[+] ${EXTRACTOR_NAME} (${EXTRACTOR_VERSION})"
12+
echo "[+] Last release: ${LATEST_RELEASE}"
13+
14+
if [ "$LATEST_RELEASE" != "$EXTRACTOR_VERSION" ]; then
15+
echo "[+] New Extractor version being released"
16+
17+
# Check extracrtor-pack
18+
if [ ! -d "extractor-pack" ]; then
19+
echo "[+] No extractor-pack found"
20+
exit 1
21+
fi
22+
23+
# TODO: Add queries to extractor-pack
24+
# echo "[+] Add queries to extractor-pack"
25+
# codeql pack create --output=./extractor-pack/queries ./ql/src
26+
27+
# bundle extractor
28+
tar czf extractor-$EXTRACTOR_NAME.tar.gz extractor-pack
29+
30+
export GH_TOKEN=$GITHUB_TOKEN
31+
32+
ls -ls ./extractor-pack/tools
33+
34+
# # create release
35+
# gh release create "v$EXTRACTOR_VERSION" \
36+
# --notes "$EXTRACTOR_NAME Extractor v$EXTRACTOR_VERSION" \
37+
# extractor-$EXTRACTOR_NAME.tar.gz
38+
39+
else
40+
echo "[+] Extractor is up to date"
41+
fi

0 commit comments

Comments
 (0)