-
Notifications
You must be signed in to change notification settings - Fork 56
150 lines (129 loc) · 5.44 KB
/
build-and-deploy-meshery-extensions-playground-reusable.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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
name: Build and Rollout Kanvas Reusable
on:
workflow_call:
inputs:
branch:
description: Repository branch to build.
type: string
default: master
secrets:
GH_ACCESS_TOKEN:
required: true
jobs:
build-and-release:
name: Build and Rollout Kanvas
env:
RELEASE_CHANNEL: "kanvas"
runs-on: ubuntu-24.04
steps:
- name: Checkout meshery/meshery
uses: actions/checkout@v4
with:
fetch-depth: 1
path: "meshery"
repository: meshery/meshery
ref: ${{ inputs.branch }}
- name: Checkout kanvas
uses: actions/checkout@v4
with:
sparse-checkout: |
kanvas
path: "kanvas"
sparse-checkout-cone-mode: false
- name: Fetch version scripts from meshery-extensions.
uses: actions/checkout@v4
with:
token: ${{ secrets.GH_ACCESS_TOKEN }}
repository: layer5labs/meshery-extensions
path: "meshery-extensions"
fetch-depth: 1
sparse-checkout: |
build/get-meshery-version
build/get-extension-version
sparse-checkout-cone-mode: false
- name: File system view
run: |
pwd;
ls;
tree kanvas;
- name: Fetch Meshery and Extensions version
run: |
chmod +x ./meshery-extensions/build/get-meshery-version
MESHERY_VERSION=$(./meshery-extensions/build/get-meshery-version)
echo "MESHERY_VERSION=$MESHERY_VERSION" >> $GITHUB_ENV
chmod +x ./meshery-extensions/build/get-extension-version
MESHERY_EXTENSION_VERSION=$(./meshery-extensions/build/get-extension-version)
echo "MESHERY_EXTENSION_VERSION=$MESHERY_EXTENSION_VERSION" >> $GITHUB_ENV
- name: Docker login
uses: azure/docker-login@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Configure kanvas distro
# merges the custom kanvas distro at currentrepo/kanvas with the meshery repo checked out to
# meshery/meshery directory to create a new meshery distro
run: |
ls
echo "ls meshery"
ls meshery
echo "ls kanvas"
ls kanvas
echo "merge"
cp -R ./kanvas/kanvas/* ./meshery/
echo "ls meshery"
ls meshery
echo "ls meshery/ui"
ls meshery/ui
- name: Docker build & tag
working-directory: "./meshery"
run: |
DOCKER_BUILDKIT=1 docker build -f install/docker/Dockerfile --no-cache -t layer5/meshery:kanvas-latest --build-arg TOKEN=${{ secrets.GLOBAL_TOKEN }} --build-arg GIT_COMMITSHA=${GITHUB_SHA::8} --build-arg GIT_VERSION=${{ env.MESHERY_VERSION }} --build-arg RELEASE_CHANNEL=${RELEASE_CHANNEL} .
- name: Bundle kanvas extension with the image
working-directory: "./meshery-extensions"
run: |
wget https://github.com/layer5labs/meshery-extensions-packages/releases/download/${{ env.MESHERY_EXTENSION_VERSION }}/provider-meshery.tar.gz
mkdir extensions-package
tar xzf provider-meshery.tar.gz -C extensions-package
mkdir -p provider/Meshery/${{ env.MESHERY_EXTENSION_VERSION }}
mv extensions-package/provider provider/Meshery/${{ env.MESHERY_EXTENSION_VERSION }}
ls;
docker run -d --name meshery-tmp layer5/meshery:kanvas-latest
docker cp -a ./provider/ meshery-tmp:/home/appuser/.meshery/
docker container commit meshery-tmp layer5/meshery:kanvas-latest
- name: Docker tag & push
run: |
docker tag layer5/meshery:kanvas-latest layer5/meshery:kanvas-${GITHUB_SHA::8}
docker tag layer5/meshery:kanvas-latest layer5/meshery:kanvas-${{ env.MESHERY_VERSION }}
docker push layer5/meshery:kanvas-latest
docker push layer5/meshery:kanvas-${GITHUB_SHA::8}
docker push layer5/meshery:kanvas-${{ env.MESHERY_VERSION }}
- name: Rollout Kanvas
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.METAL03_HOST }}
username: ${{ secrets.METAL03_USERNAME }}
key: ${{ secrets.METAL03_KEY }}
port: 22
script: |
kubectl set image deployment/meshery meshery=layer5/meshery:kanvas-${{env.MESHERY_VERSION}} -n meshery-extensions
- name: Send Email on Rollout Kanvas Release Failure
if: ${{ failure() }}
uses: dawidd6/[email protected]
env:
msg: ${{ env.reason != '' && env.reason || ' Rollout Kanvas Failure' }}
with:
server_address: smtp.gmail.com
server_port: 465
username: ${{ secrets.MAIL_USERNAME }}
password: ${{ secrets.MAIL_PASSWORD }}
subject: GitHub Actions - Rollout Kanvas Release Failure
from: |
"Meshery Extensions" <[email protected]>
to: |
"Layer5 Support" <[email protected]>
html_body: |
<b>REPO:</b> ${{ github.repository }}<br />
<b>WORKFLOW:</b> ${{ github.workflow }}<br />
<b>JOB:</b> ${{ github.job }}<br />
<b>REASON:</b> ${{ env.msg }}<br />
<b>DETAILS:</b> <a href="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}${{ job.status }}">${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}</a><br />