-
Notifications
You must be signed in to change notification settings - Fork 0
114 lines (94 loc) · 4.21 KB
/
create-release.yml
File metadata and controls
114 lines (94 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
name: Create release candidate
on:
workflow_dispatch:
env:
# kosli commands picks up org, flow, trail and api-token from these environment variables
KOSLI_ORG: "${{ vars.KOSLI_ORG }}"
KOSLI_FLOW: "jira-example-release"
KOSLI_API_TOKEN: "${{ secrets.KOSLI_PUBLIC_API_TOKEN }}"
KOSLI_CLI_VERSION: "${{ vars.KOSLI_CLI_VERSION }}"
KOSLI_ENV_STAGING: "${{ vars.KOSLI_ENV_STAGING }}"
KOSLI_ENV_PROD: "${{ vars.KOSLI_ENV_PROD }}"
KOSLI_FLOW_SOURCE: "jira-example-source"
# KOSLI_DRY_RUN: true
DEBUG: true
JIRA_BASE_URL: "${{ vars.JIRA_BASE_URL }}"
JIRA_USERNAME: ${{ secrets.KOSLI_JIRA_USERNAME }}
JIRA_API_TOKEN: ${{ secrets.KOSLI_JIRA_API_TOKEN }}
JIRA_PROJECT_ID: "${{ vars.JIRA_PROJECT_ID }}"
jobs:
create-candidate:
name: Create release candidate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Kosli cli
uses: kosli-dev/setup-cli-action@v2
with:
version:
${{ vars.KOSLI_CLI_VERSION }}
- name: Create Jira release candidate
run: |
source scripts/lib-jira.sh
# Fail if release already exists
CURRENT_REL_JSON=$(get_current_release_candidate ${{ env.JIRA_PROJECT_ID }})
CURRENT_REL=$(echo "${CURRENT_REL_JSON}" | jq .values)
if [ "${CURRENT_REL}" != "[]" ]; then
echo "Release candidate already exist: ${CURRENT_REL}"
exit 1
fi
# Create the release and get the release ID
TIMESTAMP=$(date -u "+%Y-%m-%d-%H-%M-%S")
CREATE_RESULT_JSON=$(create_release ${{ env.JIRA_PROJECT_ID }} ${TIMESTAMP})
RELEASE_ID=$(echo "${CREATE_RESULT_JSON}" | jq .id)
echo "RELEASE_ID=${RELEASE_ID}" >> $GITHUB_ENV
PROJECT_KEY=$(echo "${{ vars.JIRA_PROJECT_KEY }}" | cut -d',' -f1)
REL_LINK="${JIRA_BASE_URL}/projects/${PROJECT_KEY}/versions/${RELEASE_ID}"
echo "REL_LINK=${REL_LINK}" >> $GITHUB_ENV
- name: Begin trail
uses: ./.github/actions/kosli-begin-trail
with:
kosli-trail: ${{ env.RELEASE_ID }}
external-url: JireRelease=${{ env.REL_LINK }}
# kosli-template-file: ${{ env.KOSLI_TEMPLATE_FILE }}
- name: Add trail to jira release
run: |
source scripts/lib-jira.sh
kosli_trail_link="https://app.kosli.com/${{ env.KOSLI_ORG }}/flows/${{ env.KOSLI_FLOW }}/trails/${{ env.RELEASE_ID }}"
add_trail_link_to_release ${{ env.RELEASE_ID }} ${kosli_trail_link}
- name: Report current prod SW
run: |
source scripts/lib-kosli.sh
get_current_running_env_json ${{ env.KOSLI_ENV_PROD }} > /tmp/prod-env.json
create_running_sw_short_list_json /tmp/prod-env.json > /tmp/prod-sw.json
kosli attest custom \
--type=running-sw \
--name prod-software \
--trail ${{ env.RELEASE_ID }} \
--attestation-data /tmp/prod-sw.json
echo "Current prod SW:" >> $GITHUB_STEP_SUMMARY
cat /tmp/prod-sw.json | jq >> $GITHUB_STEP_SUMMARY
- name: Report current staging SW
run: |
source scripts/lib-kosli.sh
get_current_running_env_json ${{ env.KOSLI_ENV_STAGING }} > /tmp/staging-env.json
create_running_sw_short_list_json /tmp/staging-env.json > /tmp/staging-sw.json
kosli attest custom \
--type=running-sw \
--name staging-software \
--trail ${{ env.RELEASE_ID }} \
--attestation-data /tmp/staging-sw.json
echo "Current staging SW:" >> $GITHUB_STEP_SUMMARY
cat /tmp/staging-sw.json | jq >> $GITHUB_STEP_SUMMARY
- name: Add Jira issues to release
run: |
source scripts/lib-jira.sh
source scripts/lib-kosli.sh
# Add all jira issues between prod and staging
JIRA_KEYS_IN_KOSLI=$(get_issue_keys_between_staging_and_prod ${KOSLI_ENV_STAGING} ${KOSLI_ENV_PROD} ${KOSLI_FLOW_SOURCE})
echo "Adding Jira issues: ${JIRA_KEYS_IN_KOSLI}" >> $GITHUB_STEP_SUMMARY
for JIRA_KEY in ${JIRA_KEYS_IN_KOSLI}; do
add_issue_to_release ${JIRA_KEY} ${{ env.RELEASE_ID }}
done