generated from lambda-feedback/Evaluation-Function-Boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 0
162 lines (144 loc) · 5.29 KB
/
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
name: Main deployment of Chatbot lambda function
on:
push:
branches: [main]
jobs:
test:
name: Staging deployment tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.11"]
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
OPENAI_MODEL: ${{ vars.OPENAI_MODEL }}
GOOGLE_AI_API_KEY: ${{ secrets.GOOGLE_AI_API_KEY }}
GOOGLE_AI_MODEL: ${{ vars.GOOGLE_AI_MODEL }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
id: python-setup
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
# - name: Load cached venv
# id: dependencies-cache
# uses: actions/cache@v3
# with:
# path: .venv
# key: venv-${{ runner.os }}-${{ steps.python-setup.outputs.python-version }}
- name: Create Venv if Cache not found
# if: steps.dependencies-cache.outputs.cache-hit != 'true'
run: |
python -m venv .venv
- name: Install dependencies
# if: steps.dependencies-cache.outputs.cache-hit != 'true'
run: |
pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
if: always()
run: |
source .venv/bin/activate
pytest --junit-xml=./reports/pytest.xml --tb=auto -v
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: ./reports/pytest.xml
if-no-files-found: warn
staging_job:
name: Staging deployment of Chatbot Module to lambda function
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.LAMBDA_CONTAINER_PIPELINE_AWS_ID }}
aws-secret-access-key: ${{ secrets.LAMBDA_CONTAINER_PIPELINE_AWS_SECRET }}
aws-region: eu-west-2
- name: Login to Amazon ECR
id: login-pf-aws-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Build and push the tagged docker image to Amazon ECR
id: build-custom-image
env:
ECR_REGISTRY: ${{ steps.login-pf-aws-ecr.outputs.registry }}
ECR_REPOSITORY: lambda-feedback-staging-chat
IMAGE_TAG: latest
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
- name: Update aws custom lambda function code
env:
ECR_REGISTRY: ${{ steps.login-pf-aws-ecr.outputs.registry }}
ECR_REPOSITORY: lambda-feedback-staging-chat
IMAGE_TAG: latest
run: |
aws lambda update-function-code \
--function-name lambda-feedback-staging-chat \
--image-uri $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
approval_job:
needs: staging_job
name: Waiting for approval
runs-on: ubuntu-latest
steps:
- name: Generate token
id: generate_token
uses: tibdex/github-app-token@v1
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_SECRET }}
- name: Approve Production Deployment
uses: trstringer/manual-approval@v1
with:
approvers: neagualexa
# approvers: approvers
minimum-approvals: 1
timeout-minutes: 10
secret: ${{ steps.generate_token.outputs.token }}
issue-title: Approve Production Deployment
issue-body: Approve production deployment for the Chatbot Module
exclude-workflow-initiator-as-approver: false
additional-approved-words: "fine, go, approved"
additional-denied-words: "deny, stop"
prod_job:
needs: approval_job
name: Prod deployment of Chatbot Module to lambda function
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.LAMBDA_CONTAINER_PIPELINE_AWS_ID }}
aws-secret-access-key: ${{ secrets.LAMBDA_CONTAINER_PIPELINE_AWS_SECRET }}
aws-region: eu-west-2
- name: Login to Amazon ECR
id: login-pf-aws-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Build and push the tagged docker image to Amazon ECR
id: build-custom-image
env:
ECR_REGISTRY: ${{ steps.login-pf-aws-ecr.outputs.registry }}
ECR_REPOSITORY: lambda-feedback-prod-chat
IMAGE_TAG: latest
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
- name: Update aws custom lambda function code
env:
ECR_REGISTRY: ${{ steps.login-pf-aws-ecr.outputs.registry }}
ECR_REPOSITORY: lambda-feedback-prod-chat
IMAGE_TAG: latest
run: |
aws lambda update-function-code \
--function-name lambda-feedback-prod-chat \
--image-uri $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG