Skip to content

docs: add astro to planned #94

docs: add astro to planned

docs: add astro to planned #94

Workflow file for this run

name: CI
on:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.sha }}
cancel-in-progress: true
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
cache: 'npm'
- name: Update npm version
run: npm update npm -g
- name: Install dependencies
run: npm ci
- name: Run linting
run: npm run lint
- name: Validate current commit (last commit) with commitlint
if: github.event_name == 'push'
run: npx commitlint --from HEAD~1 --to HEAD --verbose
- name: Validate PR commits with commitlint
if: github.event_name == 'pull_request'
run: npx commitlint --from ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} --to ${{ github.event.pull_request.head.sha }} --verbose
svelte-check:
name: Svelte check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
cache: 'npm'
- name: Update npm version
run: npm update npm -g
- name: Install dependencies
run: npm ci
- name: Run Svelte check
run: npm run check
test:
name: Playwright test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
cache: 'npm'
- name: Update npm version
run: npm update npm -g
- name: Install dependencies
run: npm ci
- name: Install Playwright dependencies
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npm run test
check-deploy:
name: Check if deploy is needed
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
outputs:
deployNext: ${{ steps.checkCommitMessagesForNextChanges.outputs.deployNext }}
permissions: read-all
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get last workflow run SHA
id: lastWorkflowRun
run: |
export SHA=$(gh run list --json headSha | jq -r '.[1].headSha')
echo "lastWorkflowRunSha=$SHA" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ github.token }}
- name: Check commit messages for Next changes
id: checkCommitMessagesForNextChanges
run: |
if git log --pretty=format:"%s" ${{ steps.lastWorkflowRun.outputs.lastWorkflowRunSha }}..HEAD | grep -q -E '\(next\):|^feat:|^fix:|^ci:|^refactor:|^chore:'; then
echo "Commit messages since last deploy contain a repo wide or Next change"
echo "deployNext=true" >> "$GITHUB_OUTPUT"
else
echo "Commit messages since last deploy do not contain a repo wide or Next change"
echo "deployNext=false" >> "$GITHUB_OUTPUT"
fi
changes-since-last-deploy:
name: Compare changes since last deploy
runs-on: ubuntu-latest
needs: [lint, svelte-check, test, check-deploy]
if: ${{ needs.check-deploy.outputs.deployNext == 'true' }}
environment:
name: github
url: ${{steps.changes.outputs.url}}
permissions: read-all
steps:
- uses: actions/checkout@v4
- name: Changes since last deploy
id: changes
run: |
export SHA=$(gh run list --json databaseId | jq -r ".[] | .databaseId" | while read -r run_id; do gh run view $run_id --json jobs,headSha | jq -r '. | select(.jobs[] | .name == "Deploy to production" and .status == "completed" and .conclusion == "success") | .headSha' | grep . && break; done | head -n 1)
echo "url=https://github.com/${{ github.repository }}/compare/$SHA...${{ github.sha }}" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ github.token }}
deploy-production:
name: Deploy to production
runs-on: ubuntu-latest
needs: [changes-since-last-deploy]
if: github.ref == 'refs/heads/main'
environment:
name: production
url: https://epoxide.se
concurrency:
group: production
cancel-in-progress: true
env:
DEPLOY_DIRECTORY: ${{ secrets.DEPLOY_DIRECTORY }}
DEPLOY_NVM_DIRECTORY: ${{ secrets.DEPLOY_NVM_DIRECTORY }}
steps:
- name: Configure SSH
env:
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
run: |
mkdir -p ~/.ssh
echo "$DEPLOY_KEY" > ~/.ssh/deploy
chmod 600 ~/.ssh/deploy
cat >>~/.ssh/config <<END
Host production
HostName $DEPLOY_HOST
User $DEPLOY_USER
IdentityFile ~/.ssh/deploy
StrictHostKeyChecking no
END
- name: Pull latest
run: ssh production "cd $DEPLOY_DIRECTORY && git checkout . && git pull"
- name: Install dependencies
run: ssh production "cd $DEPLOY_DIRECTORY && . $DEPLOY_NVM_DIRECTORY/nvm.sh --no-use && nvm use && npm install"
- name: Build
run: ssh production "cd $DEPLOY_DIRECTORY && . $DEPLOY_NVM_DIRECTORY/nvm.sh --no-use && nvm use && npm run build"
- name: Restart server
run: ssh production "cd $DEPLOY_DIRECTORY && . $DEPLOY_NVM_DIRECTORY/nvm.sh --no-use && nvm use && pm2 restart npm -- start"