-
Notifications
You must be signed in to change notification settings - Fork 1
136 lines (112 loc) · 4.05 KB
/
cd_main.yml
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
name: CD UAT/PROD
on:
pull_request:
branches: [ main ]
types: [ closed ]
permissions:
packages: write
contents: write
issues: write
id-token: write
actions: read
jobs:
setup:
name: Setup
runs-on: ubuntu-latest
outputs:
semver: ${{ steps.get_semver.outputs.semver }}
steps:
- name: pull request rejected
if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged != true
run: |
echo "❌ PR was closed without a merge"
exit 1
# Set Semvar
- run: echo "SEMVER=patch" >> $GITHUB_ENV
- if: ${{ (github.event.pull_request.merged && contains(github.event.pull_request.labels.*.name, 'skip')) }}
run: echo "SEMVER=skip" >> $GITHUB_ENV
- if: ${{ (github.event.pull_request.merged && contains(github.event.pull_request.labels.*.name, 'patch')) }}
run: echo "SEMVER=patch" >> $GITHUB_ENV
- if: ${{ (github.event.pull_request.merged && contains(github.event.pull_request.labels.*.name, 'minor')) }}
run: echo "SEMVER=minor" >> $GITHUB_ENV
- if: ${{ (github.event.pull_request.merged && contains(github.event.pull_request.labels.*.name, 'major')) }}
run: echo "SEMVER=major" >> $GITHUB_ENV
- id: get_semver
name: Set Output
run: echo "semver=${{env.SEMVER}}" >> $GITHUB_OUTPUT
pre_release:
name: Create a New Pre-Release
runs-on: ubuntu-latest
needs: [ setup ]
if: ${{ needs.setup.outputs.semver != 'skip' }}
outputs:
version: ${{ steps.release.outputs.version }}
steps:
- name: Make Release
id: release
uses: pagopa/github-actions-template/node-release@473d7a78d28e15cab46dcaf766087e60604d6a40 # v1.13.3
with:
semver: ${{ needs.setup.outputs.semver }}
github_token: ${{ secrets.BOT_TOKEN_GITHUB }}
skip_ci: true
prerelease: true
deploy_uat:
name: Deploy in UAT
needs: [ setup, pre_release ]
uses: ./.github/workflows/deploy_on_cdn.yml
with:
environment: 'uat'
secrets: inherit
# integration_test:
# name: Integration Test
# needs: [ setup, deploy_uat ]
# uses: ./.github/workflows/ci_integration_test.yml
# with:
# environment: ${{ needs.setup.outputs.environment }}
# notify: false
# secrets: inherit
deploy_prod:
needs:
- setup
- deploy_uat
# - integration_test
name: Deploy in PROD
uses: ./.github/workflows/deploy_on_cdn.yml
with:
environment: 'prod'
secrets: inherit
release:
name: Create a New Release
runs-on: ubuntu-latest
needs: [ setup, pre_release, deploy_prod ]
if: ${{ needs.setup.outputs.semver != 'skip' }}
steps:
- name: Checkout code
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4 # required to make the script available for next step
- name: Make Latest Release
id: generate_notes
uses: actions/github-script@211cb3fefb35a799baa5156f9321bb774fe56294 # v5
env:
RELEASE_TAG: ${{ needs.pre_release.outputs.version }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const script = require('./.github/workflows/github_scripts/make_latest_release.js')
await script({github, context})
notify:
needs: [ setup, deploy_prod, release ]
runs-on: ubuntu-latest
name: Notify
if: always()
steps:
- name: Report Status
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v2
with:
status: ${{ needs.deploy_prod.result }}
token: ${{ secrets.GITHUB_TOKEN }}
notification_title: 'New Release on Production ${{ needs.release.outputs.version }} has {status_message}'
message_format: '{emoji} <{run_url}|{workflow}> {status_message} in <{repo_url}|{repo}>'
footer: 'Linked to <{workflow_url}| workflow file>'
icon_success: ':white_check_mark:'
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}