bais-gate-e2e-1783694813/.forgejo/workflows/ci.yml

86 lines
3.8 KiB
YAML

name: ci
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
set -u
apt_updated=0
install_packages() {
command -v apt-get >/dev/null || { echo 'Java build requires apt-get on this runner'; exit 1; }
if [ "$apt_updated" -eq 0 ]; then
apt-get update
apt_updated=1
fi
DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends "$@"
}
ensure_java() {
command -v java >/dev/null || install_packages openjdk-17-jdk-headless
}
if [ -f mvnw ]; then
ensure_java
chmod +x mvnw
./mvnw -B test
elif [ -f pom.xml ]; then
ensure_java
if ! command -v mvn >/dev/null; then
install_packages maven
fi
mvn -B test
elif [ -f gradlew ]; then
ensure_java
chmod +x gradlew
./gradlew test
elif [ -f build.gradle ] || [ -f build.gradle.kts ]; then
ensure_java
command -v gradle >/dev/null || { echo 'Gradle build requires a wrapper or installed Gradle'; exit 1; }
gradle test
elif [ -f package.json ]; then
command -v node >/dev/null || { echo 'package.json requires Node.js'; exit 1; }
package_manager=$(node -p "String(require('./package.json').packageManager || '').split('@')[0]")
if [ -n "$package_manager" ] && [ "$package_manager" != npm ] && [ "$package_manager" != pnpm ] && [ "$package_manager" != yarn ]; then
echo "unsupported packageManager: $package_manager"
exit 1
fi
if [ "$package_manager" = pnpm ] || { [ -z "$package_manager" ] && [ -f pnpm-lock.yaml ]; }; then
command -v corepack >/dev/null || { echo 'pnpm lockfile requires corepack'; exit 1; }
corepack enable
command -v pnpm >/dev/null || { echo 'pnpm is unavailable after corepack enable'; exit 1; }
pnpm install --frozen-lockfile
pnpm run --if-present test
pnpm run --if-present build
elif [ "$package_manager" = yarn ] || { [ -z "$package_manager" ] && [ -f yarn.lock ]; }; then
command -v corepack >/dev/null || { echo 'yarn lockfile requires corepack'; exit 1; }
corepack enable
command -v yarn >/dev/null || { echo 'yarn is unavailable after corepack enable'; exit 1; }
yarn install --frozen-lockfile
if node -e "process.exit(require('./package.json').scripts?.test ? 0 : 1)"; then
yarn test
fi
if node -e "process.exit(require('./package.json').scripts?.build ? 0 : 1)"; then
yarn build
fi
else
command -v npm >/dev/null || { echo 'package.json requires npm'; exit 1; }
if [ -f package-lock.json ]; then
npm ci
else
npm install
fi
npm run --if-present test
npm run --if-present build
fi
elif [ -f pyproject.toml ] || [ -f pytest.ini ] || [ -d tests ]; then
python3 -m pip install --quiet pytest
rc=0
pytest -q || rc=$?
[ "$rc" -eq 5 ] && exit 0
exit "$rc"
elif find . -type f \( -path '*/src/test/*' -o -name '*Test.java' -o -name '*_test.py' -o -name '*.test.*' -o -name '*.spec.*' \) -print -quit | grep -q .; then
echo 'test files found but no supported build manifest'
exit 1
else
echo 'artifact-only change: no executable build contract'
fi