-
Notifications
You must be signed in to change notification settings - Fork 0
129 lines (112 loc) · 4.83 KB
/
create-release.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
name: Create Release on PR
on:
pull_request:
types:
- closed
env:
REGISTRY: docker.io
IMAGE_NAME: samacommunity/sama-push-daemon
jobs:
create-release:
if: |
contains(github.event.pull_request.title, 'release') == true &&
github.event.pull_request.merged == true &&
github.event.pull_request.base.ref == 'main'
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Extract Version
id: extract-version
run: |
# Use grep to find the first occurrence of the version number matching "## 0.0.0" pattern
version=$(grep -m 1 -oP '## \d+\.\d+\.\d+' CHANGELOG.md | cut -d ' ' -f 2)
echo "version=$version" >> $GITHUB_ENV
- name: Extract Changelog
id: extract-changelog
run: |
# Extract the content between the last two version headers
changelog=$(awk '/^## [0-9]+\.[0-9]+\.[0-9]+/{if (!version) {version=$0; next}} /^## [0-9]+\.[0-9]+\.[0-9]+/{exit} {if (version) description = description ORS $0} END {if (version) print description}' CHANGELOG.md | sed -e '/^## [0-9]+\.[0-9]+\.[0-9]+/d; s/^# //' > changelog.txt)
echo "changelog_file=changelog.txt" >> $GITHUB_ENV
- name: Create Release
id: create-release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.version }}
release_name: ${{ env.version }}
body_path: ${{ env.changelog_file }}
draft: false
prerelease: false
- name: Post to a Slack channel
if: success()
id: slack
uses: slackapi/slack-github-action@v1.24.0
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
REPOSITORY_NAME: ${{ github.repository }}
AUTHOR: ${{ github.event.pull_request.user.login }}
REVIEWERS: ${{ join(github.event.pull_request.requested_reviewers.*.login, ', ') }}
RELEASE_URL: ${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ env.version }}
with:
# You can pass in multiple channels to post to by providing a comma-delimited list of channel IDs.
channel-id: 'git-releases'
payload-file-path: "./.github/slack/payload-slack-content.json"
push_to_registry:
if: |
contains(github.event.pull_request.title, 'release') == true &&
github.event.pull_request.merged == true &&
github.event.pull_request.base.ref == 'main'
needs: [create-release]
runs-on: self-hosted
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract Version
id: extract-version
run: |
# Use grep to find the first occurrence of the version number matching "## 0.0.0" pattern
version=$(grep -m 1 -oP '## \d+\.\d+\.\d+' CHANGELOG.md | cut -d ' ' -f 2)
echo "version=$version" >> $GITHUB_ENV
- name: Set tag based on version
id: set_tag
run: |
echo "IMAGE_TAG=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.version }}" >> $GITHUB_ENV
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: "{{defaultContext}}"
push: true
tags: ${{ env.IMAGE_TAG }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
deploy:
if: |
contains(github.event.pull_request.title, 'release') == true &&
github.event.pull_request.merged == true &&
github.event.pull_request.base.ref == 'main'
needs: [create-release]
runs-on: self-hosted
steps:
- name: Deploy using Ansible
run: |
ansible localhost -m community.general.jenkins_build -a "{\"name\": \"SAMA/push\", \"user\": \"$DEPLOY_USER\", \"password\": \"$DEPLOY_PASSWORD\", \"url\": \"$DEPLOY_URL\", \"state\": \"present\", \"args\": {\"branch\": \"main\", \"environment\": \"prod\"}}" -B 3600 -P 0
sleep 3 # just to make sure that the request was processed
echo "Starting prod deploying job was successful."
env:
DEPLOY_USER: ${{ secrets.JENKINS_USER }}
DEPLOY_PASSWORD: ${{ secrets.JENKINS_PASSWORD }}
DEPLOY_URL: ${{ secrets.JENKINS_URL }}