Skip to content

Commit b43a8e3

Browse files
workflows.
1 parent 13182d2 commit b43a8e3

File tree

4 files changed

+181
-100
lines changed

4 files changed

+181
-100
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: "CI/CD publish"
2+
3+
on:
4+
pull_request:
5+
types: [closed]
6+
branches:
7+
- main
8+
9+
jobs:
10+
metadata:
11+
name: "Set CI/CD metadata"
12+
runs-on: ubuntu-latest
13+
timeout-minutes: 1
14+
outputs:
15+
build_datetime_london: ${{ steps.variables.outputs.build_datetime_london }}
16+
build_datetime: ${{ steps.variables.outputs.build_datetime }}
17+
build_timestamp: ${{ steps.variables.outputs.build_timestamp }}
18+
build_epoch: ${{ steps.variables.outputs.build_epoch }}
19+
nodejs_version: ${{ steps.variables.outputs.nodejs_version }}
20+
python_version: ${{ steps.variables.outputs.python_version }}
21+
terraform_version: ${{ steps.variables.outputs.terraform_version }}
22+
version: ${{ steps.variables.outputs.version }}
23+
is_version_prerelease: ${{ steps.variables.outputs.is_version_prerelease }}
24+
does_pull_request_exist: ${{ steps.pr_exists.outputs.does_pull_request_exist }}
25+
pr_number: ${{ steps.pr_exists.outputs.pr_number }}
26+
steps:
27+
- name: "Checkout code"
28+
uses: actions/checkout@v5
29+
- name: "Set CI/CD variables"
30+
id: variables
31+
run: |
32+
datetime=$(date -u +'%Y-%m-%dT%H:%M:%S%z')
33+
BUILD_DATETIME=$datetime make version-create-effective-file dir=.
34+
version=$(head -n 1 .version 2> /dev/null || echo unknown)
35+
echo "build_datetime_london=$(TZ=Europe/London date --date=$datetime +'%Y-%m-%dT%H:%M:%S%z')" >> $GITHUB_OUTPUT
36+
echo "build_datetime=$datetime" >> $GITHUB_OUTPUT
37+
echo "build_timestamp=$(date --date=$datetime -u +'%Y%m%d%H%M%S')" >> $GITHUB_OUTPUT
38+
echo "build_epoch=$(date --date=$datetime -u +'%s')" >> $GITHUB_OUTPUT
39+
echo "nodejs_version=$(grep "^nodejs\s" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
40+
echo "python_version=$(grep "^python\s" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
41+
echo "terraform_version=$(grep "^terraform\s" .tool-versions | cut -f2 -d' ')" >> $GITHUB_OUTPUT
42+
echo "version=$(echo $version)" >> $GITHUB_OUTPUT
43+
echo "is_version_prerelease=$(if [[ $version == *-* ]]; then echo "true"; else echo "false"; fi)" >> $GITHUB_OUTPUT
44+
45+
- name: "Check if pull request exists for this branch"
46+
id: pr_exists
47+
env:
48+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
49+
run: |
50+
branch_name=${GITHUB_HEAD_REF:-$(echo $GITHUB_REF | sed 's#refs/heads/##')}
51+
echo "Current branch is '$branch_name'"
52+
53+
pr_json=$(gh pr list --head "$branch_name" --state open --json number --limit 1)
54+
pr_number=$(echo "$pr_json" | jq -r '.[0].number // empty')
55+
56+
if [[ -n "$pr_number" ]]; then
57+
echo "Pull request exists: #$pr_number"
58+
echo "does_pull_request_exist=true" >> $GITHUB_OUTPUT
59+
echo "pr_number=$pr_number" >> $GITHUB_OUTPUT
60+
else
61+
echo "Pull request doesn't exist"
62+
echo "does_pull_request_exist=false" >> $GITHUB_OUTPUT
63+
echo "pr_number=" >> $GITHUB_OUTPUT
64+
fi
65+
66+
- name: "List variables"
67+
run: |
68+
export BUILD_DATETIME_LONDON="${{ steps.variables.outputs.build_datetime_london }}"
69+
export BUILD_DATETIME="${{ steps.variables.outputs.build_datetime }}"
70+
export BUILD_TIMESTAMP="${{ steps.variables.outputs.build_timestamp }}"
71+
export BUILD_EPOCH="${{ steps.variables.outputs.build_epoch }}"
72+
export NODEJS_VERSION="${{ steps.variables.outputs.nodejs_version }}"
73+
export PYTHON_VERSION="${{ steps.variables.outputs.python_version }}"
74+
export TERRAFORM_VERSION="${{ steps.variables.outputs.terraform_version }}"
75+
export VERSION="${{ steps.variables.outputs.version }}"
76+
export DOES_PULL_REQUEST_EXIST="${{ steps.pr_exists.outputs.does_pull_request_exist }}"
77+
export IS_VERSION_PRERELEASE="${{ steps.variables.outputs.is_version_prerelease }}"
78+
make list-variables
79+
80+
publish-stage: # Recommended maximum execution time is 10 minutes
81+
name: "Publish stage"
82+
needs: [metadata]
83+
uses: ./.github/workflows/stage-5-publish.yaml
84+
with:
85+
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
86+
build_timestamp: "${{ needs.metadata.outputs.build_timestamp }}"
87+
build_epoch: "${{ needs.metadata.outputs.build_epoch }}"
88+
nodejs_version: "${{ needs.metadata.outputs.nodejs_version }}"
89+
python_version: "${{ needs.metadata.outputs.python_version }}"
90+
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
91+
version: "${{ needs.metadata.outputs.version }}"
92+
is_version_prerelease: "${{ needs.metadata.outputs.is_version_prerelease }}"
Lines changed: 69 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
name: "3. CI/CD deploy"
22

