1use crate::client::{Client, decode_response, handle_empty_response};
4use crate::errors::Error;
5use crate::types::*;
6
7impl Client {
8 pub async fn list_org_runners(
10 &self,
11 org: &str,
12 opts: Option<&QueryOptions>,
13 ) -> Result<ActionRunners, Error> {
14 let path = format!("/orgs/{}/actions/runners", org);
15 let resp = self.send_get(&path, opts).await?;
16 decode_response(resp).await
17 }
18
19 pub async fn create_org_runner_registration_token(
21 &self,
22 org: &str,
23 ) -> Result<RegistrationToken, Error> {
24 let path = format!("/orgs/{}/actions/runners/registration-token", org);
25 let resp = self.send_post(&path, Option::<&()>::None).await?;
26 decode_response(resp).await
27 }
28
29 pub async fn get_org_runner(&self, org: &str, runner_id: f64) -> Result<ActionRunner, Error> {
31 let path = format!("/orgs/{}/actions/runners/{}", org, runner_id);
32 let resp = self.send_get(&path, None).await?;
33 decode_response(resp).await
34 }
35
36 pub async fn delete_org_runner(&self, org: &str, runner_id: f64) -> Result<(), Error> {
38 let path = format!("/orgs/{}/actions/runners/{}", org, runner_id);
39 let resp = self.send_delete(&path, Option::<&()>::None).await?;
40 handle_empty_response(resp).await
41 }
42
43 pub async fn list_org_variables(
45 &self,
46 org: &str,
47 opts: Option<&QueryOptions>,
48 ) -> Result<VariableList, Error> {
49 let path = format!("/orgs/{}/actions/variables", org);
50 let resp = self.send_get(&path, opts).await?;
51 decode_response(resp).await
52 }
53
54 pub async fn create_org_variable(
56 &self,
57 org: &str,
58 params: &CreateVariableParams,
59 ) -> Result<(), Error> {
60 let path = format!("/orgs/{}/actions/variables", org);
61 let resp = self.send_post(&path, Some(params)).await?;
62 handle_empty_response(resp).await
63 }
64
65 pub async fn get_org_variable(&self, org: &str, name: &str) -> Result<Variable, Error> {
67 let path = format!("/orgs/{}/actions/variables/{}", org, name);
68 let resp = self.send_get(&path, None).await?;
69 decode_response(resp).await
70 }
71
72 pub async fn update_org_variable(
74 &self,
75 org: &str,
76 name: &str,
77 params: &CreateVariableParams,
78 ) -> Result<(), Error> {
79 let path = format!("/orgs/{}/actions/variables/{}", org, name);
80 let resp = self.send_patch(&path, Some(params)).await?;
81 handle_empty_response(resp).await
82 }
83
84 pub async fn delete_org_variable(&self, org: &str, name: &str) -> Result<(), Error> {
86 let path = format!("/orgs/{}/actions/variables/{}", org, name);
87 let resp = self.send_delete(&path, Option::<&()>::None).await?;
88 handle_empty_response(resp).await
89 }
90
91 pub async fn list_artifacts(
93 &self,
94 owner: &str,
95 repo: &str,
96 opts: Option<&QueryOptions>,
97 ) -> Result<ActionArtifactList, Error> {
98 let path = format!("/repos/{}/{}/actions/artifacts", owner, repo);
99 let resp = self.send_get(&path, opts).await?;
100 decode_response(resp).await
101 }
102
103 pub async fn get_artifact(
105 &self,
106 owner: &str,
107 repo: &str,
108 artifact_id: &str,
109 ) -> Result<ActionArtifact, Error> {
110 let path = format!(
111 "/repos/{}/{}/actions/artifacts/{}",
112 owner, repo, artifact_id
113 );
114 let resp = self.send_get(&path, None).await?;
115 decode_response(resp).await
116 }
117
118 pub async fn delete_artifact(
120 &self,
121 owner: &str,
122 repo: &str,
123 artifact_id: &str,
124 ) -> Result<(), Error> {
125 let path = format!(
126 "/repos/{}/{}/actions/artifacts/{}",
127 owner, repo, artifact_id
128 );
129 let resp = self.send_delete(&path, Option::<&()>::None).await?;
130 handle_empty_response(resp).await
131 }
132
133 pub async fn download_artifact(
135 &self,
136 owner: &str,
137 repo: &str,
138 artifact_id: &str,
139 ) -> Result<(), Error> {
140 let path = format!(
141 "/repos/{}/{}/actions/artifacts/{}/zip",
142 owner, repo, artifact_id
143 );
144 let resp = self.send_get(&path, None).await?;
145 handle_empty_response(resp).await
146 }
147
148 pub async fn download_artifact_raw(
150 &self,
151 owner: &str,
152 repo: &str,
153 artifact_id: &str,
154 ) -> Result<String, Error> {
155 let path = format!(
156 "/repos/{}/{}/actions/artifacts/{}/zip/raw",
157 owner, repo, artifact_id
158 );
159 let resp = self.send_get(&path, None).await?;
160 decode_response(resp).await
161 }
162
163 pub async fn get_workflow_job(
165 &self,
166 owner: &str,
167 repo: &str,
168 job_id: f64,
169 ) -> Result<ActionRunJob, Error> {
170 let path = format!("/repos/{}/{}/actions/jobs/{}", owner, repo, job_id);
171 let resp = self.send_get(&path, None).await?;
172 decode_response(resp).await
173 }
174
175 pub async fn get_workflow_job_logs(
177 &self,
178 owner: &str,
179 repo: &str,
180 job_id: f64,
181 ) -> Result<(), Error> {
182 let path = format!("/repos/{}/{}/actions/jobs/{}/logs", owner, repo, job_id);
183 let resp = self.send_get(&path, None).await?;
184 handle_empty_response(resp).await
185 }
186
187 pub async fn create_action_link(
189 &self,
190 owner: &str,
191 repo: &str,
192 params: &CreateActionLinkParams,
193 ) -> Result<ActionLink, Error> {
194 let path = format!("/repos/{}/{}/actions/links", owner, repo);
195 let resp = self.send_post(&path, Some(params)).await?;
196 decode_response(resp).await
197 }
198
199 pub async fn list_repo_runners(
201 &self,
202 owner: &str,
203 repo: &str,
204 opts: Option<&QueryOptions>,
205 ) -> Result<ActionRunners, Error> {
206 let path = format!("/repos/{}/{}/actions/runners", owner, repo);
207 let resp = self.send_get(&path, opts).await?;
208 decode_response(resp).await
209 }
210
211 pub async fn create_repo_runner_registration_token(
213 &self,
214 owner: &str,
215 repo: &str,
216 ) -> Result<RegistrationToken, Error> {
217 let path = format!(
218 "/repos/{}/{}/actions/runners/registration-token",
219 owner, repo
220 );
221 let resp = self.send_post(&path, Option::<&()>::None).await?;
222 decode_response(resp).await
223 }
224
225 pub async fn get_repo_runner(
227 &self,
228 owner: &str,
229 repo: &str,
230 runner_id: f64,
231 ) -> Result<ActionRunner, Error> {
232 let path = format!("/repos/{}/{}/actions/runners/{}", owner, repo, runner_id);
233 let resp = self.send_get(&path, None).await?;
234 decode_response(resp).await
235 }
236
237 pub async fn delete_repo_runner(
239 &self,
240 owner: &str,
241 repo: &str,
242 runner_id: f64,
243 ) -> Result<(), Error> {
244 let path = format!("/repos/{}/{}/actions/runners/{}", owner, repo, runner_id);
245 let resp = self.send_delete(&path, Option::<&()>::None).await?;
246 handle_empty_response(resp).await
247 }
248
249 pub async fn list_workflow_runs(
251 &self,
252 owner: &str,
253 repo: &str,
254 opts: Option<&QueryOptions>,
255 ) -> Result<RunsResponse, Error> {
256 let path = format!("/repos/{}/{}/actions/runs", owner, repo);
257 let resp = self.send_get(&path, opts).await?;
258 decode_response(resp).await
259 }
260
261 pub async fn get_workflow_run_by_index(
263 &self,
264 owner: &str,
265 repo: &str,
266 run_index: f64,
267 ) -> Result<ActionRun, Error> {
268 let path = format!("/repos/{}/{}/actions/runs/index/{}", owner, repo, run_index);
269 let resp = self.send_get(&path, None).await?;
270 decode_response(resp).await
271 }
272
273 pub async fn list_workflow_run_jobs_by_index(
275 &self,
276 owner: &str,
277 repo: &str,
278 run_index: f64,
279 opts: Option<&QueryOptions>,
280 ) -> Result<JobsResponse, Error> {
281 let path = format!(
282 "/repos/{}/{}/actions/runs/index/{}/jobs",
283 owner, repo, run_index
284 );
285 let resp = self.send_get(&path, opts).await?;
286 decode_response(resp).await
287 }
288
289 pub async fn get_workflow_run(
291 &self,
292 owner: &str,
293 repo: &str,
294 run_id: f64,
295 ) -> Result<ActionRun, Error> {
296 let path = format!("/repos/{}/{}/actions/runs/{}", owner, repo, run_id);
297 let resp = self.send_get(&path, None).await?;
298 decode_response(resp).await
299 }
300
301 pub async fn list_workflow_run_jobs(
303 &self,
304 owner: &str,
305 repo: &str,
306 run_id: f64,
307 opts: Option<&QueryOptions>,
308 ) -> Result<JobsResponse, Error> {
309 let path = format!("/repos/{}/{}/actions/runs/{}/jobs", owner, repo, run_id);
310 let resp = self.send_get(&path, opts).await?;
311 decode_response(resp).await
312 }
313
314 pub async fn list_repo_variables(
316 &self,
317 owner: &str,
318 repo: &str,
319 opts: Option<&QueryOptions>,
320 ) -> Result<VariableList, Error> {
321 let path = format!("/repos/{}/{}/actions/variables", owner, repo);
322 let resp = self.send_get(&path, opts).await?;
323 decode_response(resp).await
324 }
325
326 pub async fn create_repo_variable(
328 &self,
329 owner: &str,
330 repo: &str,
331 params: &CreateVariableParams,
332 ) -> Result<(), Error> {
333 let path = format!("/repos/{}/{}/actions/variables", owner, repo);
334 let resp = self.send_post(&path, Some(params)).await?;
335 handle_empty_response(resp).await
336 }
337
338 pub async fn get_repo_variable(
340 &self,
341 owner: &str,
342 repo: &str,
343 name: &str,
344 ) -> Result<Variable, Error> {
345 let path = format!("/repos/{}/{}/actions/variables/{}", owner, repo, name);
346 let resp = self.send_get(&path, None).await?;
347 decode_response(resp).await
348 }
349
350 pub async fn update_repo_variable(
352 &self,
353 owner: &str,
354 repo: &str,
355 name: &str,
356 params: &CreateVariableParams,
357 ) -> Result<(), Error> {
358 let path = format!("/repos/{}/{}/actions/variables/{}", owner, repo, name);
359 let resp = self.send_patch(&path, Some(params)).await?;
360 handle_empty_response(resp).await
361 }
362
363 pub async fn delete_repo_variable(
365 &self,
366 owner: &str,
367 repo: &str,
368 name: &str,
369 ) -> Result<(), Error> {
370 let path = format!("/repos/{}/{}/actions/variables/{}", owner, repo, name);
371 let resp = self.send_delete(&path, Option::<&()>::None).await?;
372 handle_empty_response(resp).await
373 }
374
375 pub async fn get_workflow_dispatch_inputs(
377 &self,
378 owner: &str,
379 repo: &str,
380 workflow: &str,
381 opts: Option<&QueryOptions>,
382 ) -> Result<WorkflowDispatchInputList, Error> {
383 let path = format!(
384 "/repos/{}/{}/actions/workflows/{}/dispatches",
385 owner, repo, workflow
386 );
387 let resp = self.send_get(&path, opts).await?;
388 decode_response(resp).await
389 }
390
391 pub async fn dispatch_workflow(
393 &self,
394 owner: &str,
395 repo: &str,
396 workflow: &str,
397 params: &serde_json::Value,
398 _opts: Option<&QueryOptions>,
399 ) -> Result<(), Error> {
400 let path = format!(
401 "/repos/{}/{}/actions/workflows/{}/dispatches",
402 owner, repo, workflow
403 );
404 let resp = self.send_post(&path, Some(params)).await?;
405 handle_empty_response(resp).await
406 }
407}