Commit graph

64 commits

Author SHA1 Message Date
Dr Mark C. Sinclair
429cad0703 chore(developer): change unnecessary template literals to single quotes in tests 2024-02-17 15:58:33 +07:00
Dr Mark C. Sinclair
62589599a0 chore(developer): rename fixture file in 'ERROR_FileTypeNotFound (BuildModelInfo; .model.ts)' 2024-02-17 15:58:32 +07:00
Dr Mark C. Sinclair
f4b1c968cc chore(developer): changes to files that should have been added to previous commits 2024-02-17 15:58:31 +07:00
Dr Mark C. Sinclair
1e292c34dc chore(developer): rename fixture file in 'ERROR_FileTypeNotFound (BuildModelInfo; .kps)' test 2024-02-17 15:58:29 +07:00
Dr Mark C. Sinclair
1a53c9d074 chore(developer): rename fixture file in 'ERROR_FileTypeNotFound (BuildKeyboardInfo)' test 2024-02-17 15:58:28 +07:00
Dr Mark C. Sinclair
f1fbb5a86a chore(developer): change folder name in ERROR_InvalidProjectFolder (no source folder) test' 2024-02-17 15:58:27 +07:00
Dr Mark C. Sinclair
ec8d2339a6 chore(developer): add ERROR_CannotCreateFolder infrastructure message unit test 2024-02-17 15:58:26 +07:00
Dr Mark C. Sinclair
1023c7c902 chore(developer): add ERROR_InvalidProjectFolder (no source folder) unit test 2024-02-17 15:58:20 +07:00
Dr Mark C. Sinclair
eb68475d35 chore(developer): correct error message in ERROR_UnknownFileFormat test 2024-02-17 15:56:33 +07:00
Dr Mark C. Sinclair
9fa6d23a54 chore(developer): change to reflect addition of outfile parameter to build methods 2024-02-17 15:56:32 +07:00
Dr Mark C. Sinclair
91524edfa9 chore(developer): add additional file type asserts to ERROR_FileTypeNotFound BuildModelInfo tests 2024-02-17 15:56:30 +07:00
Dr Mark C. Sinclair
5ef356a194 chore(developer): correct .kpj fixtures for ERROR_FileTypeNotFound BuildModelInfo tests 2024-02-17 15:56:29 +07:00
Dr Mark C. Sinclair
ca3362469f chore(developer): add ERROR_FileTypeNotFound (BuildModelInfo; .kps) unit test 2024-02-17 15:56:28 +07:00
Dr Mark C. Sinclair
8af4b93120 chore(developer): add ERROR_FileTypeNotFound (BuildModelInfo; .model.ts) unit test 2024-02-17 15:56:26 +07:00
Dr Mark C. Sinclair
f39ba347b2 chore(developer): add ERROR_FileTypeNotFound (BuildKeyboardInfo) unit test 2024-02-17 15:56:25 +07:00
Dr Mark C. Sinclair
e4821c872b chore(developer): add ERROR_UnknownFileFormat unit test and supporting endpoint 2024-02-17 15:55:59 +07:00
Dr Mark C. Sinclair
85d95ffa4f chore(developer): refactor to rename fixture/invalid-project to invalid-projects 2024-02-17 15:55:30 +07:00
Dr Mark C. Sinclair
015b81014c chore(developer): add ERROR_NotAProjectFile unit test 2024-02-17 15:54:03 +07:00
Dr Mark C. Sinclair
24e7105a9b chore(developer): add ERROR_InvalidProjectFile unit test 2024-02-17 15:52:27 +07:00
Dr Mark C. Sinclair
af6ccc4d83 chore(developer): add ERROR_OutFileNotValidForProjects unit test 2024-02-17 15:51:08 +07:00
Dr Mark C. Sinclair
3f383e64e3 chore(developer): correct typo in error_file_type_not_recognized.xxx 2024-02-17 15:49:45 +07:00
Dr Mark C. Sinclair
5301f7a176 chore(developer): add ERROR_FileTypeNotRecognized test 2024-02-17 15:49:44 +07:00
Dr Mark C. Sinclair
09739656ea chore(developer): add ERROR_FileDoesNotExist test 2024-02-17 15:49:42 +07:00
Dr Mark C. Sinclair
29b6601018 fix(developer): ensure project populate files actually adds files and test 2024-02-06 10:39:47 +00:00
Marc Durdin
d2580c6a73
Merge pull request #10258 from keymanapp/feat/developer/10150-control-message-severity
feat(developer): add `-m` parameter to kmc to control message severity
2024-01-16 14:01:27 +11:00
Marc Durdin
ee6814c67a
Merge pull request #10218 from keymanapp/chore/developer/10162-honor-prompt-to-upgrade-in-kmc
chore(developer): honor prompt to upgrade in kmc
2024-01-02 15:36:48 +11:00
Marc Durdin
0ebc5d6aab feat(developer): add -m parameter to control message display
Fixes #10150.

