docs: use correct file format for astro icon #95
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |