Skip to content

Commit

Permalink
Merge pull request #459 from This-Is-Fashion/add-scaleway-nodeversion…
Browse files Browse the repository at this point in the history
…-support

Add scaleway nodeversion support
  • Loading branch information
floydspace committed May 5, 2023
2 parents c16529d + a7a4ec0 commit ebd4fd4
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 6 deletions.
9 changes: 9 additions & 0 deletions .all-contributorsrc
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,15 @@
"contributions": [
"code"
]
},
{
"login": "sanderkooger",
"name": "Sander Kooger",
"avatar_url": "https://avatars.githubusercontent.com/u/19397354?v=4",
"profile": "https://thisisfashion.tv",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7,
Expand Down
28 changes: 25 additions & 3 deletions src/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,21 +221,29 @@ export type GoogleNodeProviderRuntimeMatcher<Versions extends number> = {
[Version in Versions as `nodejs${Version}`]: `node${Version}`;
};

export type ScalewayNodeProviderRuntimeMatcher<Versions extends number> = {
[Version in Versions as `node${Version}`]: `node${Version}`;
};

export type AwsNodeMatcher = AwsNodeProviderRuntimeMatcher<12 | 14 | 16 | 18>;

export type AzureNodeMatcher = AzureNodeProviderRuntimeMatcher<12 | 14 | 16 | 18>;

export type GoogleNodeMatcher = GoogleNodeProviderRuntimeMatcher<12 | 14 | 16 | 18>;

export type NodeMatcher = AwsNodeMatcher & AzureNodeMatcher & GoogleNodeMatcher;
export type ScalewayNodeMatcher = ScalewayNodeProviderRuntimeMatcher<12 | 14 | 16 | 18 | 20>;

export type NodeMatcher = AwsNodeMatcher & AzureNodeMatcher & GoogleNodeMatcher & ScalewayNodeMatcher;

export type AwsNodeMatcherKey = keyof AwsNodeMatcher;

export type AzureNodeMatcherKey = keyof AzureNodeMatcher;

export type GoogleNodeMatcherKey = keyof GoogleNodeMatcher;

export type NodeMatcherKey = AwsNodeMatcherKey | AzureNodeMatcherKey | GoogleNodeMatcherKey;
export type ScalewayNodeMatcherKey = keyof ScalewayNodeMatcher;

export type NodeMatcherKey = AwsNodeMatcherKey | AzureNodeMatcherKey | GoogleNodeMatcherKey | ScalewayNodeMatcherKey;

const awsNodeMatcher: AwsNodeMatcher = {
'nodejs18.x': 'node18',
Expand All @@ -258,12 +266,26 @@ const googleNodeMatcher: GoogleNodeMatcher = {
nodejs12: 'node12',
};

const nodeMatcher: NodeMatcher = { ...googleNodeMatcher, ...awsNodeMatcher, ...azureNodeMatcher };
const scalewayNodeMatcher: ScalewayNodeMatcher = {
node20: 'node20',
node18: 'node18',
node16: 'node16',
node14: 'node14',
node12: 'node12',
};

const nodeMatcher: NodeMatcher = {
...googleNodeMatcher,
...awsNodeMatcher,
...azureNodeMatcher,
...scalewayNodeMatcher,
};

export const providerRuntimeMatcher = Object.freeze<Record<string, NodeMatcher>>({
aws: awsNodeMatcher as NodeMatcher,
azure: azureNodeMatcher as NodeMatcher,
google: googleNodeMatcher as NodeMatcher,
scaleway: scalewayNodeMatcher as NodeMatcher,
});

export const isNodeMatcherKey = (input: unknown): input is NodeMatcherKey =>
Expand Down
10 changes: 7 additions & 3 deletions src/pack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,16 @@ export const filterFilesForZipPackage = ({
// eslint-disable-next-line max-statements
export async function pack(this: EsbuildServerlessPlugin) {
// GOOGLE Provider requires a package.json and NO node_modules

const providerName = this.serverless?.service?.provider?.name;
const isGoogleProvider = this.serverless?.service?.provider?.name === 'google';
const isScalewayProvider = this.serverless?.service?.provider?.name === 'scaleway'; // Scaleway can not have package: individually
const excludedFiles = isGoogleProvider ? [] : excludedFilesDefault;

// Google provider cannot use individual packaging for now - this could be built in a future release
if (isGoogleProvider && this.serverless?.service?.package?.individually) {
throw new Error('Packaging failed: cannot package function individually when using Google provider');
// Google and Scaleway providers cannot use individual packaging for now - this could be built in a future release
const isPackageIndividuallyNotSupported = isGoogleProvider || isScalewayProvider || false;
if (isPackageIndividuallyNotSupported && this.serverless?.service?.package?.individually) {
throw new Error(`Packaging failed: cannot package function individually when using ${providerName} provider`);
}

const { buildDirPath, workDirPath } = this;
Expand Down

0 comments on commit ebd4fd4

Please sign in to comment.