This feature adds a command line parameter to kmc to control the
severity of INFO, HINT and WARN level messages. The severity of any of
these messages can be reduced all the way to INFO, or even disabled, or
increased to ERROR. The compiler and the reporter will honour the new
code and fail builds when failure-level codes are encountered.

Inputs are validated against all the available compiler messages in all
modules. This also provides a good pathway for automated future
documentation generation of compiler messages.

In order to process the input parameters cleanly, have refactored some
of kmc's build command logic.

This commit increases code coverage for kmc to roughly 50%.
2023-12-14 13:17:29 +07:00
Marc Durdin
60bb1e4d9e chore(developer): Merge branch 'master' into feat/developer/9473-kmc-module-api-consolidation 2023-12-13 05:01:20 +07:00
Marc Durdin
3d250fecc0 chore(developer): ensure unit tests have default options set 2023-12-12 07:38:13 +07:00
Marc Durdin
f9c3be09a6 refactor(developer): move outFile out of CompilerBaseOptions
`outFile` is not a compiler option, and so it should not be a part of
the `CompilerBaseOptions` interface. This formally separates the
command-line options from the compiler options, which eliminates a
number of restrictive structures.
2023-12-11 09:47:23 +07:00
Marc Durdin
e5c4f7134d feat(developer): kmc emit hint if project file is old version
Fixes #10147.
2023-12-06 14:01:21 +07:00
Marc Durdin
65b7b20dc8 chore(developer): handle project version checks cleanly in kmc
Relates to #9948.

While the schema validation does check the version already, it gives a
fairly obtuse message, and we can do better.

Found a secondary issue with a iterator type guard needed in
kpj-file-reader when preparing unit test, which was probably masked in
other tests by not verifying all messages generated, so updated all
infrastructure message tests to verify the full set of messages
generated.
2023-11-14 06:24:28 +07:00
Marc Durdin
693aee5c99
Merge branch 'epic/package-metadata' into chore/merge-master-into-package-metadata 2023-10-04 19:34:16 +11:00
Marc Durdin
c168ef01cb feat(developer): show an INFO message when warnings have failed a build
Fixes #9610.

If a build fails when "treat warnings as errors" is on, but there are
only warnings and no error messages, it can be confusing for the
developer. Adds the following `INFO_WarningsHaveFailedBuild` message:

`The build failed because option "treat warnings as errors" is enabled
and there are one or more warnings.`
2023-10-02 12:36:54 +07:00
Marc Durdin
ccfefa279f chore: make const for date format 2023-09-12 09:26:03 +01:00
Marc Durdin
6624b8b344 feat(developer): use git's last commit date for keyboard_info 2023-08-17 13:25:29 +07:00
Marc Durdin
a7f8123e56 feat(developer): support building .keyboard_info without source version
Relates to #9351.

Adds support for building a .keyboard_info file without having source
.keyboard_info file:

* Constructs a default source .keyboard_info in memory
* Hints if license is missing
* If LICENSE.md is present, verifies it matches the MIT license text
* Adds project option to turn on or off metadata generation. This will
  default to False for version 1.0 projects, and to True for version 2.0
  projects. This means that the keyboard repository will need a PR to
  enable metadata generation for existing projects in the repository,
  but this is important to avoid breaking builds for existing projects
  that are not in the repository.
