Skip to content

CI

CI #229

Workflow file for this run

name: CI
on:
push:
branches: main
pull_request:
branches: main
schedule:
- cron: '0 18 * * *' # 02:00 AM UTC+8
env:
CARGO_TERM_COLOR: always
GITHUB_ACTION_RUN_ID: ${{ github.run_id }}
GITHUB_ACTION_RUN_NUMBER: ${{ github.run_number }}
permissions:
contents: write
pull-requests: write
actions: write
jobs:
collect-data:
strategy:
fail-fast: false
matrix:
os:
- macos-latest
- ubuntu-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/[email protected]
with:
components: rustfmt, clippy
- name: Cargo cache
uses: actions/cache@v4
with:
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
path: ~/.cargo/registry
- name: install MoonBit(Unix)
if: ${{ matrix.os != 'windows-latest' }}
run: |
curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash
echo "$HOME/.moon/bin" >> $GITHUB_PATH
- name: install MoonBit(Windows)
if: ${{ matrix.os == 'windows-latest' }}
run: |
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser; irm https://cli.moonbitlang.com/install/powershell.ps1 | iex
"C:\Users\runneradmin\.moon\bin" | Out-File -FilePath $env:GITHUB_PATH -Append
- name: Version
run: moon version --all
- name: moon update
run: |
moon update
- name: Build
run: |
cargo build --release
env UPDATE_EXPECT=1 cargo test
./target/release/moon_dashboard stat --file repos.txt
- name: Upload data
uses: actions/upload-artifact@v4
with:
name: data-${{ matrix.os }}
path: |
${{ matrix.os == 'macos-latest' && './webapp/public/mac/latest_data.jsonl.gz' ||
matrix.os == 'windows-latest' && './webapp/public/windows/latest_data.jsonl.gz' ||
'./webapp/public/linux/latest_data.jsonl.gz' }}
if-no-files-found: error
- name: Commit(Unix)
if: ${{ matrix.os != 'windows-latest' }}
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git add ./webapp/public/*
git commit -m "Update data for ${{ matrix.os }} at $(date '+%Y-%m-%d %H:%M:%S')" || echo "No changes to commit"
git stash
- name: Commit(Windows)
if: ${{ matrix.os == 'windows-latest' }}
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git add ./webapp/public/*
git add ./repos.txt
git commit -m "Update data for ${{ matrix.os }} at $(date '+%Y-%m-%d %H:%M:%S')" || echo "No changes to commit"
- name: Push changes
shell: bash
run: |
max_attempts=3
attempt=1
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt of $max_attempts"
if git fetch && git pull --rebase && git push; then
echo "Push successful on attempt $attempt"
exit 0
else
echo "Push failed on attempt $attempt"
if [ $attempt -lt $max_attempts ]; then
echo "Retrying in 5 seconds..."
sleep 5
fi
fi
attempt=$((attempt + 1))
done
echo "Failed after $max_attempts attempts"
exit 1
deploy:
needs: collect-data
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Pull latest
run: git fetch && git pull --rebase
- name: Check commit
run: git log -5
- name: Setup Node.js 22
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install pnpm
run: npm install -g pnpm
- name: pnpm install
run: pnpm install
working-directory: ./webapp
- name: pnpm run build
run: |
pnpm run build
sed -i '' 's|="/assets|="/moon-build-dashboard/assets|g' ./dist/index.html
sed -i '' 's|"/linux/latest_data.jsonl.gz"|"/moon-build-dashboard/linux/latest_data.jsonl.gz"|g' ./dist/assets/*.js
sed -i '' 's|"/windows/latest_data.jsonl.gz"|"/moon-build-dashboard/windows/latest_data.jsonl.gz"|g' ./dist/assets/*.js
sed -i '' 's|"/mac/latest_data.jsonl.gz"|"/moon-build-dashboard/mac/latest_data.jsonl.gz"|g' ./dist/assets/*.js
working-directory: ./webapp
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: ./webapp/dist
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'
force_orphan: true