From 136739cf78ca59861f04e789cdac9a1b20ad9bf1 Mon Sep 17 00:00:00 2001 From: alexjoeyyong <96444887+alexjoeyyong@users.noreply.github.com> Date: Wed, 22 Jan 2025 15:50:22 -0500 Subject: [PATCH 1/8] EC3-1545 migrate from travis.yml to GHA --- .github/workflows/run-tests.yml | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/run-tests.yml diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 0000000..f2e65f5 --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,37 @@ +# .github/workflows/nodejs-ci.yml +name: Run Tests for Nuclear JS + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + + steps: + # Checkout the code + - name: Checkout code + uses: actions/checkout@v4 + + # Set up Node.js + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 0.10 + + # Install grunt-cli globally + - name: Install grunt-cli + run: npm install -g grunt-cli + + # Install dependencies + - name: Install dependencies + run: npm install + + # Run tests + - name: Run tests + run: npm test From b00a2572ab59311d8e77324047c7035617995f72 Mon Sep 17 00:00:00 2001 From: alexjoeyyong <96444887+alexjoeyyong@users.noreply.github.com> Date: Wed, 22 Jan 2025 15:51:28 -0500 Subject: [PATCH 2/8] Rename .travis.yml to deprecatedtravis.yml --- .travis.yml => deprecatedtravis.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .travis.yml => deprecatedtravis.yml (100%) diff --git a/.travis.yml b/deprecatedtravis.yml similarity index 100% rename from .travis.yml rename to deprecatedtravis.yml From e55b86054611df9a364668a4e35194372a404d98 Mon Sep 17 00:00:00 2001 From: alexjoeyyong <96444887+alexjoeyyong@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:14:08 +0000 Subject: [PATCH 3/8] Fixing tests and making this into a GHA pipeline --- .github/workflows/run-tests.yml | 4 ++-- Gruntfile.js | 18 +++++++++++++----- grunt/aliases.js | 4 ++-- grunt/karma.js | 24 +++++++++++++----------- package.json | 5 ++--- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index f2e65f5..48a9d1f 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -22,7 +22,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 0.10 + node-version: 20.18.1 # Install grunt-cli globally - name: Install grunt-cli @@ -34,4 +34,4 @@ jobs: # Run tests - name: Run tests - run: npm test + run: grunt ci diff --git a/Gruntfile.js b/Gruntfile.js index 8b7fb23..f13ad53 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,6 +1,14 @@ module.exports = function(grunt) { - require('load-grunt-config')(grunt) - // load npm tasks - grunt.loadNpmTasks('grunt-karma') - grunt.loadNpmTasks('grunt-karma-coveralls') -} + // Load grunt configurations + require('load-grunt-config')(grunt, { + configPath: require('path').join(__dirname, 'grunt'), + init: true, + }); + + // Load npm tasks + grunt.loadNpmTasks('grunt-karma'); + grunt.loadNpmTasks('grunt-karma-coveralls'); + + // Default task + grunt.registerTask('test', ['karma:chrome']); +}; diff --git a/grunt/aliases.js b/grunt/aliases.js index 35badc4..f124b45 100644 --- a/grunt/aliases.js +++ b/grunt/aliases.js @@ -1,6 +1,6 @@ module.exports = { 'test': [ - 'karma:phantom', + 'karma:chrome', ], 'sauce': [ @@ -13,7 +13,7 @@ module.exports = { 'eslint', 'clean:coverage', 'karma:coverage', - 'coveralls', + // 'coveralls', //doesn't seem to be a thing anymore. //'sauce', TODO: investigate why sauce connect isnt working ], } diff --git a/grunt/karma.js b/grunt/karma.js index e3de583..bb9c6e2 100644 --- a/grunt/karma.js +++ b/grunt/karma.js @@ -43,22 +43,24 @@ module.exports = { }, }, - phantom: { - frameworks: ['jasmine', 'es5-shim'], - browsers: ['PhantomJS'], - }, - chrome: { - reporters: ['html'], - browsers: ['Chrome'], - autoWatch: true, - singleRun: false, + frameworks: ['jasmine'], + reporters: ['progress', 'html'], + browsers: ['ChromeHeadless'], // Use ChromeHeadless instead of Chrome or PhantomJS + customLaunchers: { + HeadlessChrome: { + base: 'ChromeHeadless', + flags: ['--no-sandbox', '--disable-gpu'], // Required for CI environments + }, + }, + autoWatch: false, + singleRun: true, }, coverage: { - frameworks: ['jasmine', 'es5-shim'], + frameworks: ['jasmine'], reporters: ['progress', 'coverage'], - browsers: ['PhantomJS'], + browsers: ['ChromeHeadless'], coverageReporter: { reporters: [ { type: 'html', dir: 'coverage/' }, diff --git a/package.json b/package.json index ee6629f..7310068 100644 --- a/package.json +++ b/package.json @@ -45,18 +45,17 @@ "jstransform": "^11.0.1", "jstransform-loader": "^0.2.0", "karma": "^0.13.3", - "karma-chrome-launcher": "^0.2.0", + "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.4.2", "karma-es5-shim": "https://github.com/pokehanai/karma-es5-shim/archive/v2.1.0.tar.gz", "karma-jasmine": "^0.3.6", "karma-jasmine-html-reporter": "^0.1.8", - "karma-phantomjs-launcher": "^0.2.0", "karma-sauce-launcher": "^0.2.14", "karma-webpack": "^1.7.0", "load-grunt-config": "^0.17.1", "lodash": "^4.17.11", "node-libs-browser": "^0.5.2", - "phantomjs": "^1.9.17", + "puppeteer": "^24.1.0", "react": "^0.13.3", "webpack": "^1.10.5" } From 44f3733bde74d060cc4ae0c8f189ab8e3c82241d Mon Sep 17 00:00:00 2001 From: alexjoeyyong <96444887+alexjoeyyong@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:33:41 +0000 Subject: [PATCH 4/8] stashing changes --- README.md | 2 -- grunt/aliases.js | 7 +--- grunt/karma.js | 35 ++++++++++---------- grunt/sauce.js | 85 ------------------------------------------------ package.json | 2 +- 5 files changed, 19 insertions(+), 112 deletions(-) delete mode 100644 grunt/sauce.js diff --git a/README.md b/README.md index e14850a..f546ce0 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ [![Coverage Status](https://coveralls.io/repos/optimizely/nuclear-js/badge.svg?branch=master)](https://coveralls.io/r/optimizely/nuclear-js?branch=master) [![Join the chat at https://gitter.im/optimizely/nuclear-js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/optimizely/nuclear-js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![Sauce Test Status](https://saucelabs.com/browser-matrix/nuclearjs.svg)](https://saucelabs.com/u/nuclearjs) - Traditional Flux architecture built with ImmutableJS data structures. ## Documentation diff --git a/grunt/aliases.js b/grunt/aliases.js index f124b45..e102db5 100644 --- a/grunt/aliases.js +++ b/grunt/aliases.js @@ -1,19 +1,14 @@ module.exports = { 'test': [ 'karma:chrome', + 'karma:firefox' ], - 'sauce': [ - 'karma:sauce_modern', - 'karma:sauce_ie', - 'karma:sauce_mobile', - ], 'ci': [ 'eslint', 'clean:coverage', 'karma:coverage', // 'coveralls', //doesn't seem to be a thing anymore. - //'sauce', TODO: investigate why sauce connect isnt working ], } diff --git a/grunt/karma.js b/grunt/karma.js index bb9c6e2..bdc5e4a 100644 --- a/grunt/karma.js +++ b/grunt/karma.js @@ -1,12 +1,10 @@ -var sauce = require('./sauce') -var path = require('path') +var path = require('path'); module.exports = { options: { // base path that will be used to resolve all patterns (eg. files, exclude) basePath: path.join(__dirname, '../'), // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter frameworks: ['jasmine'], // list of files / patterns to load in the browser @@ -46,7 +44,7 @@ module.exports = { chrome: { frameworks: ['jasmine'], reporters: ['progress', 'html'], - browsers: ['ChromeHeadless'], // Use ChromeHeadless instead of Chrome or PhantomJS + browsers: ['ChromeHeadless'], // Use ChromeHeadless for CI customLaunchers: { HeadlessChrome: { base: 'ChromeHeadless', @@ -57,10 +55,23 @@ module.exports = { singleRun: true, }, + firefox: { + frameworks: ['jasmine'], + reporters: ['progress', 'html'], + browsers: ['FirefoxHeadless'], // Use FirefoxHeadless for CI + customLaunchers: { + HeadlessFirefox: { + base: 'FirefoxHeadless', + }, + }, + autoWatch: false, + singleRun: true, + }, + coverage: { frameworks: ['jasmine'], reporters: ['progress', 'coverage'], - browsers: ['ChromeHeadless'], + browsers: ['ChromeHeadless', 'FirefoxHeadless'], // Run tests on both browsers for coverage coverageReporter: { reporters: [ { type: 'html', dir: 'coverage/' }, @@ -84,16 +95,4 @@ module.exports = { }, }, }, - - sauce_modern: { - options: sauce.modern, - }, - - sauce_ie: { - options: sauce.ie, - }, - - sauce_mobile: { - options: sauce.mobile, - }, -} +}; diff --git a/grunt/sauce.js b/grunt/sauce.js deleted file mode 100644 index bf57a29..0000000 --- a/grunt/sauce.js +++ /dev/null @@ -1,85 +0,0 @@ -var sauceConfig = { - username: 'nuclearjs', - accessKey: process.env.SAUCE_ACCESS_KEY, - testName: 'NuclearJS unit tests', - recordScreenshots: false, - build: process.env.TRAVIS_JOB_ID || Date.now(), -} - -/** - * Having too many tests running concurrently on saucelabs - * causes timeouts and errors, so we have to run them in - * smaller batches. - */ -var batches = { - // the cool kids - modern: { - sl_chrome: { - base: 'SauceLabs', - browserName: 'chrome', - platform: 'Windows 7', - version: '39', - }, - sl_firefox: { - base: 'SauceLabs', - browserName: 'firefox', - version: '33', - }, - sl_mac_safari: { - base: 'SauceLabs', - browserName: 'safari', - platform: 'OS X 10.10', - version: '8', - }, - }, - // ie family - ie: { - sl_ie_9: { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 7', - version: '9', - }, - sl_ie_10: { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 8', - version: '10', - }, - sl_ie_11: { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 8.1', - version: '11', - }, - }, - // mobile - mobile: { - sl_ios_safari: { - base: 'SauceLabs', - browserName: 'iphone', - platform: 'OS X 10.9', - version: '8.1', - }, - sl_android: { - base: 'SauceLabs', - browserName: 'android', - platform: 'Linux', - version: '4.2', - }, - }, -} - -for (var key in batches) { // eslint-disable-line guard-for-in - var value = batches[key] - - exports[key] = { - sauceLabs: sauceConfig, - // mobile emulators are really slow - captureTimeout: 300000, - browserNoActivityTimeout: 300000, - customLaunchers: value, - browsers: Object.keys(value), - reporters: ['progress', 'saucelabs'], - } -} diff --git a/package.json b/package.json index 7310068..b78a489 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,9 @@ "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.4.2", "karma-es5-shim": "https://github.com/pokehanai/karma-es5-shim/archive/v2.1.0.tar.gz", + "karma-firefox-launcher": "^2.1.3", "karma-jasmine": "^0.3.6", "karma-jasmine-html-reporter": "^0.1.8", - "karma-sauce-launcher": "^0.2.14", "karma-webpack": "^1.7.0", "load-grunt-config": "^0.17.1", "lodash": "^4.17.11", From 1224fb94696e88f9b5b88abba2b0a56ad76e3e9e Mon Sep 17 00:00:00 2001 From: alexjoeyyong <96444887+alexjoeyyong@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:36:22 +0000 Subject: [PATCH 5/8] test --- Gruntfile.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index f13ad53..38d551e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,4 +1,4 @@ -module.exports = function(grunt) { +module.exports = function (grunt) { // Load grunt configurations require('load-grunt-config')(grunt, { configPath: require('path').join(__dirname, 'grunt'), @@ -9,6 +9,12 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-karma'); grunt.loadNpmTasks('grunt-karma-coveralls'); - // Default task - grunt.registerTask('test', ['karma:chrome']); + // Default task for Chrome and Firefox + grunt.registerTask('test', ['karma:chrome', 'karma:firefox']); + + // Separate task for Chrome only + grunt.registerTask('test:chrome', ['karma:chrome']); + + // Separate task for Firefox only + grunt.registerTask('test:firefox', ['karma:firefox']); }; From 01ca3c9595b3adfe53122214e934f06144da2798 Mon Sep 17 00:00:00 2001 From: alexjoeyyong <96444887+alexjoeyyong@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:41:04 +0000 Subject: [PATCH 6/8] lint fixes --- grunt/aliases.js | 4 ++-- grunt/karma.js | 4 ++-- src/reactor.js | 2 +- tests/reactor-tests.js | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/grunt/aliases.js b/grunt/aliases.js index e102db5..eb999dc 100644 --- a/grunt/aliases.js +++ b/grunt/aliases.js @@ -1,7 +1,7 @@ module.exports = { 'test': [ - 'karma:chrome', - 'karma:firefox' + 'karma:chrome', + 'karma:firefox', ], diff --git a/grunt/karma.js b/grunt/karma.js index bdc5e4a..f9e8b93 100644 --- a/grunt/karma.js +++ b/grunt/karma.js @@ -1,4 +1,4 @@ -var path = require('path'); +var path = require('path') module.exports = { options: { @@ -95,4 +95,4 @@ module.exports = { }, }, }, -}; +} diff --git a/src/reactor.js b/src/reactor.js index 4b95a13..82d9f82 100644 --- a/src/reactor.js +++ b/src/reactor.js @@ -6,7 +6,7 @@ import { ConsoleGroupLogger } from './logging' import { isKeyPath } from './key-path' import { isGetter } from './getter' import { toJS } from './immutable-helpers' -import { extend, toFactory } from './utils' +import { toFactory } from './utils' import { ReactorState, ObserverState, diff --git a/tests/reactor-tests.js b/tests/reactor-tests.js index bc107bf..49816e2 100644 --- a/tests/reactor-tests.js +++ b/tests/reactor-tests.js @@ -3,7 +3,7 @@ import { Reactor, Store } from '../src/main' import { getOption } from '../src/reactor/fns' import { toImmutable } from '../src/immutable-helpers' import { PROD_OPTIONS, DEBUG_OPTIONS } from '../src/reactor/records' -import { NoopLogger, ConsoleGroupLogger } from '../src/logging' +import { ConsoleGroupLogger } from '../src/logging' describe('Reactor', () => { it('should construct without \'new\'', () => { From 592fea741b1c85c87d153fccf4d4369f132a67b6 Mon Sep 17 00:00:00 2001 From: alexjoeyyong <96444887+alexjoeyyong@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:41:41 +0000 Subject: [PATCH 7/8] updates --- .github/workflows/run-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 48a9d1f..2740f65 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -10,7 +10,7 @@ on: - master jobs: - build: + build-and-test: runs-on: ubuntu-latest steps: From 6d0716869c8ed50d9c894898ad8951520f91e663 Mon Sep 17 00:00:00 2001 From: alexjoeyyong <96444887+alexjoeyyong@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:42:02 +0000 Subject: [PATCH 8/8] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 25fbf5a..6862f64 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ coverage/ +package-lock.json