* Turns on additional c8 coverage for kmc projects
2023-08-16 12:47:37 +07:00
Marc Durdin
fa19eea873 chore(developer): improve kmc sentry reporting on fatal build errors
kmc already reported unhandled exceptions, but any handled fatal errors
were captured and only reported to the user. It is better to report
these to Sentry as these are still unexpected.

I have refactored all the fatal exception messages in various kmc
modules to use a common mechanism, keeping all the Sentry integration in
kmc, now passing exception data up in the `CompilerEvent.exceptionVar`
property.

* I took the opportunity to rename messages.ts to
  infrastructureMessages.ts

* @types/chai was missing which gave intellisense errors in vscode

* normal exit of kmc now provides an opportunity for error reports to
  Sentry to be finalized

* Added a unit test for fatal errors in kmc

* Added a manual test pathway with `SENTRY_CLIENT_TEST_BUILD_EXCEPTION`
  env var to trip the build fatal error mechanism and verify that it
  looks ok; the following shows test runs demonstrate how fatal build
  errors are reported:

```
mcdurdin@THARK MINGW64 /c/Projects/keyman/app/developer/src/kmc (chore/developer/report-fatal-compiler-errors-to-sentry)
$ SENTRY_CLIENT_TEST_BUILD_EXCEPTION=1 node . --error-reporting build
fatal KM05001: Unexpected exception: Error: Test exception from SENTRY_CLIENT_TEST_BUILD_EXCEPTION

Call stack:
Error: Test exception from SENTRY_CLIENT_TEST_BUILD_EXCEPTION
    at build (file:///C:/Projects/keyman/app/developer/src/kmc/build/src/commands/build.js:78:19)
    at Command.<anonymous> (file:///C:/Projects/keyman/app/developer/src/kmc/build/src/commands/build.js:66:24)
    at Command.listener [as _actionHandler] (C:\Projects\keyman\app\node_modules\commander\lib\command.js:482:17)
    at C:\Projects\keyman\app\node_modules\commander\lib\command.js:1283:65
    at Command._chainOrCall (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1177:12)
    at Command._parseCommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1283:27)
    at C:\Projects\keyman\app\node_modules\commander\lib\command.js:1081:27
    at Command._chainOrCall (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1177:12)
    at Command._dispatchSubcommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1077:23)
    at Command._parseCommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1248:19)

    This error has been automatically reported to the Keyman team.
      Identifier:  6f0fca1a26694c22b03f02b2463d39c5
      Application: Keyman Developer
      Reported at: https://sentry.io/organizations/keyman/projects/keyman-developer/events/6f0fca1a26694c22b03f02b2463d39c5/

mcdurdin@THARK MINGW64 /c/Projects/keyman/app/developer/src/kmc (chore/developer/report-fatal-compiler-errors-to-sentry)
$ SENTRY_CLIENT_TEST_BUILD_EXCEPTION=1 node . --no-error-reporting build
fatal KM05001: Unexpected exception: Error: Test exception from SENTRY_CLIENT_TEST_BUILD_EXCEPTION

Call stack:
Error: Test exception from SENTRY_CLIENT_TEST_BUILD_EXCEPTION
    at build (file:///C:/Projects/keyman/app/developer/src/kmc/build/src/commands/build.js:78:19)
    at Command.<anonymous> (file:///C:/Projects/keyman/app/developer/src/kmc/build/src/commands/build.js:66:24)
    at Command.listener [as _actionHandler] (C:\Projects\keyman\app\node_modules\commander\lib\command.js:482:17)
    at C:\Projects\keyman\app\node_modules\commander\lib\command.js:1283:65
    at Command._chainOrCall (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1177:12)
    at Command._parseCommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1283:27)
    at C:\Projects\keyman\app\node_modules\commander\lib\command.js:1081:27
    at Command._chainOrCall (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1177:12)
    at Command._dispatchSubcommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1077:23)
    at Command._parseCommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1248:19)
```
2023-08-09 09:34:44 +07:00
Marc Durdin
b369fbb89b feat(developer): implement kmc keyboard_info compiler
Fixes missing components of the kmc-keyboard-info compiler and
integration into kmc. Lots of cleanup making sure that the compiler
actually generates expected output against the keyboards repository.
2023-07-25 14:21:58 +07:00
Marc Durdin
0e65d7703c feat(developer): add model_info and keyboard_info build activities to kmc
Adds ability to build .model_info and .keyboard_info files to kmc. Note
that .keyboard_info building is currently a stub as the .keyboard_info
compiler has not yet been translated to TypeScript, which will come in a
subsequent PR.

