stages: - validate - build - deploy - benchmark - post_deploy - scripts .ssh_default: &ssh_default - 'which rsync || ( apk update && apk add rsync )' - 'which ssh-agent || ( apk update && apk add openssh-client)' - eval $(ssh-agent -s) - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "$SSH_PRIVATE_KEY" | tr -d '\r' >> ~/.ssh/key_firq - chmod 600 ~/.ssh/key_firq - echo "Host $DEPLOY_HOST" >> ~/.ssh/config - echo $'\n\tIdentityFile ~/.ssh/key_firq' >> ~/.ssh/config - echo $'\n\tStrictHostKeyChecking no\n\tIdentitiesOnly yes\n' >> ~/.ssh/config - chmod 644 ~/.ssh/config - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - echo "SSH setup completed" checking: image: node:lts stage: validate before_script: - npm install script: - echo "Running Astro checks" - npm run astro check build-site: image: node:lts stage: build when: on_success cache: paths: - node_modules/ script: - npm install - npm run build - rm -r public/assets/data/ - cp serve.json public artifacts: paths: - public expire_in: 1 day deploy-site: stage: deploy when: on_success only: - tags except: - branches before_script: - *ssh_default script: - echo "Getting artifacts" - ls public - echo "Stopping screen session, cleaning" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -X -S website-firq-npx kill; rm -r -f public/*;" - echo "Copying to proxmox machine" - rsync -az --stats public $DEPLOY_USER@$DEPLOY_HOST:~/. - echo "Restarting screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "find maintenance public -maxdepth 1 -printf '%p\n'; screen -S website-firq-npx -dm npx serve public/ -p 9000 -c serve.json" - echo "Website is up on https://firq.dev/" deploy-testing: stage: deploy when: on_success except: - tags - main before_script: - *ssh_default script: - echo "Getting artifacts" - ls public - echo "Stopping screen session, cleaning" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -X -S staging-firq-npx kill; rm -r -f staging/*;" - echo "Copying to proxmox machine" - rsync -az --stats public/* $DEPLOY_USER@$DEPLOY_HOST:~/staging - echo "Restarting screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "find staging -maxdepth 1 -printf '%p\n'; screen -S staging-firq-npx -dm npx serve staging/ -p 9100 -c serve.json" - echo "Staging environment is up!" unlighthouse: image: registry.gitlab.com/gitlab-ci-utils/lighthouse:latest stage: benchmark when: on_success except: - main - tags before_script: - npm install @unlighthouse/cli puppeteer - mkdir unlighthouse-reports script: - unlighthouse-ci --site staging.firq.dev --budget 75 --build-static --output-path ./unlighthouse-reports - cp public/serve.json unlighthouse-reports artifacts: paths: - unlighthouse-reports expire_in: 1 day unlighthouse-output: stage: post_deploy when: on_success except: - tags - main before_script: - *ssh_default script: - echo "Getting artifacts" - ls unlighthouse-reports - echo "Stopping screen session, cleaning" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -X -S unlighthouse-results kill; rm -r -f unlighthouse/*;" - echo "Copying to proxmox machine" - rsync -az --stats unlighthouse-reports/* $DEPLOY_USER@$DEPLOY_HOST:~/unlighthouse - echo "Restarting screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "find unlighthouse -maxdepth 1 -printf '%p\n'; screen -S unlighthouse -dm npx serve unlighthouse/ -p 9101 -c serve.json" - echo "Website is up on https://firq.dev/" success_notification: stage: post_deploy before_script: - apk update - apk add rsync - apk add curl - apk add git - apk add bash script: - wget https://raw.githubusercontent.com/DiscordHooks/gitlab-ci-discord-webhook/master/send.sh - chmod +x send.sh - ./send.sh success $WEBHOOK_URL when: on_success failure_notification: stage: post_deploy before_script: - apk update - apk add curl - apk add git - apk add bash script: - wget https://raw.githubusercontent.com/DiscordHooks/gitlab-ci-discord-webhook/master/send.sh - chmod +x send.sh - ./send.sh failure $WEBHOOK_URL when: on_failure maintenance-mode: stage: post_deploy when: on_failure before_script: - *ssh_default only: - tags - main script: - echo "Stopping screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -X -S website-firq-npx kill;" - echo "Enabeling maintenance mode" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -S website-firq-npx -dm npx serve maintenance/ -p 9000 -c serve.json" - echo "Maintenance Website is up on https://firq.dev/" redeploy-site: stage: scripts when: manual only: - tags except: - branches before_script: - *ssh_default script: - echo "Stopping screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -X -S website-firq-npx kill" || true - echo "Restarting screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -S website-firq-npx -dm npx serve public/ -p 9000 -c serve.json" - echo "Website is up on https://firq.dev/" redeploy-staging: stage: scripts when: manual except: - main - tags before_script: - *ssh_default script: - echo "Stopping screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -X -S staging-firq-npx kill" || true - echo "Restarting screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -S staging-firq-npx -dm npx serve staging/ -p 9100 -c serve.json" - echo "Staging environment is up!" redeploy-unlighthouse: stage: scripts when: manual except: - main - tags before_script: - *ssh_default script: - echo "Stopping screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -X -S unlighthouse-results kill" || true - echo "Restarting screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -S unlighthouse-results -dm npx serve unlighthouse/ -p 9101 -c serve.json" - echo "Staging environment is up!" maintenance-deploy: stage: scripts when: manual only: - main - tags before_script: - *ssh_default script: - echo "Stopping screen session" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -X -S website-firq-npx kill;" || true - echo "Enabeling maintenance mode" - ssh $DEPLOY_USER@$DEPLOY_HOST "screen -S website-firq-npx -dm npx serve maintenance/ -p 9000 -c serve.json" - echo "Maintenance Website is up on https://firq.dev/"