mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-20 00:08:02 +01:00
Node20 (#7095)
Upgrades workflows, nvmrc and package.json to use Node 20.
This commit is contained in:
parent
b783e89c88
commit
7e38d6bae1
9
.github/workflows/build.yaml
vendored
9
.github/workflows/build.yaml
vendored
@ -17,9 +17,6 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
name: build
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
services:
|
||||
# Label used to access the service container
|
||||
postgres:
|
||||
@ -38,10 +35,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
- name: Use Node.js 20
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
node-version: 20.x
|
||||
cache: 'yarn'
|
||||
- run: yarn install --frozen-lockfile --ignore-scripts
|
||||
- run: yarn lint
|
||||
@ -56,4 +53,4 @@ jobs:
|
||||
if: (success() || failure()) && github.ref == 'refs/heads/main'
|
||||
with:
|
||||
name: test-results
|
||||
path: ./reports/jest-junit.xml
|
||||
path: ./reports/jest-junit.xml
|
||||
|
4
.github/workflows/build_coverage.yaml
vendored
4
.github/workflows/build_coverage.yaml
vendored
@ -15,7 +15,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
node-version: [20.x]
|
||||
services:
|
||||
# Label used to access the service container
|
||||
postgres:
|
||||
@ -37,7 +37,7 @@ jobs:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18.x
|
||||
node-version: 20.x
|
||||
cache: 'yarn'
|
||||
- run: yarn
|
||||
- run: yarn build:frontend:if-needed
|
||||
|
2
.github/workflows/build_doc_prs.yaml
vendored
2
.github/workflows/build_doc_prs.yaml
vendored
@ -7,7 +7,7 @@ on:
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
name: build (18.x) # temporary solution to trick branch protection rules
|
||||
name: build # temporary solution to trick branch protection rules
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
2
.github/workflows/build_frontend_prs.yml
vendored
2
.github/workflows/build_frontend_prs.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
||||
working-directory: frontend
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
node-version: [20.x]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
|
8
.github/workflows/build_prs_jest_report.yaml
vendored
8
.github/workflows/build_prs_jest_report.yaml
vendored
@ -12,7 +12,7 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
name: build (18.x) # temporary solution to trick branch protection rules
|
||||
name: build # temporary solution to trick branch protection rules
|
||||
|
||||
services:
|
||||
# Label used to access the service container
|
||||
@ -32,12 +32,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 20.x
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18.x
|
||||
node-version: 20.x
|
||||
cache: 'yarn'
|
||||
- name: Tests on 18.x
|
||||
- name: Tests on 20.x
|
||||
id: coverage
|
||||
uses: ArtiomTr/jest-coverage-report-action@v2
|
||||
with:
|
||||
|
2
.github/workflows/docker_publish.yaml
vendored
2
.github/workflows/docker_publish.yaml
vendored
@ -20,7 +20,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
version: [18.18.2-alpine]
|
||||
version: [20.13.1-alpine]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
@ -15,7 +15,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
node-version: [20.x]
|
||||
|
||||
steps:
|
||||
- name: Checkout current branch
|
||||
@ -30,7 +30,7 @@ jobs:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18.x
|
||||
node-version: 20.x
|
||||
cache: 'yarn'
|
||||
cache-dependency-path: |
|
||||
current/yarn.lock
|
||||
|
2
.github/workflows/notify_enterprise.yaml
vendored
2
.github/workflows/notify_enterprise.yaml
vendored
@ -20,7 +20,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
node-version: [20.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
2
.github/workflows/publish-new-version.yaml
vendored
2
.github/workflows/publish-new-version.yaml
vendored
@ -30,7 +30,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
node-version: [20.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
4
.github/workflows/release.yaml
vendored
4
.github/workflows/release.yaml
vendored
@ -10,14 +10,14 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x]
|
||||
node-version: [20.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup to npm
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18.x
|
||||
node-version: 20.x
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
cache: 'yarn'
|
||||
- name: Build
|
||||
|
4
.github/workflows/update_contributors.yaml
vendored
4
.github/workflows/update_contributors.yaml
vendored
@ -10,10 +10,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 20.x
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18.x
|
||||
node-version: 20.x
|
||||
- uses: actions/checkout@master
|
||||
with:
|
||||
repository: sighphyre/svg-contributors
|
||||
|
4
.github/workflows/validate-migrations.yaml
vendored
4
.github/workflows/validate-migrations.yaml
vendored
@ -15,10 +15,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 20.x
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18.x
|
||||
node-version: 20.x
|
||||
cache: 'yarn'
|
||||
- name: Start database
|
||||
working-directory: test-migrations
|
||||
|
@ -1,4 +1,4 @@
|
||||
ARG NODE_VERSION=18.20.2-alpine
|
||||
ARG NODE_VERSION=20.13.1-alpine
|
||||
|
||||
FROM node:$NODE_VERSION as builder
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
"test:ci": "echo 'no tests for unleash-docker'"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
"node": ">=20"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
|
@ -206,7 +206,7 @@
|
||||
"proxyquire": "2.1.3",
|
||||
"source-map-support": "0.5.21",
|
||||
"superagent": "9.0.2",
|
||||
"supertest": "6.3.4",
|
||||
"supertest": "7.0.0",
|
||||
"ts-node": "10.9.2",
|
||||
"tsc-watch": "6.2.0",
|
||||
"typescript": "5.4.2",
|
||||
|
@ -69,6 +69,7 @@ exports[`should create default config 1`] = `
|
||||
"_events": {},
|
||||
"_eventsCount": 0,
|
||||
"_maxListeners": undefined,
|
||||
Symbol(shapeMode): false,
|
||||
Symbol(kCapture): false,
|
||||
},
|
||||
"feedbackUriPath": undefined,
|
||||
|
@ -125,7 +125,7 @@ test('should return lifecycle stages', async () => {
|
||||
bucket: {
|
||||
toggles: {
|
||||
my_feature_a: 'irrelevant',
|
||||
non_existent_feature: 'irrelevent',
|
||||
non_existent_feature: 'irrelevant',
|
||||
},
|
||||
},
|
||||
environment: 'default',
|
||||
|
@ -1,13 +1,13 @@
|
||||
import {
|
||||
type IUnleashTest,
|
||||
setupAppWithAuth,
|
||||
type IUnleashNoSupertest,
|
||||
setupAppWithoutSupertest,
|
||||
} from '../../../test/e2e/helpers/test-helper';
|
||||
import dbInit, { type ITestDb } from '../../../test/e2e/helpers/database-init';
|
||||
import getLogger from '../../../test/fixtures/no-logger';
|
||||
import { randomId } from '../../util';
|
||||
import { ApiTokenType } from '../../types/models/api-token';
|
||||
|
||||
let app: IUnleashTest;
|
||||
let app: IUnleashNoSupertest;
|
||||
let db: ITestDb;
|
||||
let appErrorLogs: string[] = [];
|
||||
|
||||
@ -21,7 +21,7 @@ beforeAll(async () => {
|
||||
baseLogger.error(msg, ...args);
|
||||
},
|
||||
};
|
||||
app = await setupAppWithAuth(db.stores, {
|
||||
app = await setupAppWithoutSupertest(db.stores, {
|
||||
frontendApiOrigins: ['https://example.com'],
|
||||
getLogger: () => appLogger,
|
||||
});
|
||||
@ -53,14 +53,19 @@ test('multiple parallel calls to api/frontend should not create multiple instanc
|
||||
environment: 'default',
|
||||
tokenName: `test-token-${randomId()}`,
|
||||
});
|
||||
|
||||
const address = app.server.address();
|
||||
expect(address).not.toBeNull();
|
||||
expect(address).toHaveProperty('port');
|
||||
// @ts-ignore - We've just checked that we have this property
|
||||
const serverUrl = `http://localhost:${address.port}/api/frontend`;
|
||||
await Promise.all(
|
||||
Array.from(Array(10).keys()).map(() =>
|
||||
app.request
|
||||
.get('/api/frontend')
|
||||
.set('Authorization', frontendTokenDefault.secret)
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200),
|
||||
fetch(serverUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Authorization: frontendTokenDefault.secret,
|
||||
},
|
||||
}).then((res) => expect(res.status).toBe(200)),
|
||||
),
|
||||
);
|
||||
expect(appErrorLogs).toHaveLength(0);
|
||||
|
@ -22,7 +22,7 @@ import type {
|
||||
import type { Knex } from 'knex';
|
||||
import type TestAgent from 'supertest/lib/agent';
|
||||
import type Test from 'supertest/lib/test';
|
||||
|
||||
import type { Server } from 'node:http';
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
export interface IUnleashTest extends IUnleashHttpAPI {
|
||||
@ -32,6 +32,13 @@ export interface IUnleashTest extends IUnleashHttpAPI {
|
||||
config: IUnleashConfig;
|
||||
}
|
||||
|
||||
export interface IUnleashNoSupertest {
|
||||
server: Server;
|
||||
services: IUnleashServices;
|
||||
config: IUnleashConfig;
|
||||
destroy: () => Promise<void>;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a collection of API helpers. The response code is optional, and should default to the success code for the request.
|
||||
*
|
||||
@ -348,6 +355,53 @@ export async function setupApp(stores: IUnleashStores): Promise<IUnleashTest> {
|
||||
return createApp(stores);
|
||||
}
|
||||
|
||||
export async function setupAppWithoutSupertest(
|
||||
stores,
|
||||
customOptions?: any,
|
||||
db?: Db,
|
||||
): Promise<IUnleashNoSupertest> {
|
||||
const config = createTestConfig({
|
||||
authentication: {
|
||||
type: IAuthType.DEMO,
|
||||
},
|
||||
server: {
|
||||
unleashUrl: 'http://localhost:4242',
|
||||
},
|
||||
disableScheduler: true,
|
||||
...{
|
||||
...customOptions,
|
||||
experimental: {
|
||||
...(customOptions?.experimental ?? {}),
|
||||
flags: {
|
||||
strictSchemaValidation: true,
|
||||
...(customOptions?.experimental?.flags ?? {}),
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
const services = createServices(stores, config, db);
|
||||
const unleashSession = sessionDb(config, undefined);
|
||||
const app = await getApp(config, stores, services, unleashSession, db);
|
||||
const server = app.listen(0);
|
||||
const destroy = async () => {
|
||||
// iterate on the keys of services and if the services at that key has a function called destroy then call it
|
||||
await Promise.all(
|
||||
Object.keys(services).map(async (key) => {
|
||||
if (services[key].destroy) {
|
||||
await services[key].destroy();
|
||||
}
|
||||
}),
|
||||
);
|
||||
await server.close();
|
||||
};
|
||||
return {
|
||||
server,
|
||||
destroy,
|
||||
services,
|
||||
config,
|
||||
};
|
||||
}
|
||||
|
||||
export async function setupAppWithCustomConfig(
|
||||
stores: IUnleashStores,
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
|
40
yarn.lock
40
yarn.lock
@ -3461,16 +3461,6 @@ form-data@~2.3.2:
|
||||
combined-stream "^1.0.6"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
formidable@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89"
|
||||
integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==
|
||||
dependencies:
|
||||
dezalgo "^1.0.4"
|
||||
hexoid "^1.0.0"
|
||||
once "^1.4.0"
|
||||
qs "^6.11.0"
|
||||
|
||||
formidable@^3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/formidable/-/formidable-3.5.1.tgz#9360a23a656f261207868b1484624c4c8d06ee1a"
|
||||
@ -6399,7 +6389,7 @@ sanitize-filename@^1.6.3:
|
||||
dependencies:
|
||||
truncate-utf8-bytes "^1.0.0"
|
||||
|
||||
semver@^5.3.0, semver@^6.0.0, semver@^6.3.0, semver@^6.3.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4:
|
||||
semver@^5.3.0, semver@^6.0.0, semver@^6.3.0, semver@^6.3.1, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4:
|
||||
version "7.5.4"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
|
||||
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
|
||||
@ -6911,7 +6901,7 @@ strip-json-comments@~2.0.1:
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
|
||||
|
||||
superagent@9.0.2:
|
||||
superagent@9.0.2, superagent@^9.0.1:
|
||||
version "9.0.2"
|
||||
resolved "https://registry.yarnpkg.com/superagent/-/superagent-9.0.2.tgz#a18799473fc57557289d6b63960610e358bdebc1"
|
||||
integrity sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==
|
||||
@ -6926,29 +6916,13 @@ superagent@9.0.2:
|
||||
mime "2.6.0"
|
||||
qs "^6.11.0"
|
||||
|
||||
superagent@^8.1.2:
|
||||
version "8.1.2"
|
||||
resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.1.2.tgz#03cb7da3ec8b32472c9d20f6c2a57c7f3765f30b"
|
||||
integrity sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==
|
||||
dependencies:
|
||||
component-emitter "^1.3.0"
|
||||
cookiejar "^2.1.4"
|
||||
debug "^4.3.4"
|
||||
fast-safe-stringify "^2.1.1"
|
||||
form-data "^4.0.0"
|
||||
formidable "^2.1.2"
|
||||
methods "^1.1.2"
|
||||
mime "2.6.0"
|
||||
qs "^6.11.0"
|
||||
semver "^7.3.8"
|
||||
|
||||
supertest@6.3.4:
|
||||
version "6.3.4"
|
||||
resolved "https://registry.yarnpkg.com/supertest/-/supertest-6.3.4.tgz#2145c250570c2ea5d337db3552dbfb78a2286218"
|
||||
integrity sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==
|
||||
supertest@7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supertest/-/supertest-7.0.0.tgz#cac53b3d6872a0b317980b2b0cfa820f09cd7634"
|
||||
integrity sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==
|
||||
dependencies:
|
||||
methods "^1.1.2"
|
||||
superagent "^8.1.2"
|
||||
superagent "^9.0.1"
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
|
Loading…
Reference in New Issue
Block a user