Note that .model_info and .keyboard_info builds depend on the project
loader, as they reference both keyboard and package source files when
constructing the metadata files.

Also:
* Fixed a deep reference to KeymanDeveloperProjectFile.
* Split the project loader into a utility unit.
* Marked the .kpj fileType field as deprecated, as it is easily
  extrapolated from the filename, with the aim to remove it entirely
  from version 2.0 projects.

@keymanapp-test-bot skip
2023-07-18 12:14:46 +07:00
Marc Durdin
192dafa6ea feat(developer): support file lists in kmc
Fixes #9162.

Adds support for `@files.txt` parameters in kmc. Files listed in this
file, separated by line breaks, will be added to the input file list,
relative to the path of files.txt.

The file can include comments in lines starting with '#' and ignores
whitespace before and after each filename.
2023-07-17 08:15:45 +07:00
Marc Durdin
111de31fd6 chore(developer): fix tests and linting 2023-07-12 12:08:48 +07:00
Marc Durdin
fa3980f598 feat(developer): deploy kmc as ES module
Deploy kmc as an ES module, forced now by top-level await that we use in
the sentry load.

Moved NodeCompilerCallbacks to same util folder as schemas are found in,
to avoid rewriting schema loading with imports in this PR. It belongs
better there than messages/ anyway.

Distributed files are now .mjs. Removed --enable-source-maps from
launchers as logging will be managed with sentry anyway.
2023-07-12 10:20:35 +07:00
Marc Durdin
31083c2ed3 chore(developer): unit test for compilerWarningsAsErrors
Also adds inverse option -W, --no-compiler-warnings-as-errors
command line parameter.
2023-07-11 12:14:51 +07:00
Marc Durdin
d6721f68ba chore: Merge branch 'feature-kmc-kmw' into chore/merge-master-into-feature-kmc-kmw 2023-06-23 15:44:06 +07:00
Marc Durdin
cbc5b13034 fix(developer): keep kmc-kmn messages within namespace
Fixes #8998.

kmc-kmn messages were broken down into sub-namespaces, but the range
overlapped the reserved namespace mask range. Fixed the message values,
added a new test to the verifyCompilerMessagesObject function to verify
that messages don't creep outside their namespace, and defined new
masks (in CompilerErrorSeverity enum... hmm) to help.

I opted to remove the leading `0` in the messages for kmc-kmn as I had
to correct a number of them anyway, but not the messages in remaining
units at this time (it's not an error, but just slightly misleading as
we only have 12 bits, not 16 to play with).

It is safe to reassign these messages as they were only assigned in 17.0
alpha.
2023-06-13 06:22:15 +07:00
Marc Durdin
459f42b273 chore(developer): refactor CompilerOptions
Part 1 of the `CompilerOptions` reorg. kmc now uses `CompilerOptions`
throughout, and `CompilerBaseOptions` maps to the set of options
available to all activities.
2023-06-10 14:27:39 +07:00
Marc Durdin
db06dfd810 chore(developer): Merge branch 'feature-kmc-kmw' into feat/developer/kmc-analyze 2023-06-09 14:00:14 +07:00
Marc Durdin
fde428fb70 chore(developer): add logLevel to kmc
Tidies up silent vs quiet vs verbose by adding logLevel as an option.

* Notes that we need to consolidate all the various CompilerOptions
  interfaces before they get too much further out of hand.
* Cleans up a couple of other minor TODO items.
2023-06-09 10:23:06 +07:00
Marc Durdin
0ed0de8ea5 chore(developer): fix path ref 2023-06-08 09:49:14 +07:00