diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 38a7c99..089f7e2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,6 +2,8 @@ name: CI on: push: + paths-ignore: + - '*.md' branches: [ master ] tags: - '*' @@ -13,34 +15,34 @@ jobs: runs-on: ubuntu-latest steps: - - name: Git checkout - uses: actions/checkout@v2 + - name: Git checkout (merge) + uses: actions/checkout@v3 + if: github.event_name != 'pull_request' with: fetch-depth: 0 + - name: Git checkout (PR) + uses: actions/checkout@v3 + if: github.event_name == 'pull_request' + with: + fetch-depth: 0 + # see: https://frontside.com/blog/2020-05-26-github-actions-pull_request/#how-does-pull_request-affect-actionscheckout + ref: ${{ github.event.pull_request.head.sha }} + - name: Setup Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: - node-version: '12' + node-version: '16' - name: Set up JDK 8 - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: '8' distribution: 'adopt' - - - name: Cache sbt - uses: actions/cache@v2 - with: - path: | - ~/.sbt - ~/.ivy2/cache - ~/.coursier/cache/v1 - ~/.cache/coursier/v1 - key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt', 'project/**/*.scala') }} + cache: 'sbt' - name: Cache node_modules - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ~/.npm @@ -49,9 +51,9 @@ jobs: ~/work/scommons-client/scommons-client/showcase/target/scala-2.13/scalajs-bundler/test/package-lock.json ~/work/scommons-client/scommons-client/ui/target/scala-2.13/scalajs-bundler/test/node_modules ~/work/scommons-client/scommons-client/ui/target/scala-2.13/scalajs-bundler/test/package-lock.json - key: ${{ runner.os }}-node_modules-cache-v2-${{ hashFiles('**/package-lock.json') }} + key: ${{ runner.os }}-node_modules-cache-v3-${{ hashFiles('**/package-lock.json') }} restore-keys: | - ${{ runner.os }}-node_modules-cache-v2- + ${{ runner.os }}-node_modules-cache-v3- - name: Extract Tag Name run: echo "TAG_NAME=$(echo ${GITHUB_REF##*/})" >> $GITHUB_ENV diff --git a/.gitignore b/.gitignore index 9ca2f95..b59253a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.class *.log +package-lock.json # sbt specific .cache diff --git a/.sbtopts b/.sbtopts new file mode 100644 index 0000000..cd59c68 --- /dev/null +++ b/.sbtopts @@ -0,0 +1,2 @@ +-J-Xmx2G +-J-XX:+UseG1GC diff --git a/README.md b/README.md index ff3908e..24bff8b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![CI](https://github.com/scommons/scommons-client/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/scommons/scommons-client/actions/workflows/ci.yml?query=workflow%3Aci+branch%3Amaster) [![Coverage Status](https://coveralls.io/repos/github/scommons/scommons-client/badge.svg?branch=master)](https://coveralls.io/github/scommons/scommons-client?branch=master) [![scala-index](https://index.scala-lang.org/scommons/scommons-client/scommons-client-ui/latest.svg)](https://index.scala-lang.org/scommons/scommons-client/scommons-client-ui) -[![Scala.js](https://www.scala-js.org/assets/badges/scalajs-1.5.0.svg)](https://www.scala-js.org) +[![Scala.js](https://www.scala-js.org/assets/badges/scalajs-1.8.0.svg)](https://www.scala-js.org) ## Scala Commons Client Common Scala.js, React.js web-client utilities and components. diff --git a/project/build.properties b/project/build.properties index 83be3cf..b46cfa1 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version = 1.5.2 \ No newline at end of file +sbt.version = 1.6.2 \ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt index 4b2f736..8e482e6 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,13 +1,13 @@ //resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/" resolvers += "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/" -//addSbtPlugin(("org.scommons.sbt" % "sbt-scommons-plugin" % "0.9.0-SNAPSHOT").changing()) -addSbtPlugin("org.scommons.sbt" % "sbt-scommons-plugin" % "0.9.0") +addSbtPlugin(("org.scommons.sbt" % "sbt-scommons-plugin" % "1.0.0-SNAPSHOT").changing()) +//addSbtPlugin("org.scommons.sbt" % "sbt-scommons-plugin" % "0.9.0") addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.4.3") addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.5") addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0") -addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.7.3") -addSbtPlugin("org.scoverage" % "sbt-coveralls" % "1.2.7") +addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.9.3") +addSbtPlugin("org.scoverage" % "sbt-coveralls" % "1.3.2") diff --git a/project/src/main/scala/common/Libs.scala b/project/src/main/scala/common/Libs.scala index f280c3a..d445037 100644 --- a/project/src/main/scala/common/Libs.scala +++ b/project/src/main/scala/common/Libs.scala @@ -6,9 +6,9 @@ import scommons.sbtplugin.project.CommonLibs object Libs extends CommonLibs { - val scommonsNodejsVersion = "0.9.0" - val scommonsReactVersion = "0.9.0" - private val scommonsApiVersion = "0.9.0" + val scommonsNodejsVersion = "1.0.0-SNAPSHOT" + val scommonsReactVersion = "1.0.0-SNAPSHOT" + private val scommonsApiVersion = "1.0.0-SNAPSHOT" private val sjsReactJsVer = "1.0.0" lazy val scommonsApiXhr = Def.setting("org.scommons.api" %%% "scommons-api-xhr" % scommonsApiVersion) diff --git a/project/src/main/scala/definitions/ClientModule.scala b/project/src/main/scala/definitions/ClientModule.scala index b3686d0..c961ef8 100644 --- a/project/src/main/scala/definitions/ClientModule.scala +++ b/project/src/main/scala/definitions/ClientModule.scala @@ -1,5 +1,6 @@ package definitions +import org.scoverage.coveralls.Imports.CoverallsKeys._ import sbt.Keys._ import sbt._ import scommons.sbtplugin.project.CommonModule @@ -20,6 +21,8 @@ object ClientModule { val settings: Seq[Setting[_]] = Seq( organization := "org.scommons.client", + coverallsService := GitHubActionsCI.jobId.map(_ => GitHubActionsCI), + // // publish/release related settings: // diff --git a/project/src/main/scala/definitions/ClientUi.scala b/project/src/main/scala/definitions/ClientUi.scala index 536fbfa..11c6f64 100644 --- a/project/src/main/scala/definitions/ClientUi.scala +++ b/project/src/main/scala/definitions/ClientUi.scala @@ -29,12 +29,10 @@ object ClientUi extends ScalaJsModule { ), Compile / npmDevDependencies ++= Seq( - "css-loader" -> "2.1.1", - "mini-css-extract-plugin" -> "0.12.0", - "resolve-url-loader" -> "3.1.2", - "url-loader" -> "4.1.1", - "webpack-node-externals" -> "2.5.2", - "webpack-merge" -> "4.2.1" + "css-loader" -> "6.7.2", + "mini-css-extract-plugin" -> "2.6.1", + "webpack-node-externals" -> "3.0.0", + "webpack-merge" -> "5.8.0" ) ) diff --git a/project/src/main/scala/definitions/GitHubActionsCI.scala b/project/src/main/scala/definitions/GitHubActionsCI.scala new file mode 100644 index 0000000..c04bf48 --- /dev/null +++ b/project/src/main/scala/definitions/GitHubActionsCI.scala @@ -0,0 +1,27 @@ +package definitions + +import org.scoverage.coveralls.CIService + +import scala.io.Source +import scala.util.parsing.json.{JSON, JSONObject} + +case object GitHubActionsCI extends CIService { + val name = "" + val jobId: Option[String] = sys.env.get("GITHUB_RUN_ID") + + // https://github.com/coverallsapp/github-action/blob/master/src/run.ts#L31-L40 + val pullRequest: Option[String] = for { + eventName <- sys.env.get("GITHUB_EVENT_NAME") if eventName.startsWith("pull_request") + payloadPath <- sys.env.get("GITHUB_EVENT_PATH") + source = Source.fromFile(payloadPath, "utf-8") + lines = try source.mkString finally source.close() + payload <- JSON.parseRaw(lines) + prNumber <- payload.asInstanceOf[JSONObject].obj.get("number") + } yield prNumber.toString.stripSuffix(".0") + + // https://docs.github.com/en/actions/learn-github-actions/environment-variables + val currentBranch: Option[String] = pullRequest match { + case Some(_) => sys.env.get("GITHUB_HEAD_REF") + case None => sys.env.get("GITHUB_REF_NAME") + } +} diff --git a/showcase/client.webpack.config.js b/showcase/client.webpack.config.js index f026126..4c351d8 100644 --- a/showcase/client.webpack.config.js +++ b/showcase/client.webpack.config.js @@ -1,4 +1,4 @@ -const merge = require("webpack-merge") +const { merge } = require("webpack-merge") const generatedConfig = require('./scalajs.webpack.config') const commonClientConfig = require("./scommons.webpack.config.js") diff --git a/showcase/test.webpack.config.js b/showcase/test.webpack.config.js index f363bbe..6a5d0b2 100644 --- a/showcase/test.webpack.config.js +++ b/showcase/test.webpack.config.js @@ -1,6 +1,6 @@ const nodeExternals = require('webpack-node-externals') -const merge = require("webpack-merge") +const { merge } = require("webpack-merge") const commonConfig = require("./scommons.webpack.config.js") module.exports = merge(commonConfig, { diff --git a/ui/src/main/resources/scommons.webpack.config.js b/ui/src/main/resources/scommons.webpack.config.js index 3f83a94..5b4f9f3 100644 --- a/ui/src/main/resources/scommons.webpack.config.js +++ b/ui/src/main/resources/scommons.webpack.config.js @@ -8,16 +8,11 @@ module.exports = { module: { rules: [{ test: /\.(ico|png|gif|jpe?g|svg)$/i, - use: { - loader: 'url-loader', - options: { - esModule: false - //limit: 8192 - } - }, + // More information here https://webpack.js.org/guides/asset-modules/ + type: "asset", exclude: /node_modules/ }, { - test: /\.css$/, + test: /\.css$/i, use: [{ loader: MiniCssExtractPlugin.loader, options: { @@ -27,14 +22,11 @@ module.exports = { loader: 'css-loader', options: { modules: true, - localIdentName: '[local]__[hash:base64:5]', - sourceMap: true + sourceMap: true, + modules: { + localIdentName: '[local]__[hash:base64:5]' + } } - }, { - loader: 'resolve-url-loader', - options: { - sourceMap: true - }, }], exclude: /node_modules/ }] diff --git a/ui/test.webpack.config.js b/ui/test.webpack.config.js index f363bbe..6a5d0b2 100644 --- a/ui/test.webpack.config.js +++ b/ui/test.webpack.config.js @@ -1,6 +1,6 @@ const nodeExternals = require('webpack-node-externals') -const merge = require("webpack-merge") +const { merge } = require("webpack-merge") const commonConfig = require("./scommons.webpack.config.js") module.exports = merge(commonConfig, {