Skip to content

Build Search Index #634

Build Search Index

Build Search Index #634

name: Build Search Index
on:
schedule:
# Run once a day
- cron: '10 0 * * *'
workflow_dispatch:
inputs:
noop:
description: 'noop'
required: false
default: 'noop'
jobs:
build:
runs-on: ubuntu-latest
outputs:
run_update: ${{ steps.date_check.outputs.run_update }}
steps:
- uses: actions/checkout@v1
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: 14
- name: Check commit date
id: date_check
run: |
chmod +x ./search-server/commit-date-check.sh
echo "$(./search-server/commit-date-check.sh)"
echo "run_update=$(./search-server/commit-date-check.sh)" >> $GITHUB_ENV
- name: GH script check
uses: actions/github-script@v2
id: check
with:
script: |
const { owner, repo } = context.repo
const update = ${{ env.run_update == 'update' }}
if (!update) {
console.log('Cancelling ...');
const run_id = "${{ github.run_id }}";
await github.actions.cancelWorkflowRun({ owner, repo, run_id });
return 'stop'
} else {
return 'build'
}
result-encoding: string
- name: Waiting for cancellation
run: sleep 60
if: steps.check.outputs.result == 'stop'
- name: Create search index
run: |
echo "TYPESENSE_API_KEY=${{ secrets.TYPESENSE_API_KEY }}" >> $GITHUB_ENV
export TYPESENSE_API_KEY=${{ secrets.TYPESENSE_API_KEY }}
mkdir -p ${GITHUB_WORKSPACE}/typesense-data
cp ./search-server/typesense-server/Dockerfile ${GITHUB_WORKSPACE}/typesense-data/Dockerfile
cp ./search-server/typesense-scraper/typesense-scraper-config.json typesense-scraper-config.json
envsubst < "./search-server/typesense-scraper/typesense-scraper.env" > "typesense-scraper-updated.env"
docker run -d -p 8108:8108 -v ${GITHUB_WORKSPACE}/typesense-data/data:/data typesense/typesense:0.21.0 --data-dir /data --api-key=${TYPESENSE_API_KEY} --enable-cors &
sleep 5
docker run -i --env-file typesense-scraper-updated.env -e "CONFIG=$(cat typesense-scraper-config.json | jq -r tostring)" typesense/docsearch-scraper
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":["*"]}'
- name: repository name fix
run: echo "image_repository_name=docs-search" >> $GITHUB_ENV
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Login to Amazon ECR
id: login_ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build and push to ECR
id: push_image_to_ecr
uses: docker/[email protected]
with:
file: ./typesense-data/Dockerfile
context: ./typesense-data/
push: true
tags: ${{ steps.login_ecr.outputs.registry }}/${{ env.image_repository_name }}:latest
deploy_ecs:
needs: build
runs-on: ubuntu-20.04
steps:
- name: checkout
uses: actions/checkout@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Login to Amazon ECR
id: login_ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Repository name fix and env values setup
run: |
echo "image_repository_name=docs-search" >> $GITHUB_ENV
echo "domain=search.docs.servicestack.net" >> $GITHUB_ENV
echo "letsencrypt_email=${{ secrets.LETSENCRYPT_EMAIL }}" >> $GITHUB_ENV
echo "app_name=servicestack-docs-search" >> $GITHUB_ENV
echo "cluster_name=default" >> $GITHUB_ENV
echo "image_url=${{ steps.login_ecr.outputs.registry }}/docs-search:latest" >> $GITHUB_ENV
echo "aws_region=${{ secrets.AWS_REGION }}" >> $GITHUB_ENV
echo "typesense_api_key=${{ secrets.TYPESENSE_API_KEY }}" >> $GITHUB_ENV
- name: Populate task definition template
uses: danielr1996/[email protected]
env:
RELEASE_VERSION: latest
APP_NAME: ${{ env.app_name }}
IMAGE_URL: ${{ env.image_url }}
HOST_DOMAIN: ${{ env.domain }}
TYPESENSE_API_KEY: ${{ env.typesense_api_key }}
LETSENCRYPT_EMAIL: ${{ env.letsencrypt_email }}
AWS_REGION: ${{ env.aws_region }}
CLUSTER_NAME: ${{ env.cluster_name }}
with:
input: search-server/typesense-server/typesense-task-def.json
output: task-definition.json
- name: Create task definition if doesn't exist
run: aws ecs describe-task-definition --task-definition ${{ env.app_name }} || aws ecs register-task-definition --cli-input-json file://task-definition.json
- name: Create ECS Service if not exists.
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
- name: Deploy new revision of the task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: task-definition.json
service: ${{ env.app_name }}
cluster: ${{ env.cluster_name }}
force-new-deployment: true