diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index a21b646..2b6d352 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -33,21 +33,30 @@ jobs: - name: Install system test dependencies run: | - apt-get update - apt-get install --yes --no-install-recommends sqlite3 - rm -rf /var/lib/apt/lists/* + if command -v apt-get >/dev/null 2>&1; then + apt-get update + apt-get install --yes --no-install-recommends sqlite3 + rm -rf /var/lib/apt/lists/* + elif command -v brew >/dev/null 2>&1; then + if ! command -v sqlite3 >/dev/null 2>&1; then + brew install sqlite + fi + fi + command -v sqlite3 - 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" + if [[ "$(uname -s)" == "Linux" ]]; then + 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 fi node -e "import('sharp').then((sharp) => sharp.default({ create: { width: 1, height: 1, channels: 4, background: '#000' } }).png().toBuffer())" diff --git a/page-data-acceptance.test.mjs b/page-data-acceptance.test.mjs index 4d8699f..a46bba5 100644 --- a/page-data-acceptance.test.mjs +++ b/page-data-acceptance.test.mjs @@ -98,8 +98,17 @@ function buildApp(workspaceRoot, pool = createPool('public')) { return app; } -async function request(app, method, url, { body, headers } = {}) { +async function listenEphemeral(app) { const server = app.listen(0); + await new Promise((resolve, reject) => { + server.once('listening', resolve); + server.once('error', reject); + }); + return server; +} + +async function request(app, method, url, { body, headers } = {}) { + const server = await listenEphemeral(app); try { const { port } = server.address(); const response = await fetch(`http://127.0.0.1:${port}${url}`, {