Merge pull request #524 from openedx/jawayria/node-16

build: Added support for Node 16
This commit is contained in:
Muhammad Soban Javed
2022-03-22 14:03:50 +05:00
committed by GitHub
9 changed files with 32955 additions and 5567 deletions

View File

@@ -3,43 +3,46 @@ name: node_CI
on:
push:
branches:
- master
- master
pull_request:
branches:
- "**"
- '**'
jobs:
build:
tests:
runs-on: ubuntu-20.04
strategy:
matrix:
node: [12, 14, 16]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v2
- name: Setup Nodejs
uses: actions/setup-node@v2
with:
node-version: 12
- name: Setup Nodejs
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node }}
- name: CI
run: npm ci
- name: Install Dependencies
run: npm ci
- name: Verify No Uncommitted Package-Lock Changes
run: make validate-no-uncommitted-package-lock-changes
- name: Verify No Uncommitted Package-Lock Changes
run: make validate-no-uncommitted-package-lock-changes
- name: Run i18n_extract
run: npm run i18n_extract
- name: Run i18n_extract
run: npm run i18n_extract
- name: Lint
run: npm run lint
- name: Lint
run: npm run lint
- name: Test
run: npm run test
- name: Test
run: npm run test
- name: Build
run: npm run build
- name: Build
run: npm run build
- name: Verify Es5
run: npm run is-es5
- name: Verify Es5
run: npm run is-es5
- name: Run Code Coverage
uses: codecov/codecov-action@v2
- name: Run Code Coverage
uses: codecov/codecov-action@v2

