@@ -6,7 +6,7 @@ const inquirer = require("inquirer");
6
6
const { messagingListTopics } = require("./messaging");
7
7
const { teamsList } = require("./teams");
8
8
const { projectsGet } = require("./projects");
9
- const { functionsList, functionsDownloadDeployment } = require("./functions");
9
+ const { functionsList, functionsDownloadDeployment, functionsListDeployments } = require("./functions");
10
10
const { databasesGet, databasesListCollections, databasesList } = require("./databases");
11
11
const { storageListBuckets } = require("./storage");
12
12
const { localConfig } = require("../config");
@@ -97,45 +97,70 @@ const pullFunctions = async ({ code, withVariables }) => {
97
97
98
98
if (code === false) {
99
99
warn("Source code download skipped.");
100
- } else if (!func['deployment']) {
101
- warn("Source code download skipped because function doesn't have active deployment.");
102
- } else {
103
- if (allowCodePull === null) {
104
- const codeAnswer = await inquirer.prompt(questionsPullFunctionsCode);
105
- allowCodePull = codeAnswer.override;
100
+ continue;
101
+ }
102
+
103
+ if (allowCodePull === null) {
104
+ const codeAnswer = await inquirer.prompt(questionsPullFunctionsCode);
105
+ allowCodePull = codeAnswer.override;
106
+ }
107
+
108
+ if (!allowCodePull) {
109
+ continue;
110
+ }
111
+
112
+ let deploymentId = null;
113
+
114
+ try {
115
+ const fetchResponse = await functionsListDeployments({
116
+ functionId: func['$id'],
117
+ queries: [
118
+ JSON.stringify({ method: 'limit', values: [1] }),
119
+ JSON.stringify({ method: 'orderDesc', values: ['$id'] })
120
+ ],
121
+ parseOutput: false
122
+ });
123
+
124
+ if (fetchResponse['total'] > 0) {
125
+ deploymentId = fetchResponse['deployments'][0]['$id'];
106
126
}
107
127
108
- if (allowCodePull) {
109
- log("Pulling active deployment's code ...");
110
-
111
- const compressedFileName = `${func['$id']}-${+new Date()}.tar.gz`
112
- await functionsDownloadDeployment({
113
- functionId: func['$id'],
114
- deploymentId: func['deployment'],
115
- destination: compressedFileName,
116
- overrideForCli: true,
117
- parseOutput: false
118
- });
119
-
120
- tar.extract({
121
- sync: true,
122
- cwd: func['path'],
123
- file: compressedFileName,
124
- strict: false,
125
- });
126
-
127
- fs.rmSync(compressedFileName);
128
-
129
- if (withVariables) {
130
- const envFileLocation = `${func['path']}/.env`
131
- try {
132
- fs.rmSync(envFileLocation);
133
- } catch {
134
- }
135
-
136
- fs.writeFileSync(envFileLocation, func['vars'].map(r => `${r.key}=${r.value}\n`).join(''))
137
- }
128
+ } catch {
129
+ }
130
+
131
+ if (deploymentId === null) {
132
+ log("Source code download skipped because function doesn't have any available deployment");
133
+ continue;
134
+ }
135
+
136
+ log("Pulling latest deployment code ...");
137
+
138
+ const compressedFileName = `${func['$id']}-${+new Date()}.tar.gz`
139
+ await functionsDownloadDeployment({
140
+ functionId: func['$id'],
141
+ deploymentId,
142
+ destination: compressedFileName,
143
+ overrideForCli: true,
144
+ parseOutput: false
145
+ });
146
+
147
+ tar.extract({
148
+ sync: true,
149
+ cwd: func['path'],
150
+ file: compressedFileName,
151
+ strict: false,
152
+ });
153
+
154
+ fs.rmSync(compressedFileName);
155
+
156
+ if (withVariables) {
157
+ const envFileLocation = `${func['path']}/.env`
158
+ try {
159
+ fs.rmSync(envFileLocation);
160
+ } catch {
138
161
}
162
+
163
+ fs.writeFileSync(envFileLocation, func['vars'].map(r => `${r.key}=${r.value}\n`).join(''))
139
164
}
140
165
}
141
166
0 commit comments