Skip to content

Commit df302eb

Browse files
committed
node: Add tests for custom registries
This adds a test-time dependency on a running Verdaccio instance. Signed-off-by: Ryan Gonzalez <ryan.gonzalez@collabora.com>
1 parent 0fd523f commit df302eb

File tree

14 files changed

+168
-3
lines changed

14 files changed

+168
-3
lines changed

.github/workflows/node.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ jobs:
2626
poetry-version:
2727
- '1.1.13'
2828
runs-on: ubuntu-22.04
29+
services:
30+
verdaccio:
31+
image: verdaccio/verdaccio
32+
ports:
33+
- 4873:4873
2934
steps:
3035
- uses: actions/checkout@v3
3136
- name: Configure git
@@ -45,6 +50,8 @@ jobs:
4550
flatpak --user remote-add flathub https://flathub.org/repo/flathub.flatpakrepo
4651
flatpak --user install -y flathub \
4752
org.freedesktop.{Platform,Sdk{,.Extension.node{14,16}}}//21.08
53+
- name: Setup the local npm registry
54+
run: tools/setup-local-registry.sh
4855
- name: Install dependencies
4956
run: poetry install
5057
- name: Run checks

node/README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,19 @@ $ poetry run pytest -n auto
321321
Note that these tests can take up quite a bit of space in /tmp, so if you hit `No space
322322
left on device` errors, try expanding `/tmp` or changing `$TMPDIR`.
323323