38402
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -36,8 +36,8 @@
"dependencies": {
"@edx/brand": "npm:@edx/brand-openedx@1.1.0",
"@edx/frontend-component-cookie-policy-banner": "2.1.14",
"@edx/frontend-platform": "1.14.9",
"@edx/paragon": "16.14.1",
"@edx/frontend-platform": "1.15.2",
"@edx/paragon": "19.6.0",
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
"@fortawesome/free-regular-svg-icons": "5.15.4",
@@ -64,7 +64,7 @@
"react-router": "5.2.1",
"react-router-dom": "5.3.0",
"redux": "4.1.2",
"redux-devtools-extension": "2.13.9",
"@redux-devtools/extension": "3.2.0",
"redux-logger": "3.0.6",
"redux-mock-store": "1.5.4",
"redux-saga": "1.1.3",
@@ -76,9 +76,9 @@
"universal-cookie": "4.0.4"
},
"devDependencies": {
"@edx/frontend-build": "9.0.6",
"@edx/frontend-build": "9.1.1",
"@edx/reactifex": "1.0.3",
"babel-plugin-react-intl": "8.2.25",
"babel-plugin-formatjs": "10.3.18",
"codecov": "3.8.2",
"enzyme": "3.11.0",
"enzyme-adapter-react-16": "1.15.6",

View File

@@ -3,9 +3,8 @@ import classNames from 'classnames';
import PropTypes from 'prop-types';
import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
import {
ExtraSmall, Small, Medium, Large, ExtraLarge, ExtraExtraLarge,
} from '@edx/paragon';
import MediaQuery from 'react-responsive';
import { breakpoints } from '@edx/paragon';
import CookiePolicyBanner from '@edx/frontend-component-cookie-policy-banner';
import { getLocale } from '@edx/frontend-platform/i18n';
@@ -34,48 +33,48 @@ const BaseComponent = ({ children, isRegistrationPage, showWelcomeBanner }) => {
<>
{isRegistrationPage && optimizelyExperimentName === 'variation2' ? <DiscountExperimentBanner /> : null}
<CookiePolicyBanner languageCode={getLocale()} />
<ExtraLarge>
<MediaQuery minWidth={breakpoints.extraLarge.minWidth} maxWidth={breakpoints.extraLarge.maxWidth}>
<div className="col-md-12 extra-large-screen-top-stripe" />
</ExtraLarge>
<ExtraExtraLarge>
</MediaQuery>
<MediaQuery minWidth={breakpoints.extraExtraLarge.minWidth} maxWidth={breakpoints.extraExtraLarge.maxWidth}>
<div className="col-md-12 extra-large-screen-top-stripe" />
</ExtraExtraLarge>
</MediaQuery>
<div className={classNames('layout', { authenticated: authenticatedUser })}>
<ExtraSmall>
<MediaQuery maxWidth={breakpoints.extraSmall.maxWidth}>
<div className="col-md-12 small-screen-top-stripe" />
{authenticatedUser ? <AuthSmallLayout variant="xs" username={authenticatedUser.username} /> : (
<SmallLayout experimentName={optimizelyExperimentName} isRegistrationPage={isRegistrationPage} />
)}
</ExtraSmall>
<Small>
</MediaQuery>
<MediaQuery minWidth={breakpoints.small.minWidth} maxWidth={breakpoints.small.maxWidth}>
<div className="col-md-12 small-screen-top-stripe" />
{authenticatedUser ? <AuthSmallLayout username={authenticatedUser.username} /> : (
<SmallLayout experimentName={optimizelyExperimentName} isRegistrationPage={isRegistrationPage} />
)}
</Small>
<Medium>
</MediaQuery>
<MediaQuery minWidth={breakpoints.medium.minWidth} maxWidth={breakpoints.medium.maxWidth}>
<div className="w-100 medium-screen-top-stripe" />
{authenticatedUser ? <AuthMediumLayout username={authenticatedUser.username} /> : (
<MediumLayout experimentName={optimizelyExperimentName} isRegistrationPage={isRegistrationPage} />
)}
</Medium>
<Large>
</MediaQuery>
<MediaQuery minWidth={breakpoints.large.minWidth} maxWidth={breakpoints.large.maxWidth}>
<div className="w-100 large-screen-top-stripe" />
{authenticatedUser ? <AuthMediumLayout username={authenticatedUser.username} /> : (
<MediumLayout experimentName={optimizelyExperimentName} isRegistrationPage={isRegistrationPage} />
)}
</Large>
<ExtraLarge>
</MediaQuery>
<MediaQuery minWidth={breakpoints.extraLarge.minWidth} maxWidth={breakpoints.extraLarge.maxWidth}>
{authenticatedUser ? <AuthExtraLargeLayout username={authenticatedUser.username} /> : (
<LargeLayout experimentName={optimizelyExperimentName} isRegistrationPage={isRegistrationPage} />
)}
</ExtraLarge>
<ExtraExtraLarge>
</MediaQuery>
<MediaQuery minWidth={breakpoints.extraExtraLarge.minWidth} maxWidth={breakpoints.extraExtraLarge.maxWidth}>
{authenticatedUser ? <AuthExtraLargeLayout variant="xxl" username={authenticatedUser.username} /> : (
<LargeLayout experimentName={optimizelyExperimentName} isRegistrationPage={isRegistrationPage} />
)}
</ExtraExtraLarge>
</MediaQuery>
<div className={classNames('content', { 'align-items-center mt-0': authenticatedUser })}>
{children}

View File

@@ -1,7 +1,7 @@
import { getConfig } from '@edx/frontend-platform';
import { applyMiddleware, createStore, compose } from 'redux';
import thunkMiddleware from 'redux-thunk';
import { composeWithDevTools } from 'redux-devtools-extension';
import { composeWithDevTools } from '@redux-devtools/extension';
import { createLogger } from 'redux-logger';
import createSagaMiddleware from 'redux-saga';

View File

@@ -1,6 +1,6 @@
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
import { getConfig } from '@edx/frontend-platform';
import querystring from 'querystring';
import * as QueryString from 'query-string';
// eslint-disable-next-line import/prefer-default-export
export async function loginRequest(creds) {
@@ -12,7 +12,7 @@ export async function loginRequest(creds) {
const { data } = await getAuthenticatedHttpClient()
.post(
`${getConfig().LMS_BASE_URL}/api/user/v2/account/login_session/`,
querystring.stringify(creds),
QueryString.stringify(creds),
requestConfig,
)
.catch((e) => {

View File

@@ -145,7 +145,7 @@ describe('LoginPage', () => {
it('should match default button state', () => {
const loginPage = mount(reduxWrapper(<IntlLoginPage {...props} />));
expect(loginPage.find('button[type="submit"] span').first().text()).toEqual(' Sign in ');
expect(loginPage.find('button[type="submit"] span').first().text()).toEqual('Sign in');
});
it('should match pending button state', () => {
@@ -160,7 +160,7 @@ describe('LoginPage', () => {
const loginPage = mount(reduxWrapper(<IntlLoginPage {...props} />));
const button = loginPage.find('button[type="submit"] span').first();
expect(button.find('.sr-only').text()).toEqual(' pending ');
expect(button.find('.sr-only').text()).toEqual('pending');
});
it('should show forgot password link', () => {

View File

@@ -1,6 +1,6 @@
import { getConfig } from '@edx/frontend-platform';
import { getHttpClient, getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
import querystring from 'querystring';
import * as QueryString from 'query-string';
export async function registerRequest(registrationInformation) {
const requestConfig = {
@@ -11,7 +11,7 @@ export async function registerRequest(registrationInformation) {
const { data } = await getAuthenticatedHttpClient()
.post(
`${getConfig().LMS_BASE_URL}/api/user/v2/account/registration/`,
querystring.stringify(registrationInformation),
QueryString.stringify(registrationInformation),
requestConfig,
)
.catch((e) => {
@@ -32,7 +32,7 @@ export async function getFieldsValidations(formPayload) {
const { data } = await getHttpClient()
.post(
`${getConfig().LMS_BASE_URL}/api/user/v1/validation/registration`,
querystring.stringify(formPayload),
QueryString.stringify(formPayload),
requestConfig,
)
.catch((e) => {

View File

@@ -404,7 +404,7 @@ describe('RegistrationPage', () => {
it('should match default button state', () => {
const registrationPage = mount(reduxWrapper(<IntlRegistrationPage {...props} />));
expect(registrationPage.find('button[type="submit"] span').first().text()).toEqual(' Create an account ');
expect(registrationPage.find('button[type="submit"] span').first().text()).toEqual('Create an account');
});
it('should match pending button state', () => {
@@ -419,7 +419,7 @@ describe('RegistrationPage', () => {
const registrationPage = mount(reduxWrapper(<IntlRegistrationPage {...props} />));
const button = registrationPage.find('button[type="submit"] span').first();
expect(button.find('.sr-only').text()).toEqual(' pending ');
expect(button.find('.sr-only').text()).toEqual('pending');
});
it('should show single sign on provider button', () => {