ai-research-survey

Systematic scan of agentic development research. What's signal, what's noise.
git clone https://git.shiptheloop.com/ai-research-survey.git
Log | Files | Refs

deploy.yml (4307B)


      1 name: Deploy data explorer
      2 on:
      3   push:
      4     branches: [main]
      5     paths:
      6       - 'explorer/**'
      7       - 'scripts/build-explorer-data.py'
      8       - 'papers/*/scan.json'
      9       - 'papers/*/scan-v5.json'
     10       - 'registry.jsonl'
     11       - '.forgejo/workflows/deploy.yml'
     12 
     13 jobs:
     14   deploy:
     15     runs-on: ubuntu-latest
     16     env:
     17       SITE_NAME: ai-research-survey
     18       SITE_BASE: /var/www/research
     19     steps:
     20       - uses: actions/checkout@v3
     21 
     22       - name: Setup Node
     23         uses: actions/setup-node@v4
     24         with:
     25           node-version: '20'
     26           cache: 'npm'
     27           cache-dependency-path: explorer/package-lock.json
     28 
     29       - name: Install system dependencies
     30         run: |
     31           apt-get update && apt-get install -y rsync apache2-utils
     32 
     33       - name: Build explorer data
     34         run: python3 scripts/build-explorer-data.py
     35 
     36       - name: Install npm dependencies
     37         run: cd explorer && npm ci
     38 
     39       - name: Build site
     40         run: cd explorer && npm run build
     41 
     42       - name: Generate htpasswd
     43         if: ${{ secrets.AUTH_USERNAME != '' && secrets.AUTH_PASSWORD != '' }}
     44         run: |
     45           htpasswd -cb ./explorer/dist/.htpasswd "${{ secrets.AUTH_USERNAME }}" "${{ secrets.AUTH_PASSWORD }}"
     46 
     47       - name: Ensure site structure exists
     48         uses: https://github.com/appleboy/ssh-action@v1.2.0
     49         with:
     50           host: ${{ secrets.HOST }}
     51           username: ${{ secrets.USERNAME }}
     52           key: ${{ secrets.SSH_KEY }}
     53           envs: SITE_NAME,SITE_BASE
     54           script: |
     55             BASE="${SITE_BASE}/${SITE_NAME}"
     56             if [ ! -d "$BASE" ]; then
     57               echo "First deploy -- initializing $SITE_NAME"
     58               mkdir -p "$BASE/blue" "$BASE/green"
     59               ln -sfn "$BASE/blue" "$BASE/current"
     60             else
     61               echo "Site structure already exists"
     62             fi
     63 
     64       - name: Deploy files
     65         run: |
     66           echo "${{ secrets.SSH_KEY }}" > /tmp/deploy_key
     67           chmod 600 /tmp/deploy_key
     68 
     69           TARGET=$(ssh -i /tmp/deploy_key -o StrictHostKeyChecking=no \
     70             ${{ secrets.USERNAME }}@${{ secrets.HOST }} \
     71             "if [ \"\$(readlink ${SITE_BASE}/${SITE_NAME}/current)\" = \"${SITE_BASE}/${SITE_NAME}/blue\" ]; then echo green; else echo blue; fi")
     72 
     73           echo "Deploying to $TARGET"
     74 
     75           rsync -av --delete \
     76             -e "ssh -i /tmp/deploy_key -o StrictHostKeyChecking=no" \
     77             ./explorer/dist/ ${{ secrets.USERNAME }}@${{ secrets.HOST }}:${SITE_BASE}/${SITE_NAME}/$TARGET/
     78 
     79           rm /tmp/deploy_key
     80 
     81       - name: Switch symlink
     82         uses: https://github.com/appleboy/ssh-action@v1.2.0
     83         with:
     84           host: ${{ secrets.HOST }}
     85           username: ${{ secrets.USERNAME }}
     86           key: ${{ secrets.SSH_KEY }}
     87           envs: SITE_NAME,SITE_BASE
     88           script: |
     89             BASE="${SITE_BASE}/${SITE_NAME}"
     90             if [ "$(readlink $BASE/current)" = "$BASE/blue" ]; then
     91               NEW=green
     92             else
     93               NEW=blue
     94             fi
     95             ln -sfn "$BASE/$NEW" "$BASE/current"
     96             systemctl reload nginx
     97             echo "Switched $SITE_NAME to $NEW"
     98 
     99       - name: Smoke test
    100         run: |
    101           sleep 2
    102           if [ -n "${{ secrets.AUTH_USERNAME }}" ] && [ -n "${{ secrets.AUTH_PASSWORD }}" ]; then
    103             curl -f -u "${{ secrets.AUTH_USERNAME }}:${{ secrets.AUTH_PASSWORD }}" https://${SITE_NAME}.research.statagroup.com/ || exit 1
    104           else
    105             curl -f https://${SITE_NAME}.research.statagroup.com/ || exit 1
    106           fi
    107 
    108       - name: Rollback on failure
    109         if: failure()
    110         uses: https://github.com/appleboy/ssh-action@v1.2.0
    111         with:
    112           host: ${{ secrets.HOST }}
    113           username: ${{ secrets.USERNAME }}
    114           key: ${{ secrets.SSH_KEY }}
    115           envs: SITE_NAME,SITE_BASE
    116           script: |
    117             BASE="${SITE_BASE}/${SITE_NAME}"
    118             if [ -L "$BASE/current" ]; then
    119               if [ "$(readlink $BASE/current)" = "$BASE/blue" ]; then
    120                 OLD=green
    121               else
    122                 OLD=blue
    123               fi
    124               ln -sfn "$BASE/$OLD" "$BASE/current"
    125               systemctl reload nginx
    126               echo "Rolled back $SITE_NAME to $OLD"
    127             else
    128               echo "No previous deployment to roll back to"
    129             fi

Impressum · Datenschutz