-
Notifications
You must be signed in to change notification settings - Fork 0
136 lines (123 loc) · 5.61 KB
/
back-dockerPush.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
name: "[BACK] Docker push"
run-name: "[BACK] DockerPush : ${{ github.actor }} push '${{ github.event.head_commit.message }}' 🚀"
on:
push:
paths:
- back_node/**
jobs:
Check:
runs-on: ubuntu-latest
outputs:
RUN_BUILD: ${{ steps.define_docker_data.outputs.run_build }}
VERSION: ${{ steps.define_docker_data.outputs.version }}
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Check if version already exist
id: define_docker_data
run: |
json_content=$(cat back_node/package.json)
version=$(echo "$json_content" | jq -r '.version')
echo "Target version : $version"
if [[ $(docker manifest inspect ${{ vars.DOCKERHUB_USERNAME }}/karassistant-back:$version 2> /dev/null) != "" ]]; then
echo -e "\e[31mVersion $version already exist"
echo "Version $version already exist" >> $GITHUB_STEP_SUMMARY
else
echo "Build image version $version" >> $GITHUB_STEP_SUMMARY
echo -e "\e[32mBuild image version $version"
echo "run_build=yes" >> "$GITHUB_OUTPUT"
echo "version=$version" >> "$GITHUB_OUTPUT"
fi
Tests:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install dependencies
working-directory: ./back_node
run: |
npm install
- name: Run tests and create summary
id: tests
continue-on-error: true
working-directory: ./back_node
run: |
export NODE_OPTIONS=--no-experimental-fetch && npm test 2>> /tmp/results.txt >> /tmp/coverage0.txt
- name: Prepare data
id: data
run: |
awk 'NR>5' /tmp/coverage0.txt > /tmp/coverage1.txt
echo "embeds=[{\"type\":\"rich\",\"title\":\"$(grep -q "failed" /tmp/results.txt && echo "❌ Errors with the test [BACK]" || echo "✅ All test are checked [BACK]")\",\"description\":\"**Test back result:**\n$(tail -n 5 /tmp/results.txt | tr '\n' "&" | sed 's/&/\\n/g')\n**Coverage :**\",\"color\":$(grep -q "failed" /tmp/results.txt && echo 16525609 || echo 38912),\"fields\":[{\"name\":\"**Statements**\",\"value\":\"$(grep 'All files' /tmp/coverage0.txt | cut -d '|' -f 2 | tr -d ' ')%\",\"inline\":true},{\"name\":\"**Branches**\",\"value\":\"$(grep 'All files' /tmp/coverage0.txt | cut -d '|' -f 3 | tr -d ' ')%\",\"inline\":true},{\"name\":\"**Functions**\",\"value\":\"$(grep 'All files' /tmp/coverage0.txt | cut -d '|' -f 4 | tr -d ' ')%\",\"inline\":true},{\"name\":\"**Lines**\",\"value\":\"$(grep 'All files' /tmp/coverage0.txt | cut -d '|' -f 5 | tr -d ' ')%\",\"inline\":true}]}]" >> "$GITHUB_OUTPUT"
- name: ERROR Send coverage to discord
uses: Ilshidur/action-discord@master
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
DISCORD_USERNAME: GitHub
DISCORD_AVATAR: https://cdn.discordapp.com/avatars/1138225091528904714/df91181b3f1cf0ef1592fbe18e0962d7.webp?size=100
DISCORD_EMBEDS: ${{ steps.data.outputs.embeds }}
- name: Echo errors
if: steps.tests.outcome == 'failure'
run: |
sed '$ d' /tmp/coverage1.txt > $GITHUB_STEP_SUMMARY
echo -e "\n" >> $GITHUB_STEP_SUMMARY
cat /tmp/results.txt >> $GITHUB_STEP_SUMMARY
echo -e "\n" >> $GITHUB_STEP_SUMMARY
echo "❌ Errors with the test" >> $GITHUB_STEP_SUMMARY
exit 1
- name: Echo success
if: steps.tests.outcome == 'success'
run: |
echo -e "\n" >> $GITHUB_STEP_SUMMARY
sed '$ d' /tmp/coverage1.txt > $GITHUB_STEP_SUMMARY
cat /tmp/results.txt >> $GITHUB_STEP_SUMMARY
echo -e "\n" >> $GITHUB_STEP_SUMMARY
echo "✅ All test are checked" >> $GITHUB_STEP_SUMMARY
Build_Push:
runs-on: ubuntu-latest
permissions: write-all
needs:
- Check
- Tests
if: ${{ needs.Check.outputs.RUN_BUILD == 'yes' && needs.Tests.result == 'success' }}
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Echo version
env:
version: ${{ needs.Check.outputs.version }}
run: echo "Build image ${{ vars.DOCKERHUB_USERNAME }}/karassistant-back:$version"
- name: Build and push (tagged version)
uses: docker/build-push-action@v4
with:
context: .
file: ./back_node/Dockerfile
push: true
tags: "${{ vars.DOCKERHUB_USERNAME }}/karassistant-back:${{ needs.Check.outputs.version }}"
build-args: project_path=back_node
- name: Build and push (latest version)
uses: docker/build-push-action@v4
with:
context: .
file: ./back_node/Dockerfile
push: true
tags: "${{ vars.DOCKERHUB_USERNAME }}/karassistant-back:latest"
build-args: project_path=back_node
- name: Create tag
uses: rickstaa/action-create-tag@v1
with:
tag: "back-${{ needs.Check.outputs.version }}"
- name: Create summury
run: |
echo "image build 'karassistant-back:${{ needs.Check.outputs.version }}' succeed" >> $GITHUB_STEP_SUMMARY