Skip to content

Commit dd24d33

Browse files
authored
Merge pull request #1851 from polywrap/origin-0.11-dev
Prep Origin 0.11.1 | /workflows/release-pr
2 parents 4209728 + 62ff95e commit dd24d33

11 files changed

Lines changed: 127 additions & 85 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# Polywrap Origin (0.11.1)
2+
## Bugs
3+
**`polywrap` CLI:**
4+
* [PR-1847](https://github.com/polywrap/cli/pull/1847) **Fix IPFS deployer subdirectory duplication issue**
5+
* Fixed the IPFS deployer subdirectory issue described in IPFS Deployer possibly duplicates subdirectory paths when deploying (https://github.com/polywrap/cli/issues/1846)
6+
17
# Polywrap Origin (0.11.0)
28
## Features
39
**`polywrap` CLI:**

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.11.0
1+
0.11.1
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { GetPathToCliTestFiles } from "@polywrap/test-cases";
2+
import { readDirContents } from "../../lib/defaults/deploy-modules/ipfs/utils";
3+
import path from "path";
4+
5+
describe("IPFS Deployer", () => {
6+
const sampleBuildDir = path.join(
7+
GetPathToCliTestFiles(),
8+
"lib",
9+
"deployers",
10+
"mock-build-output"
11+
);
12+
13+
it("properly reads build dir contents and builds out an IPFS-compatible directory entry", async () => {
14+
const dirents = await readDirContents(sampleBuildDir, "");
15+
16+
expect(dirents).toMatchObject({
17+
name: "",
18+
files: [{ name: "wrap.info" }, { name: "wrap.wasm" }],
19+
directories: [
20+
{
21+
name: "docs",
22+
files: [{ name: "polywrap.docs.json" }],
23+
directories: [
24+
{
25+
name: "pages",
26+
files: [{ name: "readme.md" }],
27+
},
28+
],
29+
},
30+
],
31+
});
32+
});
33+
});

packages/cli/src/lib/defaults/deploy-modules/ipfs/index.ts

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,15 @@
11
import { DeployModule } from "../../../deploy";
2+
import { AddResult, ArgsAddDir, DirectoryEntry } from "./types";
3+
import { readDirContents } from "./utils";
24

35
import { Uri } from "@polywrap/core-js";
46
import { PolywrapClient } from "@polywrap/client-js";
57
import * as Sys from "@polywrap/sys-config-bundle-js";
68
import { PolywrapClientConfigBuilder } from "@polywrap/client-config-builder-js";
7-
import fs from "fs";
89

910
const isValidUri = (uri: Uri) =>
1011
uri.authority === "fs" || uri.authority === "file";
1112

12-
interface FileEntry {
13-
name: string;
14-
data: Uint8Array;
15-
}
16-
17-
interface DirectoryEntry {
18-
name: string;
19-
directories?: DirectoryEntry[];
20-
files?: FileEntry[];
21-
}
22-
23-
interface AddOptions {
24-
pin?: boolean;
25-
onlyHash?: boolean;
26-
wrapWithDirectory?: boolean;
27-
}
28-
29-
interface AddResult {
30-
name: string;
31-
hash: string;
32-
size: string;
33-
}
34-
35-
interface ArgsAddDir {
36-
data: DirectoryEntry;
37-
ipfsProvider: string;
38-
timeout?: number;
39-
addOptions?: AddOptions;
40-
}
41-
42-
const readDirContents = async (
43-
path: string,
44-
dirName: string
45-
): Promise<DirectoryEntry> => {
46-
const dirents: fs.Dirent[] = await fs.promises.readdir(path, {
47-
withFileTypes: true,
48-
});
49-
const data: DirectoryEntry = { name: dirName };
50-
51-
for (const dirent of dirents) {
52-
if (dirent.isDirectory()) {
53-
const subDir = await readDirContents(
54-
`${path}/${dirent.name}`,
55-
`${dirName}/${dirent.name}`
56-
);
57-
data.directories = data.directories ?? [];
58-
data.directories?.push(subDir);
59-
} else {
60-
const fileData = await fs.promises.readFile(`${path}/${dirent.name}`);
61-
data.files = data.files ?? [];
62-
data.files?.push({
63-
name: dirent.name,
64-
data: fileData,
65-
});
66-
}
67-
}
68-
69-
return data;
70-
};
71-
7213
class IPFSDeployer implements DeployModule {
7314
async execute(uri: Uri, config?: { gatewayUri: string }): Promise<Uri> {
7415
if (!isValidUri(uri)) {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
export interface FileEntry {
2+
name: string;
3+
data: Uint8Array;
4+
}
5+
6+
export interface DirectoryEntry {
7+
name: string;
8+
directories?: DirectoryEntry[];
9+
files?: FileEntry[];
10+
}
11+
12+
export interface AddOptions {
13+
pin?: boolean;
14+
onlyHash?: boolean;
15+
wrapWithDirectory?: boolean;
16+
}
17+
18+
export interface AddResult {
19+
name: string;
20+
hash: string;
21+
size: string;
22+
}
23+
24+
export interface ArgsAddDir {
25+
data: DirectoryEntry;
26+
ipfsProvider: string;
27+
timeout?: number;
28+
addOptions?: AddOptions;
29+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { DirectoryEntry } from "./types";
2+
3+
import fs from "fs";
4+
5+
export const readDirContents = async (
6+
path: string,
7+
dirName: string
8+
): Promise<DirectoryEntry> => {
9+
const dirents: fs.Dirent[] = await fs.promises.readdir(path, {
10+
withFileTypes: true,
11+
});
12+
const data: DirectoryEntry = { name: dirName };
13+
14+
for (const dirent of dirents) {
15+
if (dirent.isDirectory()) {
16+
const subDir = await readDirContents(
17+
`${path}/${dirent.name}`,
18+
`${dirent.name}`
19+
);
20+
data.directories = data.directories ?? [];
21+
data.directories?.push(subDir);
22+
} else {
23+
const fileData = await fs.promises.readFile(`${path}/${dirent.name}`);
24+
data.files = data.files ?? [];
25+
data.files?.push({
26+
name: dirent.name,
27+
data: fileData,
28+
});
29+
}
30+
}
31+
32+
return data;
33+
};

packages/test-cases/cases/cli/lib/deployers/mock-build-output/docs/pages/readme.md

Whitespace-only changes.

packages/test-cases/cases/cli/lib/deployers/mock-build-output/docs/polywrap.docs.json

Whitespace-only changes.

packages/test-cases/cases/cli/lib/deployers/mock-build-output/wrap.info

Whitespace-only changes.

packages/test-cases/cases/cli/lib/deployers/mock-build-output/wrap.wasm

Whitespace-only changes.

0 commit comments

Comments
 (0)