11name : Build Search Index
2-
2+ permissions :
3+ packages : write
4+ contents : write
35on :
46 schedule :
57 # Run once a day
68 - cron : ' 10 0 * * *'
79 workflow_dispatch :
10+ inputs :
11+ noop :
12+ description : ' noop'
13+ required : false
14+ default : ' noop'
815
916jobs :
1017 build :
@@ -59,83 +66,70 @@ jobs:
5966 docker run -i --env-file typesense-scraper-updated.env -e "CONFIG=$(cat typesense-scraper-config.json | jq -r tostring)" typesense/docsearch-scraper
6067 curl 'http://172.17.0.2:8108/keys' -X POST -H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}" -H 'Content-Type: application/json' -d '{"value": "N4N8bF0XwyvzwCGwm3CKB0QcnwyWtygo","description": "Search only","actions": ["documents:search"],"collections":["*"]}'
6168
62- - name : repository name fix
63- run : echo "image_repository_name=reference-search" >> $GITHUB_ENV
69+ - name : repository name fix and env
70+ run : |
71+ echo "letsencrypt_email=${{ secrets.LETSENCRYPT_EMAIL }}" >> $GITHUB_ENV
72+ echo "TAG_NAME=latest" >> $GITHUB_ENV
73+ if [ "${{ github.event.release.tag_name }}" != "" ]; then
74+ echo "TAG_NAME=${{ github.event.release.tag_name }}" >> $GITHUB_ENV
75+ fi;
76+ if [ "${{ github.event.inputs.version }}" != "" ]; then
77+ echo "TAG_NAME=${{ github.event.inputs.version }}" >> $GITHUB_ENV
78+ fi;
79+ echo "image_repository_name=servicestack/reference-search" >> $GITHUB_ENV
80+ echo "domain=search.reference.servicestack.net" >> $GITHUB_ENV
81+ echo "letsencrypt_email=${{ secrets.LETSENCRYPT_EMAIL }}" >> $GITHUB_ENV
82+ echo "app_name=servicestack-reference-search" >> $GITHUB_ENV
83+ echo "typesense_api_key=${{ secrets.TYPESENSE_API_KEY }}" >> $GITHUB_ENV
6484
65- - name : Configure AWS credentials
66- uses : aws-actions/configure-aws-credentials@v1
85+ - name : Write .env file
86+ run : |
87+ echo "HOST_DOMAIN=${{ env.domain }}" > .env
88+ echo "LETSENCRYPT_EMAIL=${{ env.letsencrypt_email }}" >> .env
89+ echo "TYPESENSE_API_KEY=${{ env.typesense_api_key }}" >> .env
90+ cp search-server/typesense-server/docker-compose.yml ./
91+
92+ - name : Login to GitHub Container Registry
93+ uses : docker/login-action@v2
6794 with :
68- aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
69- aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
70- aws-region : ${{ secrets.AWS_REGION }}
71-
72- - name : Login to Amazon ECR
73- id : login_ecr
74- uses : aws-actions/amazon-ecr-login@v1
75-
76- - name : Build and push to ECR
77- id : push_image_to_ecr
78- uses : docker/build-push-action@v2.2.2
95+ registry : ghcr.io
96+ username : ${{ github.actor }}
97+ password : ${{ secrets.GITHUB_TOKEN }}
98+
99+ - name : Build and push Docker images
100+ uses : docker/build-push-action@v3
101+ if : ${{ github.event.inputs.version == '' || github.event.inputs.version == 'latest' }}
79102 with :
80103 file : ./typesense-data/Dockerfile
81104 context : ./typesense-data/
82105 push : true
83- tags : ${{ steps.login_ecr.outputs.registry }}/${{ env.image_repository_name }}:latest
84-
85- deploy_ecs :
86- needs : build
87- runs-on : ubuntu-20.04
88- steps :
89- - name : checkout
90- uses : actions/checkout@v2
91-
92- - name : Configure AWS credentials
93- uses : aws-actions/configure-aws-credentials@v1
106+ tags : ghcr.io/${{ env.image_repository_name }}:${{ env.TAG_NAME }}
107+
108+ # Copy only the docker-compose.yml to remote server home folder
109+ - name : copy compose file via scp
110+ uses : appleboy/scp-action@v0.1.3
94111 with :
95- aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
96- aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
97- aws-region : ${{ secrets.AWS_REGION }}
98-
99- - name : Login to Amazon ECR
100- id : login_ecr
101- uses : aws-actions/amazon-ecr-login@v1
102-
103- - name : Repository name fix and env values setup
104- run : |
105- echo "image_repository_name=reference-search" >> $GITHUB_ENV
106- echo "domain=search.reference.servicestack.net" >> $GITHUB_ENV
107- echo "letsencrypt_email=${{ secrets.LETSENCRYPT_EMAIL }}" >> $GITHUB_ENV
108- echo "app_name=servicestack-reference-search" >> $GITHUB_ENV
109- echo "cluster_name=default" >> $GITHUB_ENV
110- echo "image_url=${{ steps.login_ecr.outputs.registry }}/reference-search:latest" >> $GITHUB_ENV
111- echo "aws_region=${{ secrets.AWS_REGION }}" >> $GITHUB_ENV
112- echo "typesense_api_key=${{ secrets.TYPESENSE_API_KEY }}" >> $GITHUB_ENV
113-
114- - name : Populate task definition template
115- uses : danielr1996/envsubst-action@1.0.0
112+ host : 52.201.116.245
113+ username : ${{ secrets.DEPLOY_USERNAME }}
114+ port : 22
115+ key : ${{ secrets.DEPLOY_KEY }}
116+ source : " docker-compose.yml,.env"
117+ target : " ~/.deploy/reference-typesense"
118+
119+ # Deploy Docker image with ServiceStack application using `docker compose up` remotely
120+ - name : remote docker-compose up via ssh
121+ uses : appleboy/ssh-action@v0.1.5
116122 env :
117- RELEASE_VERSION : latest
118- APP_NAME : ${{ env.app_name }}
119- IMAGE_URL : ${{ env.image_url }}
120- HOST_DOMAIN : ${{ env.domain }}
121- TYPESENSE_API_KEY : ${{ env.typesense_api_key }}
122- LETSENCRYPT_EMAIL : ${{ env.letsencrypt_email }}
123- AWS_REGION : ${{ env.aws_region }}
124- CLUSTER_NAME : ${{ env.cluster_name }}
125- with :
126- input : search-server/typesense-server/typesense-task-def.json
127- output : task-definition.json
128-
129- - name : Create task definition if doesn't exist
130- run : aws ecs describe-task-definition --task-definition ${{ env.app_name }} || aws ecs register-task-definition --cli-input-json file://task-definition.json
131-
132- - name : Create ECS Service if not exists.
133- run : aws ecs describe-services --cluster ${{ env.cluster_name }} --services ${{ env.app_name }} | jq '.services[0]' -e || aws ecs create-service --cluster ${{ env.cluster_name }} --service-name ${{ env.app_name }} --task-definition ${{ env.app_name }} --desired-count 1
134-
135- - name : Deploy new revision of the task definition
136- uses : aws-actions/amazon-ecs-deploy-task-definition@v1
123+ APPTOKEN : ${{ secrets.GITHUB_TOKEN }}
124+ USERNAME : ${{ secrets.DEPLOY_USERNAME }}
137125 with :
138- task-definition : task-definition.json
139- service : ${{ env.app_name }}
140- cluster : ${{ env.cluster_name }}
141- force-new-deployment : true
126+ host : 52.201.116.245
127+ username : ${{ secrets.DEPLOY_USERNAME }}
128+ key : ${{ secrets.DEPLOY_KEY }}
129+ port : 22
130+ envs : APPTOKEN,USERNAME
131+ script : |
132+ echo $APPTOKEN | docker login ghcr.io -u $USERNAME --password-stdin
133+ cd ~/.deploy/reference-typesense
134+ docker-compose pull
135+ docker-compose up -d
0 commit comments