Skip to content

Commit f4bc5d2

Browse files
frostebiteclaude
andcommitted
feat(orchestrator): multi-storage support for GCP and Azure providers
Both providers now support four storage backends via gcpStorageType / azureStorageType: GCP Cloud Run: - gcs-fuse: Mount GCS bucket as POSIX filesystem (unlimited, best for large sequential I/O) - gcs-copy: Copy artifacts in/out via gsutil (simpler, no FUSE overhead) - nfs: Filestore NFS mount (true POSIX, good random I/O, up to 100 TiB) - in-memory: tmpfs (fastest, volatile, up to 32 GiB) Azure ACI: - azure-files: SMB file share mount (up to 100 TiB, premium throughput) - blob-copy: Copy artifacts in/out via az storage blob (no mount overhead) - azure-files-nfs: NFS 4.1 file share mount (true POSIX, no SMB lock overhead) - in-memory: emptyDir tmpfs (fastest, volatile, limited by container memory) New inputs: gcpStorageType, gcpFilestoreIp, gcpFilestoreShare, azureStorageType, azureBlobContainer. Constructor validates storage config and warns on missing prerequisites (e.g. NFS requires VPC connector/subnet). Co-Authored-By: Claude Opus 4.6 <[email protected]>
1 parent d856336 commit f4bc5d2

File tree

5 files changed

+465
-151
lines changed

5 files changed

+465
-151
lines changed

action.yml

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -291,12 +291,33 @@ inputs:
291291
description:
292292
'[Orchestrator] [Experimental] Google Cloud region for Cloud Run Jobs (e.g. us-central1).
293293
Defaults to the region input if empty.'
294+
gcpStorageType:
295+
required: false
296+
default: 'gcs-fuse'
297+
description:
298+
'[Orchestrator] [Experimental] Storage type for Cloud Run Jobs. Options:
299+
gcs-fuse (mount GCS bucket as filesystem, unlimited size, best for large sequential I/O),
300+
gcs-copy (copy artifacts in/out via gsutil, simpler, no FUSE overhead),
301+
nfs (Filestore NFS mount, true POSIX, good random I/O, up to 100 TiB),
302+
in-memory (tmpfs, fastest but volatile, up to 32 GiB).'
294303
gcpBucket:
295304
required: false
296305
default: ''
297306
description:
298307
'[Orchestrator] [Experimental] GCS bucket name for build artifact storage.
299-
Mounted via GCS FUSE for large filesystem support.'
308+
Used by gcs-fuse and gcs-copy storage types.'
309+
gcpFilestoreIp:
310+
required: false
311+
default: ''
312+
description:
313+
'[Orchestrator] [Experimental] Filestore instance IP address for NFS storage type.
314+
Required when gcpStorageType is nfs.'
315+
gcpFilestoreShare:
316+
required: false
317+
default: '/share1'
318+
description:
319+
'[Orchestrator] [Experimental] Filestore share name for NFS storage type.
320+
Defaults to /share1 (the Filestore default).'
300321
gcpMachineType:
301322
required: false
302323
default: 'e2-standard-4'
@@ -306,8 +327,8 @@ inputs:
306327
required: false
307328
default: '100'
308329
description:
309-
'[Orchestrator] [Experimental] Disk size in GB for Cloud Run Jobs. Supports up to 32GB
310-
in-memory or unlimited via GCS FUSE bucket mount.'
330+
'[Orchestrator] [Experimental] Disk size in GB for Cloud Run Jobs in-memory volumes.
331+
Only applies to in-memory storage type (max 32).'
311332
gcpServiceAccount:
312333
required: false
313334
default: ''
@@ -330,18 +351,32 @@ inputs:
330351
description:
331352
'[Orchestrator] [Experimental] Azure region for Container Instances (e.g. eastus, westeurope).
332353
Defaults to the region input if empty.'
354+
azureStorageType:
355+
required: false
356+
default: 'azure-files'
357+
description:
358+
'[Orchestrator] [Experimental] Storage type for Azure Container Instances. Options:
359+
azure-files (SMB file share mount, up to 100 TiB, premium throughput),
360+
blob-copy (copy artifacts in/out via az storage blob, no mount overhead),
361+
azure-files-nfs (NFS 4.1 file share mount, true POSIX, no SMB lock overhead),
362+
in-memory (emptyDir tmpfs, fastest but volatile, size limited by container memory).'
333363
azureStorageAccount:
334364
required: false
335365
default: ''
336366
description:
337-
'[Orchestrator] [Experimental] Azure Storage Account name for file share mounting.
338-
Uses Premium FileStorage for high-throughput large artifact I/O.'
367+
'[Orchestrator] [Experimental] Azure Storage Account name.
368+
Used by azure-files, azure-files-nfs, and blob-copy storage types.'
339369
azureFileShareName:
340370
required: false
341371
default: 'unity-builds'
342372
description:
343373
'[Orchestrator] [Experimental] Azure File Share name within the storage account.
344-
Supports up to 100 TiB per share.'
374+
Used by azure-files and azure-files-nfs storage types. Supports up to 100 TiB per share.'
375+
azureBlobContainer:
376+
required: false
377+
default: 'unity-builds'
378+
description:
379+
'[Orchestrator] [Experimental] Azure Blob container name for blob-copy storage type.'
345380
azureSubscriptionId:
346381
required: false
347382
default: ''

