-
Notifications
You must be signed in to change notification settings - Fork 6
113 lines (104 loc) · 4.36 KB
/
frontend_dev.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
name: build_and_deploy_fe_service
on:
push:
branches: [develop]
paths:
- frontend/**
- smartcontract/**
- .github/workflows/frontend_dev.yml
env:
SERVICE_NAME: "rada-charity"
DOCKER_USERNAME: "cohostai"
CONTAINER_SERVICE_NAME: "rada-charity"
WORKING_DIRECTORY: "./frontend"
jobs:
build-service:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: "14.17"
- name: Build vars
id: vars
run: |
echo "::set-output name=image::${{ env.DOCKER_USERNAME }}/${{ env.SERVICE_NAME }}:$GITHUB_SHA"
echo "::set-output name=latest::${{ env.DOCKER_USERNAME }}/${{ env.SERVICE_NAME }}:latest"
- name: Build Docker image
working-directory: ${{ env.WORKING_DIRECTORY }}
env:
REACT_APP_GRAPHQL_URL: ${{ secrets.REACT_APP_GRAPHQL_URL }}
REACT_APP_REST_URL: ${{ secrets.REACT_APP_REST_URL }}
run: docker build -t ${{ steps.vars.outputs.latest }} --build-arg REACT_APP_GRAPHQL_URL=${{ env.REACT_APP_GRAPHQL_URL }} --build-arg REACT_APP_REST_URL=${{ env.REACT_APP_REST_URL }} .
- name: Login to DockerHub
run: |
echo "Authenticating docker.io"
echo ${{ secrets.DOCKER_AUTH_TOKEN }} | docker login --username=${{ env.DOCKER_USERNAME }} --password-stdin
- name: Push to DockerHub
run: |
docker push ${{ steps.vars.outputs.latest }}
outputs:
image: ${{ steps.vars.outputs.image }}
latest: ${{ steps.vars.outputs.latest }}
deploy-service-production:
needs: [build-service]
runs-on: ubuntu-latest
steps:
- name: prereqs
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: "ap-southeast-1"
run: |
aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set default.region $AWS_DEFAULT_REGION
aws configure set region $AWS_DEFAULT_REGION
cat ~/.aws/credentials
- name: Install essentials
run: |
aws --version
# install LightsailCTL Plugin (https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-install-software)
sudo apt-get update && sudo apt-get -y install curl jq
curl https://s3.us-west-2.amazonaws.com/lightsailctl/latest/linux-amd64/lightsailctl -o /usr/local/bin/lightsailctl
chmod +x /usr/local/bin/lightsailctl
- name: Release to Amazon Lightsail
env:
CONTAINER_SERVICE_NAME: ${{ env.CONTAINER_SERVICE_NAME }}
SERVICE_NAME: ${{ env.SERVICE_NAME }}
REACT_APP_GRAPHQL_URL: ${{ secrets.REACT_APP_GRAPHQL_URL }}
run: |
echo "Releasing to Amazon Lightsail"
docker info
echo ${{ secrets.DOCKER_AUTH_TOKEN }} | docker login --username=${{ env.DOCKER_USERNAME }} --password-stdin
docker pull ${{ needs.build-service.outputs.latest }}
# upload the docker image for this pipeline
aws lightsail push-container-image \
--service-name $CONTAINER_SERVICE_NAME \
--label ${{ env.SERVICE_NAME }}-latest \
--image ${{ needs.build-service.outputs.latest }}
# get uploaded image (its different every time)
IMAGE_TAG=$(aws lightsail get-container-images --service $CONTAINER_SERVICE_NAME | jq -r .containerImages[0].image)
# create a deployment with uploaded docker image
aws lightsail create-container-service-deployment \
--service-name $CONTAINER_SERVICE_NAME \
--containers "{
\"$CONTAINER_SERVICE_NAME\": {
\"image\": \"$IMAGE_TAG\",
\"environment\": {
\"NODE_ENV\": \"production\",
\"REACT_APP_GRAPHQL_URL\": \"$REACT_APP_GRAPHQL_URL\"
},
\"ports\": {
\"80\": \"HTTP\"
}
}
}" \
--public-endpoint "{
\"containerName\": \"$CONTAINER_SERVICE_NAME\",
\"containerPort\": 80,
\"healthCheck\": {
\"path\": \"/\",
\"intervalSeconds\": 10
}
}"