33
on:
4-
workflow_run:
5-
workflows: ["1. CI/CD pull request"]
6-
types:
7-
- completed
8-
branches: [main]
94
workflow_dispatch:
105
inputs:
116
include_prereleases:
@@ -77,72 +72,72 @@ jobs:
7772
# # export TAG="${{ steps.variables.outputs.tag }}"
7873
# make list-variables
7974

80-
# deploy-jekyll:
81-
# environment:
82-
# name: github-pages
83-
# url: ${{ steps.deployment.outputs.page_url }}
84-
# runs-on: ubuntu-latest
85-
# needs: metadata
86-
# steps:
87-
# - name: "Checkout code"
88-
# uses: actions/checkout@v5
89-
90-
# - name: "Get version"
91-
# id: get-asset-version
92-
# shell: bash
93-
# env:
94-
# GH_TOKEN: ${{ github.token }}
95-
# run: |
96-
# INPUTS_INCLUDE_PRERELEASES="${{ inputs.include_prereleases }}"
97-
# INPUTS_INCLUDE_PRERELEASES=${INPUTS_INCLUDE_PRERELEASES:-"true"}
98-
99-
# INPUTS_VERSION="${{ inputs.version }}"
100-
# INPUTS_VERSION=${INPUTS_VERSION:-"latest"}
101-
102-
103-
# if [[ $INPUTS_INCLUDE_PRERELEASES == true ]]; then
104-
# json=$(gh release list --json tagName --limit 1 --exclude-drafts)
105-
# else
106-
# json=$(gh release list --json tagName --limit 1 --exclude-drafts --exclude-pre-releases)
107-
# fi
108-
109-
# echo "Release list response: $json"
110-
111-
# # Check if the response is empty
112-
# if [[ "$json" == "[]" ]] || [[ -z "$json" ]]; then
113-
# echo "::error::No releases found. Please create a release before deploying docs."
114-
# exit 1
115-
# fi
116-
117-
# release_version=$(echo $json | jq -r '.[0].tagName')
118-
# if [[ "$release_version" == "null" ]] || [[ -z "$release_version" ]]; then
119-
# echo "::error::Could not extract release version from: $json"
120-
# exit 1
121-
# fi
122-
123-
# echo "Found release version: $release_version"
124-
125-
# if [[ $INPUTS_VERSION == latest ]]; then
126-
# echo "release_version=$release_version" >> $GITHUB_OUTPUT
127-
# else
128-
# echo "release_version=$INPUTS_VERSION" >> $GITHUB_OUTPUT
129-
# fi
130-
131-
# - name: "Get release version"
132-
# id: download-asset
133-
# shell: bash
134-
# env:
135-
# GH_TOKEN: ${{ github.token }}
136-
# run: |
137-
# gh release download ${{steps.get-asset-version.outputs.release_version}} -p jekyll-docs-*.tar --output artifact.tar
138-
139-
# - uses: actions/upload-artifact@v4
140-
# with:
141-
# name: jekyll-docs-${{steps.get-asset-version.outputs.release_version}}
142-
# path: artifact.tar
143-
144-
# - name: Deploy to GitHub Pages
145-
# id: deployment
146-
# uses: actions/deploy-pages@v4
147-
# with:
148-
# artifact_name: jekyll-docs-${{steps.get-asset-version.outputs.release_version}}
75+
deploy-jekyll:
76+
environment:
77+
name: github-pages
78+
url: ${{ steps.deployment.outputs.page_url }}
79+
runs-on: ubuntu-latest
80+
needs: metadata
81+
steps:
82+
- name: "Checkout code"
83+
uses: actions/checkout@v5
84+
85+
- name: "Get version"
86+
id: get-asset-version
87+
shell: bash
88+
env:
89+
GH_TOKEN: ${{ github.token }}
90+
run: |
91+
INPUTS_INCLUDE_PRERELEASES="${{ inputs.include_prereleases }}"
92+
INPUTS_INCLUDE_PRERELEASES=${INPUTS_INCLUDE_PRERELEASES:-"true"}
93+
94+
INPUTS_VERSION="${{ inputs.version }}"
95+
INPUTS_VERSION=${INPUTS_VERSION:-"latest"}
96+
97+
98+
if [[ $INPUTS_INCLUDE_PRERELEASES == true ]]; then
99+
json=$(gh release list --json tagName --limit 1 --exclude-drafts)
100+
else
101+
json=$(gh release list --json tagName --limit 1 --exclude-drafts --exclude-pre-releases)
102+
fi
103+
104+
echo "Release list response: $json"
105+
106+
# Check if the response is empty
107+
if [[ "$json" == "[]" ]] || [[ -z "$json" ]]; then
108+
echo "::error::No releases found. Please create a release before deploying docs."
109+
exit 1
110+
fi
111+
112+
release_version=$(echo $json | jq -r '.[0].tagName')
113+
if [[ "$release_version" == "null" ]] || [[ -z "$release_version" ]]; then
114+
echo "::error::Could not extract release version from: $json"
115+
exit 1
116+
fi
117+
118+
echo "Found release version: $release_version"
119+
120+
if [[ $INPUTS_VERSION == latest ]]; then
121+
echo "release_version=$release_version" >> $GITHUB_OUTPUT
122+
else
123+
echo "release_version=$INPUTS_VERSION" >> $GITHUB_OUTPUT
124+
fi
125+
126+
- name: "Get release version"
127+
id: download-asset
128+
shell: bash
129+
env:
130+
GH_TOKEN: ${{ github.token }}
131+
run: |
132+
gh release download ${{steps.get-asset-version.outputs.release_version}} -p jekyll-docs-*.tar --output artifact.tar
133+
134+
- uses: actions/upload-artifact@v4
135+
with:
136+
name: jekyll-docs-${{steps.get-asset-version.outputs.release_version}}
137+
path: artifact.tar
138+
139+
- name: Deploy to GitHub Pages
140+
id: deployment
141+
uses: actions/deploy-pages@v4
142+
with:
143+
artifact_name: jekyll-docs-${{steps.get-asset-version.outputs.release_version}}