src/model/build-parameters.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,10 @@ class BuildParameters {
110110
// GCP Cloud Run (Experimental)
111111
public gcpProject!: string;
112112
public gcpRegion!: string;
113+
public gcpStorageType!: string;
113114
public gcpBucket!: string;
115+
public gcpFilestoreIp!: string;
116+
public gcpFilestoreShare!: string;
114117
public gcpMachineType!: string;
115118
public gcpDiskSizeGb!: string;
116119
public gcpServiceAccount!: string;
@@ -119,7 +122,9 @@ class BuildParameters {
119122
// Azure Container Instances (Experimental)
120123
public azureResourceGroup!: string;
121124
public azureLocation!: string;
125+
public azureStorageType!: string;
122126
public azureStorageAccount!: string;
127+
public azureBlobContainer!: string;
123128
public azureFileShareName!: string;
124129
public azureSubscriptionId!: string;
125130
public azureCpu!: string;
@@ -250,14 +255,19 @@ class BuildParameters {
250255
kubeStorageClass: OrchestratorOptions.kubeStorageClass,
251256
gcpProject: Input.gcpProject,
252257
gcpRegion: Input.gcpRegion,
258+
gcpStorageType: Input.gcpStorageType,
253259
gcpBucket: Input.gcpBucket,
260+
gcpFilestoreIp: Input.gcpFilestoreIp,
261+
gcpFilestoreShare: Input.gcpFilestoreShare,
254262
gcpMachineType: Input.gcpMachineType,
255263
gcpDiskSizeGb: Input.gcpDiskSizeGb,
256264
gcpServiceAccount: Input.gcpServiceAccount,
257265
gcpVpcConnector: Input.gcpVpcConnector,
258266
azureResourceGroup: Input.azureResourceGroup,
259267
azureLocation: Input.azureLocation,
268+
azureStorageType: Input.azureStorageType,
260269
azureStorageAccount: Input.azureStorageAccount,
270+
azureBlobContainer: Input.azureBlobContainer,
261271
azureFileShareName: Input.azureFileShareName,
262272
azureSubscriptionId: Input.azureSubscriptionId,
263273
azureCpu: Input.azureCpu,

src/model/input.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,10 +291,22 @@ class Input {
291291
return Input.getInput('gcpRegion') ?? '';
292292
}
293293

294+
static get gcpStorageType(): string {
295+
return Input.getInput('gcpStorageType') ?? 'gcs-fuse';
296+
}
297+
294298
static get gcpBucket(): string {
295299
return Input.getInput('gcpBucket') ?? '';
296300
}
297301

302+
static get gcpFilestoreIp(): string {
303+
return Input.getInput('gcpFilestoreIp') ?? '';
304+
}
305+
306+
static get gcpFilestoreShare(): string {
307+
return Input.getInput('gcpFilestoreShare') ?? '/share1';
308+
}
309+
298310
static get gcpMachineType(): string {
299311
return Input.getInput('gcpMachineType') ?? 'e2-standard-4';
300312
}
@@ -320,10 +332,18 @@ class Input {
320332
return Input.getInput('azureLocation') ?? '';
321333
}
322334

335+
static get azureStorageType(): string {
336+
return Input.getInput('azureStorageType') ?? 'azure-files';
337+
}
338+
323339
static get azureStorageAccount(): string {
324340
return Input.getInput('azureStorageAccount') ?? '';
325341
}
326342

343+
static get azureBlobContainer(): string {
344+
return Input.getInput('azureBlobContainer') ?? 'unity-builds';
345+
}
346+
327347
static get azureFileShareName(): string {
328348
return Input.getInput('azureFileShareName') ?? 'unity-builds';
329349
}

0 commit comments

Comments
 (0)