324+
### Local Registry
325+
326+
Some of the tests require a local npm registry to work. For this purpose, you can use
327+
[Verdaccio](https://verdaccio.org/), preferably via Docker / podman:
328+
329+
```bash
330+
$ docker run --rm -it -p 4873:4873 verdaccio/verdaccio
331+
```
332+
333+
Then run `tools/setup-local-registry.sh` to set up this registry with a pre-published
334+
package. (Note that running it twice will result in an error, since it tries to publish
335+
the same package twice.)
336+
324337
### Utility Scripts
325338

326339
A few utility scripts are included in the `tools` directory:
@@ -333,6 +346,8 @@ A few utility scripts are included in the `tools` directory:
333346
- `lockfile-utils.sh peek-cache PACKAGE-MANAGER PACKAGE` will install the dependencies
334347
from the corresponding lockfile and then extract the resulting package cache (npm)
335348
or mirror directory (yarn), for closer examination.
349+
- `setup-local-registry.sh` will set up a local npm registry as [described
350+
above](#local-registry).
336351
- `b64-to-hex.sh` will convert a base64 hash value from npm into hex, e.g.:
337352
```
338353
$ echo x+sXyT4RLLEIb6bY5R+wZnt5pfk= | tools/b64-to-hex.sh

node/flatpak_node_generator/providers/yarn.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ def process_lockfile(self, lockfile: Path) -> Iterator[Package]:
110110

111111

112112
class YarnConfigProvider(ConfigProvider):
113+
def __init__(self) -> None:
114+
self._npm_config_provider = NpmConfigProvider()
115+
113116
@property
114117
def _filename(self) -> str:
115118
return '.yarnrc'
@@ -121,7 +124,7 @@ def parse_config(self, path: Path) -> Dict[str, Any]:
121124
def load_config(self, lockfile: Path) -> Config:
122125
config = super().load_config(lockfile)
123126

124-
npm_config = NpmConfigProvider().load_config(lockfile)
127+
npm_config = self._npm_config_provider.load_config(lockfile)
125128
config.merge_new_keys_only(npm_config.data)
126129

127130
return config

node/tests/conftest.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,14 @@ class ProviderPaths:
170170
def package_json(self) -> Path:
171171
return self.root / 'package.json'
172172

173+
@property
174+
def npmrc(self) -> Path:
175+
return self.root / '.npmrc'
176+
177+
@property
178+
def yarnrc(self) -> Path:
179+
return self.root / '.yarnrc'
180+
173181
@property
174182
def lockfile_source(self) -> Path:
175183
if self.type == ProviderFactoryType.NPM:
@@ -192,6 +200,11 @@ def lockfile_dest(self) -> str:
192200
def add_to_manifest(self, gen: ManifestGenerator) -> None:
193201
gen.add_local_file_source(self.package_json)
194202
gen.add_local_file_source(self.lockfile_source, Path(self.lockfile_dest))
203+
204+
for rc in self.npmrc, self.yarnrc:
205+
if rc.exists():
206+
gen.add_local_file_source(rc)
207+
195208
if self.type == ProviderFactoryType.YARN:
196209
gen.add_data_source(
197210
f'yarn-offline-mirror "./flatpak-node/yarn-mirror"', Path('.yarnrc')
@@ -266,7 +279,12 @@ async def generate_modules(
266279
)
267280
special = SpecialSourceProvider(gen, self.special)
268281

269-
with factory.create_module_provider(gen, special) as module:
282+
config_provider = factory.create_config_provider()
283+
lockfile_configs = {
284+
paths.lockfile_source: config_provider.load_config(paths.lockfile_source),
285+
}
286+
287+
with factory.create_module_provider(gen, special, lockfile_configs) as module:
270288
for package in factory.create_lockfile_provider().process_lockfile(
271289
paths.lockfile_source
272290
):
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"@flatpak-node-generator-tests:registry" = "http://localhost:4873"
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name": "@flatpak-node-generator-tests/custom-registry",
3+
"version": "1.0.0",
4+
"lockfileVersion": 1,
5+
"requires": true,
6+
"dependencies": {
7+
"@flatpak-node-generator-tests/registry-package": {
8+
"version": "1.0.0",
9+
"resolved": "http://localhost:4873/@flatpak-node-generator-tests%2fregistry-package/-/registry-package-1.0.0.tgz",
10+
"integrity": "sha512-dyHOPsVMVjCUtyL7jeqs+ISkpRnXV88lkObwNJvYl33f/nWiKj/luzfoE4wgYOcmRuYwLNgAV/Y2SD19aHWDng=="
11+
}
12+
}
13+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"name": "@flatpak-node-generator-tests/custom-registry",
3+
"version": "1.0.0",
4+
"lockfileVersion": 2,
5+
"requires": true,
6+
"packages": {
7+
"": {
8+
"name": "@flatpak-node-generator-tests/custom-registry",
9+
"version": "1.0.0",
10+
"dependencies": {
11+
"@flatpak-node-generator-tests/registry-package": "*"
12+
}
13+
},
14+
"node_modules/@flatpak-node-generator-tests/registry-package": {
15+
"version": "1.0.0",
16+
"resolved": "http://localhost:4873/@flatpak-node-generator-tests%2fregistry-package/-/registry-package-1.0.0.tgz",
17+
"integrity": "sha512-dyHOPsVMVjCUtyL7jeqs+ISkpRnXV88lkObwNJvYl33f/nWiKj/luzfoE4wgYOcmRuYwLNgAV/Y2SD19aHWDng=="
18+
}
19+
},
20+
"dependencies": {
21+
"@flatpak-node-generator-tests/registry-package": {
22+
"version": "1.0.0",
23+
"resolved": "http://localhost:4873/@flatpak-node-generator-tests%2fregistry-package/-/registry-package-1.0.0.tgz",
24+
"integrity": "sha512-dyHOPsVMVjCUtyL7jeqs+ISkpRnXV88lkObwNJvYl33f/nWiKj/luzfoE4wgYOcmRuYwLNgAV/Y2SD19aHWDng=="
25+
}
26+
}
27+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"name": "@flatpak-node-generator-tests/custom-registry",
3+
"version": "1.0.0",
4+
"dependencies": {
5+
"@flatpak-node-generator-tests/registry-package": "*"
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const fs = require('fs')
2+
3+
module.exports = {
4+
sayHello: () => {
5+
fs.writeFileSync('hello.txt', 'Hello!')
6+
},
7+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"name": "@flatpak-node-generator-tests/registry-package",
3+
"version": "1.0.0"
4+
}

0 commit comments

Comments
 (0)