.github/workflows/disabled/docs-cicd-1-pull-request.yaml

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -152,18 +152,3 @@ jobs:
152152
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
153153
version: "${{ needs.metadata.outputs.version }}"
154154
# secrets: inherit
155-
publish-stage: # Recommended maximum execution time is 10 minutes
156-
name: "Publish stage"
157-
needs: [metadata, build-stage]
158-
uses: ./.github/workflows/docs-stage-5-publish.yaml
159-
if: (github.event_name == 'push' && github.ref == 'refs/heads/main')
160-
with:
161-
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
162-
build_timestamp: "${{ needs.metadata.outputs.build_timestamp }}"
163-
build_epoch: "${{ needs.metadata.outputs.build_epoch }}"
164-
nodejs_version: "${{ needs.metadata.outputs.nodejs_version }}"
165-
python_version: "${{ needs.metadata.outputs.python_version }}"
166-
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
167-
version: "${{ needs.metadata.outputs.version }}"
168-
is_version_prerelease: "${{ needs.metadata.outputs.is_version_prerelease }}"
169-
# secrets: inherit

.github/workflows/stage-5-publish.yaml renamed to .github/workflows/disabled/stage-5-publish.yaml

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,38 +62,47 @@ jobs:
6262
env:
6363
GH_TOKEN: ${{ github.token }}
6464
GH_REPO: ${{ github.repository }}
65+
VERSION: ${{ inputs.version }}
66+
IS_PRERELEASE: ${{ inputs.is_version_prerelease }}
6567
run: |
68+
PRERELEASE_FLAG=""
69+
if [ "$IS_PRERELEASE" = "true" ]; then
70+
PRERELEASE_FLAG="--prerelease"
71+
fi
6672
gh release create \
67-
"${{ inputs.version }}" \
73+
"$VERSION" \
6874
--draft \
6975
--latest \
70-
--title "${{ inputs.version }}" \
71-
--notes "Release of ${{ inputs.version }}" \
72-
${{ inputs.is_version_prerelease == 'true' && '--prerelease' || '' }}
76+
--title "$VERSION" \
77+
--notes "Release of $VERSION" \
78+
$PRERELEASE_FLAG
7379
7480
- name: "Upload jeykll docs release asset"
7581
env:
7682
GH_TOKEN: ${{ github.token }}
7783
GH_REPO: ${{ github.repository }}
84+
VERSION: ${{ inputs.version }}
7885
run: |
79-
cp ./artifacts/jekyll-docs-${{ inputs.version }}/artifact.tar $RUNNER_TEMP/jekyll-docs-${{ inputs.version }}.tar
86+
cp ./artifacts/jekyll-docs-$VERSION/artifact.tar $RUNNER_TEMP/jekyll-docs-$VERSION.tar
8087
gh release upload \
81-
"${{ inputs.version }}" \
82-
$RUNNER_TEMP/jekyll-docs-${{ inputs.version }}.tar#jekyll-docs-${{ inputs.version }}
88+
"$VERSION" \
89+
$RUNNER_TEMP/jekyll-docs-$VERSION.tar#jekyll-docs-$VERSION
8390
8491
- name: "Upload schema release asset"
8592
env:
8693
GH_TOKEN: ${{ github.token }}
8794
GH_REPO: ${{ github.repository }}
95+
VERSION: ${{ inputs.version }}
8896
run: |
89-
cp ./artifacts/schemas-${{ inputs.version }}/artifact.tar $RUNNER_TEMP/schemas-${{ inputs.version }}.tar
97+
cp ./artifacts/schemas-$VERSION/artifact.tar $RUNNER_TEMP/schemas-$VERSION.tar
9098
gh release upload \
91-
"${{ inputs.version }}" \
92-
$RUNNER_TEMP/schemas-${{ inputs.version }}.tar#schemas-${{ inputs.version }}
99+
"$VERSION" \
100+
$RUNNER_TEMP/schemas-$VERSION.tar#schemas-$VERSION
93101
94102
95103
- name: Publish Release
96104
env:
97105
GH_TOKEN: ${{ github.token }}
98106
GH_REPO: ${{ github.repository }}
99-
run: gh release edit "${{ inputs.version }}" --draft=false
107+
VERSION: ${{ inputs.version }}
108+
run: gh release edit "$VERSION" --draft=false

0 commit comments

Comments
 (0)