Bulk create issue

Creates upto **50** issues and, where the option to create subtasks is enabled in Jira, subtasks.

Script jira Verified

by hugo697 ยท 11/2/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 396 days ago
1
type Jira = {
2
  username: string;
3
  password: string;
4
  domain: string;
5
};
6
/**
7
 * Bulk create issue
8
 * Creates upto **50** issues and, where the option to create subtasks is enabled in Jira, subtasks.
9
 */
10
export async function main(
11
  auth: Jira,
12
  body: {
13
    issueUpdates?: {
14
      fields?: { [k: string]: unknown };
15
      historyMetadata?: {
16
        activityDescription?: string;
17
        activityDescriptionKey?: string;
18
        actor?: {
19
          avatarUrl?: string;
20
          displayName?: string;
21
          displayNameKey?: string;
22
          id?: string;
23
          type?: string;
24
          url?: string;
25
          [k: string]: unknown;
26
        };
27
        cause?: {
28
          avatarUrl?: string;
29
          displayName?: string;
30
          displayNameKey?: string;
31
          id?: string;
32
          type?: string;
33
          url?: string;
34
          [k: string]: unknown;
35
        };
36
        description?: string;
37
        descriptionKey?: string;
38
        emailDescription?: string;
39
        emailDescriptionKey?: string;
40
        extraData?: { [k: string]: string };
41
        generator?: {
42
          avatarUrl?: string;
43
          displayName?: string;
44
          displayNameKey?: string;
45
          id?: string;
46
          type?: string;
47
          url?: string;
48
          [k: string]: unknown;
49
        };
50
        type?: string;
51
        [k: string]: unknown;
52
      };
53
      properties?: { key?: string; value?: { [k: string]: unknown } }[];
54
      transition?: {
55
        expand?: string;
56
        fields?: {
57
          [k: string]: {
58
            allowedValues?: { [k: string]: unknown }[];
59
            autoCompleteUrl?: string;
60
            configuration?: { [k: string]: { [k: string]: unknown } };
61
            defaultValue?: { [k: string]: unknown };
62
            hasDefaultValue?: boolean;
63
            key: string;
64
            name: string;
65
            operations: string[];
66
            required: boolean;
67
            schema: {
68
              configuration?: { [k: string]: { [k: string]: unknown } };
69
              custom?: string;
70
              customId?: number;
71
              items?: string;
72
              system?: string;
73
              type: string;
74
            };
75
          };
76
        };
77
        hasScreen?: boolean;
78
        id?: string;
79
        isAvailable?: boolean;
80
        isConditional?: boolean;
81
        isGlobal?: boolean;
82
        isInitial?: boolean;
83
        looped?: boolean;
84
        name?: string;
85
        to?: {
86
          description?: string;
87
          iconUrl?: string;
88
          id?: string;
89
          name?: string;
90
          scope?: {
91
            project?: {
92
              avatarUrls?: {
93
                "16x16"?: string;
94
                "24x24"?: string;
95
                "32x32"?: string;
96
                "48x48"?: string;
97
              };
98
              id?: string;
99
              key?: string;
100
              name?: string;
101
              projectCategory?: {
102
                description?: string;
103
                id?: string;
104
                name?: string;
105
                self?: string;
106
              };
107
              projectTypeKey?: "software" | "service_desk" | "business";
108
              self?: string;
109
              simplified?: boolean;
110
            };
111
            type?: "PROJECT" | "TEMPLATE";
112
            [k: string]: unknown;
113
          };
114
          self?: string;
115
          statusCategory?: {
116
            colorName?: string;
117
            id?: number;
118
            key?: string;
119
            name?: string;
120
            self?: string;
121
            [k: string]: unknown;
122
          };
123
          [k: string]: unknown;
124
        };
125
        [k: string]: unknown;
126
      };
127
      update?: {
128
        [k: string]: {
129
          add?: { [k: string]: unknown };
130
          copy?: { [k: string]: unknown };
131
          edit?: { [k: string]: unknown };
132
          remove?: { [k: string]: unknown };
133
          set?: { [k: string]: unknown };
134
        }[];
135
      };
136
      [k: string]: unknown;
137
    }[];
138
    [k: string]: unknown;
139
  }
140
) {
141
  const url = new URL(
142
    `https://${auth.domain}.atlassian.net/rest/api/2/issue/bulk`
143
  );
144

145
  const response = await fetch(url, {
146
    method: "POST",
147
    headers: {
148
      "Content-Type": "application/json",
149
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
150
    },
151
    body: JSON.stringify(body),
152
  });
153
  if (!response.ok) {
154
    const text = await response.text();
155
    throw new Error(`${response.status} ${text}`);
156
  }
157
  return await response.json();
158
}
159