#!/bin/sh # Basic checks that need no macOS SDK, so CI can run them on Linux. # Run locally with `make check`. A full compile still needs a Mac. set -eu cd "$(dirname "$0")/.." fail=0 step() { printf '\n==> %s\n' "$1"; } bad() { printf 'FAIL: %s\n' "$1"; fail=1; } step "Swift syntax" swiftc -parse Sources/Wakeful/*.swift || bad "swiftc -parse reported errors" step "Info.plist" # The Makefile seds these placeholders in; losing one ships a broken bundle. for key in __BUNDLE_ID__ __VERSION__; do grep -q "$key" Resources/Info.plist || bad "Resources/Info.plist is missing $key" done if command -v plutil >/dev/null 2>&1; then plutil -lint Resources/Info.plist || bad "Resources/Info.plist is not a valid plist" else swift - <<'SWIFT' || bad "Resources/Info.plist is not a valid plist" import Foundation let data = try Data(contentsOf: URL(fileURLWithPath: "Resources/Info.plist")) _ = try PropertyListSerialization.propertyList(from: data, format: nil) print("Resources/Info.plist: OK") SWIFT fi step "Version" version=$(sed -n 's/^VERSION *:= *//p' Makefile) latest=$(sed -n 's/^## \[\([0-9][^]]*\)\].*/\1/p' CHANGELOG.md | head -n 1) if [ -z "$version" ]; then bad "no VERSION in Makefile" elif [ "$version" != "$latest" ]; then bad "Makefile VERSION is $version but the newest CHANGELOG release is ${latest:-missing}" else echo "$version" fi step "Whitespace and conflict markers" # Diff the whole tree against the empty tree so this works on a shallow clone. empty=$(git hash-object -t tree /dev/null) git diff --check "$empty" HEAD -- . && echo OK || bad "whitespace errors or conflict markers (see above)" echo if [ "$fail" -ne 0 ]; then echo "Checks failed." exit 1 fi echo "All checks passed."