summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqaqland <[email protected]>2025-12-29 11:19:57 +0800
committerruki <[email protected]>2026-01-04 23:17:29 +0800
commit1778ae8fd0a3d09018525cc90d8440e79f976477 (patch)
tree10cb748e3d6f4649ebdde467b2b0641c2f33a67b
parent5631b98caa40ad06994f983a7c2a500be4b0e2b2 (diff)
add alpine
-rw-r--r--.github/workflows/alpine.yml91
1 files changed, 91 insertions, 0 deletions
diff --git a/.github/workflows/alpine.yml b/.github/workflows/alpine.yml
new file mode 100644
index 000000000..8583d1bfb
--- /dev/null
+++ b/.github/workflows/alpine.yml
@@ -0,0 +1,91 @@
+name: Alpine
+
+on:
+ pull_request:
+ push:
+ release:
+ types: [published]
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ outputs:
+ should-run: ${{ steps.check.outputs.should-run }}
+ steps:
+ - name: Random execution check
+ id: check
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const fs = require('fs');
+ const outputFile = process.env.GITHUB_OUTPUT;
+
+ // Always run for release events
+ if (context.eventName === 'release') {
+ fs.appendFileSync(outputFile, `should-run=true\n`);
+ core.info('Release event detected. Will run tests.');
+ return;
+ }
+
+ // Execution probability (default 20%, can be overridden via env)
+ const probability = parseFloat(process.env.RUN_PROBABILITY || '0.2');
+
+ // Generate deterministic "random" number based on commit SHA, run ID, and current time
+ // Adding time ensures better randomness while keeping same commit/run consistent
+ const timeSeed = Math.floor(Date.now() / (1000 * 60 * 60)); // Round to hour for consistency
+ const seed = context.sha + context.runId + timeSeed;
+ let hash = 0;
+ for (let i = 0; i < seed.length; i++) {
+ const char = seed.charCodeAt(i);
+ hash = ((hash << 5) - hash) + char;
+ hash = hash | 0; // Convert to 32-bit integer
+ }
+ // Normalize to 0-1 range
+ const random = Math.abs(hash) / 2147483647;
+ const shouldRun = random < probability;
+
+ // Use environment file instead of deprecated set-output
+ fs.appendFileSync(outputFile, `should-run=${shouldRun}\n`);
+ if (shouldRun) {
+ core.info(`Random check passed (${(random * 100).toFixed(2)}% < ${(probability * 100).toFixed(0)}%). Will run tests.`);
+ } else {
+ core.info(`Random check failed (${(random * 100).toFixed(2)}% >= ${(probability * 100).toFixed(0)}%). Skipping.`);
+ }
+ env:
+ RUN_PROBABILITY: ${{ vars.ALPINE_RUN_PROBABILITY || '0.2' }}
+
+ build:
+ needs: check
+ if: needs.check.outputs.should-run == 'true'
+
+ container: alpine:latest
+ runs-on: ubuntu-latest
+
+ concurrency:
+ # Prevent concurrent runs of the same workflow
+ group: Alpine-${{ github.event.repository.owner.login }}-${{ github.event.repository.name }}
+ cancel-in-progress: false
+ steps:
+ - name: Prepare build tools
+ run: |
+ uname -a
+ apk --no-cache add grep linux-headers bash curl git unzip build-base tar 7zip
+
+ - uses: actions/checkout@v2
+ with:
+ submodules: true
+
+ - name: prepare local xmake
+ run: |
+ cp -rf . ../xmake-source
+ - uses: xmake-io/github-action-setup-xmake@v1
+ with:
+ xmake-version: local#../xmake-source
+
+ - name: Tests
+ env:
+ XMAKE_ROOT: y
+ run: |
+ xmake lua -v -D tests/run.lua
+ xrepo --version
+