name: Memind CI on: push: branches: - main pull_request: branches: - main workflow_dispatch: permissions: contents: read concurrency: group: memind-ci-${{ gitea.ref }} cancel-in-progress: true jobs: verify: name: Test, build, and release guards runs-on: ubuntu-latest timeout-minutes: 30 steps: - name: Check out exact commit run: | git init . git remote add origin https://git.tkmind.cn/tkmind/memind.git git fetch --depth=2 origin "${{ gitea.sha }}" git checkout --detach FETCH_HEAD test "$(git rev-parse HEAD)" = "${{ gitea.sha }}" - name: Install system test dependencies run: | apt-get update apt-get install --yes --no-install-recommends sqlite3 rm -rf /var/lib/apt/lists/* - name: Install locked dependencies run: | npm ci --include=optional SHARP_ARM64_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/@img/sharp-linux-arm64'].version")" LIBVIPS_ARM64_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/@img/sharp-libvips-linux-arm64'].version")" if [[ ! -d node_modules/@img/sharp-linux-arm64 || ! -d node_modules/@img/sharp-libvips-linux-arm64 ]]; then npm install --no-save --package-lock=false \ "@img/sharp-linux-arm64@${SHARP_ARM64_VERSION}" \ "@img/sharp-libvips-linux-arm64@${LIBVIPS_ARM64_VERSION}" else echo "Locked Sharp ARM64 optional packages are already installed" fi node -e "import('sharp').then((sharp) => sharp.default({ create: { width: 1, height: 1, channels: 4, background: '#000' } }).png().toBuffer())" - name: Check patch formatting run: git diff --check HEAD^ - name: Run full test suite run: npm test - name: Build production frontend run: npm run build - name: Verify MindSpace publish guards run: npm run verify:mindspace-publish-guards - name: Verify MindSpace page sync guards run: npm run verify:mindspace-page-sync-guards - name: Verify Page Data delivery run: npm run verify:page-data - name: Check published download links run: npm run check:mindspace-public-links