One of the requirements of Fedora packages that contain the result of
nodejs modules is to list them as Provides. Listing them manually in the
spec file would be a manual job, too error prone.
As solution, create the static list of nodejs modules as RPM Provides,
and include it in the spec file so it is used when building the RPM
package. This is done by querying npm for the list of locally installed
modules, and using jq to output that as Provides. There are manglings
done:
- the '@' in the name of a module is removed, and '/' replaced with '-'
- e.g. "-alpha" or "-beta-" in the version of a module are turned into
"~something", as "-" is not accepted as version by RPM (whereas the
tilde is the compliant way for pre-releases in versioning guidelines)
Sadly this static inclusion is the only possible way at the moment,
as a in-package dependency generator is not possible, nor any other form
of dynamic filling of package relationships only at build/install time.
Cockpit recently changed to an ESM build system [1]. Bump
COCKPIT_REPO_COMMIT to that and follow suit.
This does not work with old node.js 10 any more which is still the
default in RHEL 8. Install the newer version 16 instead.
[1] https://github.com/cockpit-project/cockpit/pull/18366
/usr is package manager territory, and not even writable on OSTree based
systems such as Fedora CoreOS or RHEL Edge. This has been common and
good practice in autotools for decades.
You can still override this with `make install PREFIX=...`. Use that in
the RPM spec file.
Include CSS linting by default for our CSS/SCSS files, originally
introduced in cockpit. The stylelint configuration is copied from
760a4628282e02fbcef3.
- Generalize NODE_MODULES_TEST comment to apply for both direct
`npm install` and git checkouts.
- Drop obsolete touch commands from dist tarfile build.
- Consistently use NODE_MODULES_TEST constant.
- Better sorting of .PHONY, and add missing prepare-check.
This reduces the diff to cockpit-podman.
Use the html2po and manifest2po tools that we already check out from
cockpit repo pkg/lib.
These tools switched to a new argument parser library (`argparse`) in
cockpit-project/cockpit#16271, so add it to our package.json and drop
`stdio`.
Drop our old copies.
I checked the result of building `po/starter-kit.pot` before and after
the change, and aside from the timestamp, it's identical.
Cherry-picked from cockpit-podman commit bf53f801b17ba6.
Replace the two rules for test/common and pkg/lib with a single rule
based on `git-archive`, avoiding the use of racy `FETCH_HEAD` and
side-effecting `git-checkout`. This lets us drop the `flock` call, and
introduces some logic to avoid the fetch in case we already have it.
We'll hardcode shas from here on out: it's more secure (ie:
tamperproof), and more performant (since we don't have to check the ref
if we already have the object), in addition to being easier to work with
in terms of the required git commands.
Use pkg/lib/cockpit.js as a stamp file.
This rule will make it easier to expand to more files in the future.
One drawback is that when we want to update files from the cockpit/
repository, we'll now need to do it in lock-step: using new API from
testlib will force us to adjust to PatternFly changes, for example.
Cherry-picked from cockpit-podman commit cfc05e730d6f5d.
Keep pkg/lib in the same location as it is in the cockpit repository,
and adjust the include path accordingly.
This makes the production of the .pot file somewhat more deterministic:
previously, it would either include or not include the strings from
pkg/lib depending on if it had been checked out or not. Now it never
includes them.
Cherry-picked from cockpit-podman commit a70630be2139a.
RHEL 8 has node 10, which is too old for current
jest-worker/eslint/stylelint NPM modules.
The webpack rebuild during RPM build was introduced to satisfy Fedora
packaging policy, but it's not a requirement on RHEL 8. So just disable
it there.