mirror of
https://github.com/actions/add-to-project.git
synced 2025-12-11 04:32:47 +00:00
Compare commits
643 Commits
v0.0.1
...
joshrowley
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7552f7a5de | ||
|
|
d8e41a4186 | ||
|
|
bff6ddc159 | ||
|
|
b06b35e111 | ||
|
|
9834efb291 | ||
|
|
3911b2e9c5 | ||
|
|
373aaa0026 | ||
|
|
646a190b35 | ||
|
|
31008e43a9 | ||
|
|
eeb6fcf287 | ||
|
|
c7360a863c | ||
|
|
2f1ef6a01a | ||
|
|
14e1b9faa9 | ||
|
|
bd71b387a0 | ||
|
|
30289aea8f | ||
|
|
63f3d754e5 | ||
|
|
5b82d0d8ea | ||
|
|
4f0b69f582 | ||
|
|
b4aa1e2987 | ||
|
|
dea980a46e | ||
|
|
e4eda1d50b | ||
|
|
fdad17b461 | ||
|
|
994ca9f75a | ||
|
|
7e57443d00 | ||
|
|
263cbdcb88 | ||
|
|
b2735aa0f6 | ||
|
|
8b31f68c82 | ||
|
|
2ffcee3a64 | ||
|
|
eb5b61b808 | ||
|
|
10a1247ab9 | ||
|
|
68a6e37819 | ||
|
|
14eeb7efcc | ||
|
|
f611246f06 | ||
|
|
f5fdff90c0 | ||
|
|
53c462ebe8 | ||
|
|
35f3b369a1 | ||
|
|
ac28c3eb83 | ||
|
|
89df6ee4c1 | ||
|
|
42a6ef18a1 | ||
|
|
ea9df88106 | ||
|
|
4ecc7c0b2b | ||
|
|
2b9d2149be | ||
|
|
750f734dd2 | ||
|
|
99cf218612 | ||
|
|
1dede3e656 | ||
|
|
39c65d18e0 | ||
|
|
103f97433b | ||
|
|
d64619acb0 | ||
|
|
1d9eb98615 | ||
|
|
93076d3c0e | ||
|
|
df2c84943f | ||
|
|
5fbfddbd6f | ||
|
|
1d9718fede | ||
|
|
d86bbfb918 | ||
|
|
59b84e0580 | ||
|
|
a79cf166b5 | ||
|
|
8a1828e332 | ||
|
|
973ebb68ca | ||
|
|
52557c7129 | ||
|
|
bdb4bf2fcf | ||
|
|
9b7cbef279 | ||
|
|
6d52a5575b | ||
|
|
54cc505d2c | ||
|
|
36f39f8b12 | ||
|
|
887f9e6239 | ||
|
|
7cb6768069 | ||
|
|
960ca110e0 | ||
|
|
edc057aef9 | ||
|
|
217b3883b1 | ||
|
|
0a99102a65 | ||
|
|
f755ecb9b8 | ||
|
|
44f5a43267 | ||
|
|
9c804266b5 | ||
|
|
36f5795260 | ||
|
|
94a6d20e97 | ||
|
|
87ad3e8048 | ||
|
|
1c24cd01de | ||
|
|
5fd82c5072 | ||
|
|
002af53ca7 | ||
|
|
a800ee6382 | ||
|
|
96579b343d | ||
|
|
cab3e8fdaa | ||
|
|
55c5983362 | ||
|
|
0da8e46333 | ||
|
|
8390e920ed | ||
|
|
338542c930 | ||
|
|
f85c23163a | ||
|
|
cadd99bebf | ||
|
|
36ac48f374 | ||
|
|
89ec196c28 | ||
|
|
2b4e8a9194 | ||
|
|
c04c801147 | ||
|
|
d9c2169b6f | ||
|
|
66892474a2 | ||
|
|
faf4a19111 | ||
|
|
65dd57f6b0 | ||
|
|
049d72e93d | ||
|
|
f38f906848 | ||
|
|
a0cf74c4d7 | ||
|
|
8d46d9f2ac | ||
|
|
773b37dca5 | ||
|
|
4168cdeca9 | ||
|
|
99573159d7 | ||
|
|
e5b05071cb | ||
|
|
78adc2f97c | ||
|
|
5ba1147d0e | ||
|
|
9091986763 | ||
|
|
701d4fe4b8 | ||
|
|
ecd6bc5aa6 | ||
|
|
588a05eb5b | ||
|
|
2aacd207b9 | ||
|
|
1b04211a9f | ||
|
|
a0b6033202 | ||
|
|
f8b212372d | ||
|
|
23400f5f47 | ||
|
|
c3dbb76ad4 | ||
|
|
af1fa79daa | ||
|
|
e55c147417 | ||
|
|
2cd206c9cf | ||
|
|
f52c62c27e | ||
|
|
023bb5edd4 | ||
|
|
8ddc3f9980 | ||
|
|
67c82de2ee | ||
|
|
ce05fa3d42 | ||
|
|
c09eea1d38 | ||
|
|
bde621f03e | ||
|
|
7c06a2e8a7 | ||
|
|
23e1389971 | ||
|
|
7c31fa90d2 | ||
|
|
87685c7bcb | ||
|
|
ad77019bd2 | ||
|
|
25f81e7584 | ||
|
|
64a95f9963 | ||
|
|
0a7abacdd4 | ||
|
|
6319fbf4ab | ||
|
|
16678f07cc | ||
|
|
deca6c76d5 | ||
|
|
436b60e3c7 | ||
|
|
c38ba3918b | ||
|
|
539b3f97fd | ||
|
|
2eedc0bd12 | ||
|
|
9d30cd4ea3 | ||
|
|
80dff83603 | ||
|
|
31b3f3ccdc | ||
|
|
039f00e4e1 | ||
|
|
74235d0976 | ||
|
|
5d4ef34b4c | ||
|
|
38a0adc233 | ||
|
|
90818bfeba | ||
|
|
2a9da7be76 | ||
|
|
07c29ba779 | ||
|
|
5b64707bb3 | ||
|
|
321b7eb9bf | ||
|
|
83244eb733 | ||
|
|
fdae002f2c | ||
|
|
c475ba7265 | ||
|
|
7a13e6eeb9 | ||
|
|
7a13494c05 | ||
|
|
a6e07cb1e4 | ||
|
|
9e340dd475 | ||
|
|
0893101300 | ||
|
|
2250fd41d0 | ||
|
|
8a14d78fcf | ||
|
|
a3544f542a | ||
|
|
39569f9b7d | ||
|
|
15db5ef38c | ||
|
|
f6bbaa9eb7 | ||
|
|
88d0700668 | ||
|
|
399442f46a | ||
|
|
e78e561fec | ||
|
|
097fa0553b | ||
|
|
703deace27 | ||
|
|
895720c423 | ||
|
|
b433768232 | ||
|
|
22caa11a6d | ||
|
|
16df187cf9 | ||
|
|
ad9efdf1e6 | ||
|
|
777245737e | ||
|
|
5f4850959b | ||
|
|
4756e6330f | ||
|
|
9f96b16f44 | ||
|
|
5f0c606906 | ||
|
|
11ef9e1e8d | ||
|
|
a28950b59e | ||
|
|
5b15b1a619 | ||
|
|
10934d1d3d | ||
|
|
8434539ee2 | ||
|
|
83567abcd1 | ||
|
|
ba4c19ddac | ||
|
|
2547408f6f | ||
|
|
28a69b27b6 | ||
|
|
ecb32ed323 | ||
|
|
03c85cc34a | ||
|
|
70264bb4d1 | ||
|
|
5a55c0cba5 | ||
|
|
09abe09dcd | ||
|
|
ed88cdc97d | ||
|
|
a173cb1610 | ||
|
|
b6a9b6ff3a | ||
|
|
3f557757a9 | ||
|
|
36391c5bc3 | ||
|
|
b4ca87ff52 | ||
|
|
1fdfb8c67e | ||
|
|
add81c33d2 | ||
|
|
f760b9f1a0 | ||
|
|
bcf48a5d57 | ||
|
|
80b1710843 | ||
|
|
547a49eea1 | ||
|
|
91b8ba84c0 | ||
|
|
247085562b | ||
|
|
99b54d5e6f | ||
|
|
e92b0df91d | ||
|
|
6bf5cd2100 | ||
|
|
aebf7de9ea | ||
|
|
e83ada4abb | ||
|
|
f52b6e4974 | ||
|
|
60ba784944 | ||
|
|
00f7bf6e9b | ||
|
|
41f5c1fa85 | ||
|
|
f64617d938 | ||
|
|
26739f107e | ||
|
|
383f6dfeb4 | ||
|
|
ce1983ff4e | ||
|
|
52f0dde099 | ||
|
|
7d1730801e | ||
|
|
dc0c796a1a | ||
|
|
2abae3f03b | ||
|
|
00a23495f4 | ||
|
|
d19a1438a9 | ||
|
|
1b3c192b00 | ||
|
|
92471ee0d5 | ||
|
|
25580575b4 | ||
|
|
f38a93c5a3 | ||
|
|
f8f1995a9b | ||
|
|
9ce1d75007 | ||
|
|
0c2909c5fd | ||
|
|
dd0961446c | ||
|
|
26f9feae0a | ||
|
|
c261c9a95f | ||
|
|
31901d229d | ||
|
|
0a78e5c8ed | ||
|
|
c4a92acacb | ||
|
|
2ab330cfd5 | ||
|
|
06e54d7eae | ||
|
|
91af7eb93e | ||
|
|
47060e7c7b | ||
|
|
2163ff9e29 | ||
|
|
70ce5a5ec5 | ||
|
|
78711d5ed6 | ||
|
|
a4a63c373b | ||
|
|
b7cc00e404 | ||
|
|
2ca1de6159 | ||
|
|
64a7c52604 | ||
|
|
7540d630bd | ||
|
|
156525c5e2 | ||
|
|
1885da210d | ||
|
|
16a5c31be8 | ||
|
|
29766ca0ac | ||
|
|
fe1b8050dc | ||
|
|
d3e23d39c7 | ||
|
|
e20f3a98a6 | ||
|
|
5a7afe53e1 | ||
|
|
958916895a | ||
|
|
bf580a9c46 | ||
|
|
db7cb0d7f9 | ||
|
|
b6a72217f5 | ||
|
|
686c1a45e0 | ||
|
|
221804fc4f | ||
|
|
b186de4d0e | ||
|
|
75921323e3 | ||
|
|
c41809958a | ||
|
|
42ad4aed60 | ||
|
|
b56b7e6441 | ||
|
|
960fbad431 | ||
|
|
a130af5794 | ||
|
|
8d2064c2fe | ||
|
|
cd062f6530 | ||
|
|
c7ca843e95 | ||
|
|
c30dddf387 | ||
|
|
9eaa8568e2 | ||
|
|
195ebe73dd | ||
|
|
8f9378c977 | ||
|
|
edd3921f6c | ||
|
|
73dbef5228 | ||
|
|
b749f03d83 | ||
|
|
f1318f907d | ||
|
|
58045a0196 | ||
|
|
b79a170093 | ||
|
|
7a1b708e24 | ||
|
|
7e0e2c594b | ||
|
|
5a722b2d85 | ||
|
|
b84343956f | ||
|
|
fde71205f0 | ||
|
|
0639048d29 | ||
|
|
889cb383ac | ||
|
|
394bc02c66 | ||
|
|
e72a91f059 | ||
|
|
d37ee53182 | ||
|
|
b132be1646 | ||
|
|
ae3d163bf0 | ||
|
|
c6c527b7d4 | ||
|
|
17681e1444 | ||
|
|
5ee4c2c94a | ||
|
|
d3d1191194 | ||
|
|
5e951ed275 | ||
|
|
d8fd9122ff | ||
|
|
8afc027fc3 | ||
|
|
d3b6ae9953 | ||
|
|
327b1a6a80 | ||
|
|
51e172a520 | ||
|
|
2c51ab2882 | ||
|
|
283800435b | ||
|
|
bb4087f96d | ||
|
|
d5bf1a4311 | ||
|
|
7ecd3b9a8a | ||
|
|
019149543c | ||
|
|
82f0eaddf3 | ||
|
|
11ec699375 | ||
|
|
d79571d873 | ||
|
|
6979245da4 | ||
|
|
1450adf89b | ||
|
|
686e886c25 | ||
|
|
4cdd6f143b | ||
|
|
24a59b80ce | ||
|
|
eca008a168 | ||
|
|
dd6c3f1c1c | ||
|
|
338ac1805e | ||
|
|
2ecb35a6bd | ||
|
|
8ff00cfda3 | ||
|
|
dfe9c0bd14 | ||
|
|
0decb7a26e | ||
|
|
96ce2f0192 | ||
|
|
b572ef66d4 | ||
|
|
dbdd6bcdc8 | ||
|
|
8a130a1de7 | ||
|
|
b6d4389ed6 | ||
|
|
f5e0362b57 | ||
|
|
836536efd8 | ||
|
|
6133899d5e | ||
|
|
35a1c9762b | ||
|
|
8a044413b5 | ||
|
|
8bdfd1c79c | ||
|
|
1ec83d22e4 | ||
|
|
f82d1e43cf | ||
|
|
e83fe43a76 | ||
|
|
7048934db4 | ||
|
|
9b06c490c1 | ||
|
|
90e8168771 | ||
|
|
e7bfcd815f | ||
|
|
82a997c52a | ||
|
|
5369ac8c20 | ||
|
|
97730f2067 | ||
|
|
0534f9e7f3 | ||
|
|
ebb11c3a4a | ||
|
|
91ab1ce991 | ||
|
|
d8478e8b6f | ||
|
|
ce41401b09 | ||
|
|
1beac71051 | ||
|
|
cb277e5c43 | ||
|
|
e52f87eff2 | ||
|
|
48bed54846 | ||
|
|
bde4e831d3 | ||
|
|
421f1345b9 | ||
|
|
8f7d4cb823 | ||
|
|
0076c5793c | ||
|
|
8cf508be80 | ||
|
|
a59f167ad9 | ||
|
|
d9c8cc2520 | ||
|
|
33e78e7743 | ||
|
|
acb5644475 | ||
|
|
01c824da16 | ||
|
|
7bf0952e0f | ||
|
|
c9e794be13 | ||
|
|
a2183751f2 | ||
|
|
bf8911a06b | ||
|
|
ddb4a8e99c | ||
|
|
2a12e1b56a | ||
|
|
61b8a9bfc7 | ||
|
|
963602c4ed | ||
|
|
b462dfb560 | ||
|
|
725d73c5c7 | ||
|
|
79260a4f4f | ||
|
|
2b09521d05 | ||
|
|
138feafd14 | ||
|
|
865cca1361 | ||
|
|
e3acb4ebda | ||
|
|
ac1b7ef80a | ||
|
|
a9f041ddd4 | ||
|
|
1809404e28 | ||
|
|
0af0b18f28 | ||
|
|
c8dd399614 | ||
|
|
f111c2aa36 | ||
|
|
12e917e04c | ||
|
|
dbe00218fb | ||
|
|
fa0b958991 | ||
|
|
f343062b82 | ||
|
|
e639bba4f0 | ||
|
|
34ff2c7db4 | ||
|
|
4065956be9 | ||
|
|
9b0fd13e3f | ||
|
|
53d95574f4 | ||
|
|
ebd4dc568a | ||
|
|
9115f344bd | ||
|
|
31c3cce717 | ||
|
|
c1795be3bc | ||
|
|
75ae529d21 | ||
|
|
93eba4a2e5 | ||
|
|
5582d9894f | ||
|
|
97e01d66ef | ||
|
|
2a4deb3f9f | ||
|
|
458653506b | ||
|
|
322721b8cd | ||
|
|
601b150078 | ||
|
|
665443b5d9 | ||
|
|
caae605ffb | ||
|
|
5d3a082e24 | ||
|
|
80b198ce77 | ||
|
|
92eaaeabac | ||
|
|
8eedaeb3f8 | ||
|
|
3b83e6acf9 | ||
|
|
0bf2f64851 | ||
|
|
ce9d751c8c | ||
|
|
2b841e5b72 | ||
|
|
7ca6a73a54 | ||
|
|
79db2f4851 | ||
|
|
cf1add2ac3 | ||
|
|
50a0a4c60e | ||
|
|
ed9ec99956 | ||
|
|
79316c3c93 | ||
|
|
2914167b9b | ||
|
|
7334092ecc | ||
|
|
aeb80ee3ca | ||
|
|
a1e8057254 | ||
|
|
94b35fc3df | ||
|
|
188881c8fc | ||
|
|
555ebcb094 | ||
|
|
73cb31d05f | ||
|
|
88c4df44ff | ||
|
|
bbdd7d7680 | ||
|
|
6e2d6ef546 | ||
|
|
a412549585 | ||
|
|
fedaa03863 | ||
|
|
5152387edb | ||
|
|
10552f6f89 | ||
|
|
69f6549fe2 | ||
|
|
c05fcc9dfb | ||
|
|
a0fa063143 | ||
|
|
ff2392aa0d | ||
|
|
d0b7876408 | ||
|
|
0f1ba59d26 | ||
|
|
67c5a7e0a1 | ||
|
|
965058f5bb | ||
|
|
bbc19edc9d | ||
|
|
f7823161aa | ||
|
|
fcb780e2b5 | ||
|
|
58aca2b7ff | ||
|
|
001e0b58eb | ||
|
|
04a1f56d53 | ||
|
|
e0b64e7b67 | ||
|
|
c1a80e93ea | ||
|
|
be967da52c | ||
|
|
f6a381cfe2 | ||
|
|
9a2b32ee11 | ||
|
|
d8749d7229 | ||
|
|
9484e7ea49 | ||
|
|
4453a5e17d | ||
|
|
bad07b756f | ||
|
|
c4d924563d | ||
|
|
339ee3c166 | ||
|
|
da77ec5a48 | ||
|
|
eaf932c4b2 | ||
|
|
47772ca04a | ||
|
|
bd184e5d13 | ||
|
|
a07cbd5d20 | ||
|
|
395b51773c | ||
|
|
7a40b30747 | ||
|
|
c7c6f60f14 | ||
|
|
53101abf47 | ||
|
|
0c1e36ed75 | ||
|
|
8d66869b6c | ||
|
|
3815017653 | ||
|
|
38d93b7ff2 | ||
|
|
544ce1ff15 | ||
|
|
f993b92dab | ||
|
|
b56023be57 | ||
|
|
e9fda8a6a9 | ||
|
|
63ec0f9def | ||
|
|
031135e10e | ||
|
|
138f841d13 | ||
|
|
fdbee5d018 | ||
|
|
75cfc23c1b | ||
|
|
1b4f9e5215 | ||
|
|
1664cea4b1 | ||
|
|
58dc7efeb3 | ||
|
|
8bc56cd807 | ||
|
|
8e43a9d0d7 | ||
|
|
4cf3abb9ff | ||
|
|
2d863964e7 | ||
|
|
95da4c39c2 | ||
|
|
80de5b79f3 | ||
|
|
7d736a78c2 | ||
|
|
66112f7fe4 | ||
|
|
6125b7b6b6 | ||
|
|
c92f1c7b9c | ||
|
|
dbee858226 | ||
|
|
257e8e8fed | ||
|
|
92bff04cc1 | ||
|
|
5bb8b529cc | ||
|
|
fea7d52087 | ||
|
|
3b2ebb081c | ||
|
|
29eb7cef84 | ||
|
|
98def91cef | ||
|
|
8f59162ff6 | ||
|
|
9ac721fd8a | ||
|
|
c91186afaf | ||
|
|
3547ee9c81 | ||
|
|
f1c55a1027 | ||
|
|
7c18796dcd | ||
|
|
0bb745994b | ||
|
|
8a004791b5 | ||
|
|
a02a2e0e2e | ||
|
|
9473fe1ada | ||
|
|
c5b334e234 | ||
|
|
71ccec7e4d | ||
|
|
f9b1fc05c3 | ||
|
|
cf477c15a9 | ||
|
|
a5a8e154d8 | ||
|
|
6e2fa5f9f3 | ||
|
|
4205d79489 | ||
|
|
f08a2688cd | ||
|
|
24160a1bc2 | ||
|
|
0137df9c8d | ||
|
|
30f559df98 | ||
|
|
dc41eefd3f | ||
|
|
661f5254e8 | ||
|
|
2a2f1e9ba9 | ||
|
|
d0ecdf4a86 | ||
|
|
03a446013c | ||
|
|
b01f724082 | ||
|
|
f27c638b90 | ||
|
|
6fcbe1004c | ||
|
|
399d8e0210 | ||
|
|
bd2c6a9d39 | ||
|
|
7812e58042 | ||
|
|
0780acfc24 | ||
|
|
749c4ae123 | ||
|
|
33053c60fb | ||
|
|
d028344d28 | ||
|
|
b899acf143 | ||
|
|
5a6232de3d | ||
|
|
f50c5f7f33 | ||
|
|
5f2fb781f1 | ||
|
|
5a36c405bf | ||
|
|
7b62e2081a | ||
|
|
698949779b | ||
|
|
012e2b444d | ||
|
|
96b0e568a8 | ||
|
|
765e16bbaa | ||
|
|
e619ea2c48 | ||
|
|
196691e90c | ||
|
|
7a0820f976 | ||
|
|
740e8854f3 | ||
|
|
9baf5dabd0 | ||
|
|
d613567480 | ||
|
|
37c8e849d6 | ||
|
|
d07f6a07cd | ||
|
|
fb013c35f1 | ||
|
|
1b03f3603c | ||
|
|
642595b881 | ||
|
|
91547225cb | ||
|
|
cc13eb1eed | ||
|
|
859e9c6de8 | ||
|
|
a064fc6c14 | ||
|
|
747607c26a | ||
|
|
e792050be0 | ||
|
|
5a4b423126 | ||
|
|
2d99f6893d | ||
|
|
74723b6181 | ||
|
|
7279692a52 | ||
|
|
ff5cbc4a18 | ||
|
|
ddb85f88a6 | ||
|
|
389b584dba | ||
|
|
8ff4c87a86 | ||
|
|
6d9d871643 | ||
|
|
904617435f | ||
|
|
430f56e93a | ||
|
|
bd59204a4e | ||
|
|
dbf2554d4e | ||
|
|
9d1641a3bd | ||
|
|
5299f80a50 | ||
|
|
ee68bb0c2b | ||
|
|
b35ff12cb8 | ||
|
|
630f81ad40 | ||
|
|
9b4ee3afe6 | ||
|
|
c34a4ba357 | ||
|
|
b1476f2e9c | ||
|
|
bc78a1e115 | ||
|
|
3027b57d3a | ||
|
|
30f4425d9f | ||
|
|
befcba3a7b | ||
|
|
f4bd1b98a2 | ||
|
|
cea962d65d | ||
|
|
ab6db1a88c | ||
|
|
4fdd6b24ca | ||
|
|
e5b605042a | ||
|
|
a6c2fe7584 | ||
|
|
651feff179 | ||
|
|
1b019a7e9a | ||
|
|
fd3d381359 | ||
|
|
2c0269fb8f | ||
|
|
83ac05270f | ||
|
|
6830646051 | ||
|
|
547a40daf6 | ||
|
|
6d98dac883 | ||
|
|
23de7216be | ||
|
|
c669f5c5a0 | ||
|
|
ffbcbbc91f | ||
|
|
03acc14e46 | ||
|
|
f98f7a758c | ||
|
|
b1a76b9854 | ||
|
|
959b0d462b | ||
|
|
a113ff8a4a | ||
|
|
752ba69790 | ||
|
|
069f327762 | ||
|
|
106684e914 | ||
|
|
4887ffd3e0 | ||
|
|
d3bdc22ebd | ||
|
|
aa09aa5940 | ||
|
|
4a5df49dfe | ||
|
|
4d561a46b3 | ||
|
|
d8cf04bb66 | ||
|
|
d9b0535d09 | ||
|
|
19cb14e026 | ||
|
|
c6f7b220db | ||
|
|
3cc9b29b07 | ||
|
|
3e3f8b5f8f | ||
|
|
8e16a73f49 | ||
|
|
dc9f7ee311 | ||
|
|
0ad701a62e | ||
|
|
beea8e26fe | ||
|
|
4ed7975d8d | ||
|
|
edbc4f0322 | ||
|
|
85757d613c |
21
.github/workflows/add-new-issue-to-triage-project.yml
vendored
Normal file
21
.github/workflows/add-new-issue-to-triage-project.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
name: Add new Issues with `bug` label to `Projects Shared FR Triage`
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
add-to-triage-project:
|
||||||
|
name: Add issue or pull request to project
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/add-to-project@d8e41a41861baa4c7af88a39f7692681e89f6668
|
||||||
|
with:
|
||||||
|
project-url: https://github.com/orgs/github/projects/4017
|
||||||
|
github-token: ${{ secrets.PROJECTS_FR_PROJECT_UPDATE_TOKEN }}
|
||||||
10
.github/workflows/check-dist.yml
vendored
10
.github/workflows/check-dist.yml
vendored
@@ -20,12 +20,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 12.x
|
- name: Set Node.js 16.x
|
||||||
uses: actions/setup-node@v2.5.1
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 12.x
|
node-version: 16.x
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
@@ -46,7 +46,7 @@ jobs:
|
|||||||
id: diff
|
id: diff
|
||||||
|
|
||||||
# If index.js was different than expected, upload the expected version as an artifact
|
# If index.js was different than expected, upload the expected version as an artifact
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v3
|
||||||
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
|
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
|
||||||
with:
|
with:
|
||||||
name: dist
|
name: dist
|
||||||
|
|||||||
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: 'CodeQL'
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [main]
|
||||||
|
schedule:
|
||||||
|
- cron: '18 2 * * 2'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: ['javascript']
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||||
|
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v2
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v2
|
||||||
2
.github/workflows/licensed.yml
vendored
2
.github/workflows/licensed.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Check licenses
|
name: Check licenses
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- name: Install licensed
|
- name: Install licensed
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
@@ -13,8 +13,10 @@ jobs:
|
|||||||
build: # make sure build/ci work properly
|
build: # make sure build/ci work properly
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- run: |
|
- run: |
|
||||||
npm install
|
npm install
|
||||||
- run: |
|
- run: |
|
||||||
npm run build
|
npm run build
|
||||||
|
- run: |
|
||||||
|
npm run test
|
||||||
|
|||||||
6
.licenses/npm/@actions/core.dep.yml
generated
6
.licenses/npm/@actions/core.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@actions/core"
|
name: '@actions/core'
|
||||||
version: 1.6.0
|
version: 1.10.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: Actions core lib
|
summary: Actions core lib
|
||||||
homepage: https://github.com/actions/toolkit/tree/main/packages/core
|
homepage: https://github.com/actions/toolkit/tree/main/packages/core
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE.md
|
- sources: LICENSE.md
|
||||||
text: |-
|
text: |-
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
|||||||
6
.licenses/npm/@actions/github.dep.yml
generated
6
.licenses/npm/@actions/github.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@actions/github"
|
name: '@actions/github'
|
||||||
version: 5.0.0
|
version: 5.1.1
|
||||||
type: npm
|
type: npm
|
||||||
summary: Actions github lib
|
summary: Actions github lib
|
||||||
homepage: https://github.com/actions/toolkit/tree/main/packages/github
|
homepage: https://github.com/actions/toolkit/tree/main/packages/github
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE.md
|
- sources: LICENSE.md
|
||||||
text: |-
|
text: |-
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
|||||||
8
.licenses/npm/@actions/http-client.dep.yml
generated
8
.licenses/npm/@actions/http-client.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@actions/http-client"
|
name: '@actions/http-client'
|
||||||
version: 1.0.11
|
version: 2.0.1
|
||||||
type: npm
|
type: npm
|
||||||
summary: Actions Http Client
|
summary: Actions Http Client
|
||||||
homepage: https://github.com/actions/http-client#readme
|
homepage: https://github.com/actions/toolkit/tree/main/packages/http-client
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
Actions Http Client for Node.js
|
Actions Http Client for Node.js
|
||||||
|
|
||||||
|
|||||||
8
.licenses/npm/@octokit/auth-token.dep.yml
generated
8
.licenses/npm/@octokit/auth-token.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/auth-token"
|
name: '@octokit/auth-token'
|
||||||
version: 2.5.0
|
version: 2.5.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: GitHub API token authentication for browsers and Node.js
|
summary: GitHub API token authentication for browsers and Node.js
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
@@ -29,6 +29,6 @@ licenses:
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
10
.licenses/npm/@octokit/core.dep.yml
generated
10
.licenses/npm/@octokit/core.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/core"
|
name: '@octokit/core'
|
||||||
version: 3.5.1
|
version: 3.6.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: Extendable client for GitHub's REST & GraphQL APIs
|
summary: Extendable client for GitHub's REST & GraphQL APIs
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
@@ -29,6 +29,6 @@ licenses:
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
8
.licenses/npm/@octokit/endpoint.dep.yml
generated
8
.licenses/npm/@octokit/endpoint.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/endpoint"
|
name: '@octokit/endpoint'
|
||||||
version: 6.0.12
|
version: 6.0.12
|
||||||
type: npm
|
type: npm
|
||||||
summary: Turns REST API endpoints into generic request options
|
summary: Turns REST API endpoints into generic request options
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
@@ -29,6 +29,6 @@ licenses:
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
8
.licenses/npm/@octokit/graphql.dep.yml
generated
8
.licenses/npm/@octokit/graphql.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/graphql"
|
name: '@octokit/graphql'
|
||||||
version: 4.8.0
|
version: 4.8.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: GitHub GraphQL API client for browsers and Node
|
summary: GitHub GraphQL API client for browsers and Node
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
@@ -29,6 +29,6 @@ licenses:
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
8
.licenses/npm/@octokit/openapi-types.dep.yml
generated
8
.licenses/npm/@octokit/openapi-types.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/openapi-types"
|
name: '@octokit/openapi-types'
|
||||||
version: 11.2.0
|
version: 11.2.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: Generated TypeScript definitions based on GitHub's OpenAPI spec for api.github.com
|
summary: Generated TypeScript definitions based on GitHub's OpenAPI spec for api.github.com
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |-
|
text: |-
|
||||||
Copyright 2020 Gregor Martynus
|
Copyright 2020 Gregor Martynus
|
||||||
|
|
||||||
@@ -15,6 +15,6 @@ licenses:
|
|||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/plugin-paginate-rest"
|
name: '@octokit/plugin-paginate-rest'
|
||||||
version: 2.17.0
|
version: 2.17.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: Octokit plugin to paginate REST API endpoint responses
|
summary: Octokit plugin to paginate REST API endpoint responses
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
MIT License Copyright (c) 2019 Octokit contributors
|
MIT License Copyright (c) 2019 Octokit contributors
|
||||||
|
|
||||||
@@ -15,6 +15,6 @@ licenses:
|
|||||||
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
|
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/plugin-rest-endpoint-methods"
|
name: '@octokit/plugin-rest-endpoint-methods'
|
||||||
version: 5.13.0
|
version: 5.13.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: Octokit plugin adding one method for all of api.github.com REST API endpoints
|
summary: Octokit plugin adding one method for all of api.github.com REST API endpoints
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
MIT License Copyright (c) 2019 Octokit contributors
|
MIT License Copyright (c) 2019 Octokit contributors
|
||||||
|
|
||||||
@@ -15,6 +15,6 @@ licenses:
|
|||||||
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
|
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
8
.licenses/npm/@octokit/request-error.dep.yml
generated
8
.licenses/npm/@octokit/request-error.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/request-error"
|
name: '@octokit/request-error'
|
||||||
version: 2.1.0
|
version: 2.1.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: Error class for Octokit request errors
|
summary: Error class for Octokit request errors
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
@@ -29,6 +29,6 @@ licenses:
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
8
.licenses/npm/@octokit/request.dep.yml
generated
8
.licenses/npm/@octokit/request.dep.yml
generated
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/request"
|
name: '@octokit/request'
|
||||||
version: 5.6.3
|
version: 5.6.3
|
||||||
type: npm
|
type: npm
|
||||||
summary: Send parameterized requests to GitHub's APIs with sensible defaults in browsers
|
summary: Send parameterized requests to GitHub's APIs with sensible defaults in browsers
|
||||||
@@ -7,7 +7,7 @@ summary: Send parameterized requests to GitHub's APIs with sensible defaults in
|
|||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
@@ -30,6 +30,6 @@ licenses:
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
8
.licenses/npm/@octokit/types.dep.yml
generated
8
.licenses/npm/@octokit/types.dep.yml
generated
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: "@octokit/types"
|
name: '@octokit/types'
|
||||||
version: 6.34.0
|
version: 6.34.0
|
||||||
type: npm
|
type: npm
|
||||||
summary: Shared TypeScript definitions for Octokit projects
|
summary: Shared TypeScript definitions for Octokit projects
|
||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
MIT License Copyright (c) 2019 Octokit contributors
|
MIT License Copyright (c) 2019 Octokit contributors
|
||||||
|
|
||||||
@@ -15,6 +15,6 @@ licenses:
|
|||||||
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
|
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[MIT](LICENSE)"
|
text: '[MIT](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
6
.licenses/npm/before-after-hook.dep.yml
generated
6
.licenses/npm/before-after-hook.dep.yml
generated
@@ -6,7 +6,7 @@ summary: asynchronous before/error/after hooks for internal functionality
|
|||||||
homepage:
|
homepage:
|
||||||
license: apache-2.0
|
license: apache-2.0
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |2
|
text: |2
|
||||||
Apache License
|
Apache License
|
||||||
Version 2.0, January 2004
|
Version 2.0, January 2004
|
||||||
@@ -209,6 +209,6 @@ licenses:
|
|||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[Apache 2.0](LICENSE)"
|
text: '[Apache 2.0](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
6
.licenses/npm/deprecation.dep.yml
generated
6
.licenses/npm/deprecation.dep.yml
generated
@@ -6,7 +6,7 @@ summary: Log a deprecation message with stack
|
|||||||
homepage:
|
homepage:
|
||||||
license: isc
|
license: isc
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The ISC License
|
The ISC License
|
||||||
|
|
||||||
@@ -23,6 +23,6 @@ licenses:
|
|||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[ISC](LICENSE)"
|
text: '[ISC](LICENSE)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
4
.licenses/npm/is-plain-object.dep.yml
generated
4
.licenses/npm/is-plain-object.dep.yml
generated
@@ -6,7 +6,7 @@ summary: Returns true if an object was created by the `Object` constructor, or O
|
|||||||
homepage: https://github.com/jonschlinkert/is-plain-object
|
homepage: https://github.com/jonschlinkert/is-plain-object
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ licenses:
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: |-
|
text: |-
|
||||||
Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).
|
Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).
|
||||||
Released under the [MIT License](LICENSE).
|
Released under the [MIT License](LICENSE).
|
||||||
|
|||||||
4
.licenses/npm/node-fetch.dep.yml
generated
4
.licenses/npm/node-fetch.dep.yml
generated
@@ -6,7 +6,7 @@ summary: A light-weight module that brings window.fetch to node.js
|
|||||||
homepage: https://github.com/bitinn/node-fetch
|
homepage: https://github.com/bitinn/node-fetch
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE.md
|
- sources: LICENSE.md
|
||||||
text: |+
|
text: |+
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ licenses:
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: |-
|
text: |-
|
||||||
MIT
|
MIT
|
||||||
|
|
||||||
|
|||||||
2
.licenses/npm/once.dep.yml
generated
2
.licenses/npm/once.dep.yml
generated
@@ -6,7 +6,7 @@ summary: Run a function exactly one time
|
|||||||
homepage:
|
homepage:
|
||||||
license: isc
|
license: isc
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The ISC License
|
The ISC License
|
||||||
|
|
||||||
|
|||||||
2
.licenses/npm/tr46.dep.yml
generated
2
.licenses/npm/tr46.dep.yml
generated
@@ -6,7 +6,7 @@ summary: An implementation of the Unicode TR46 spec
|
|||||||
homepage: https://github.com/Sebmaster/tr46.js#readme
|
homepage: https://github.com/Sebmaster/tr46.js#readme
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: Auto-generated MIT license text
|
- sources: Auto-generated MIT license text
|
||||||
text: |
|
text: |
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
|
|||||||
4
.licenses/npm/tunnel.dep.yml
generated
4
.licenses/npm/tunnel.dep.yml
generated
@@ -6,7 +6,7 @@ summary: Node HTTP/HTTPS Agents for tunneling proxies
|
|||||||
homepage: https://github.com/koichik/node-tunnel/
|
homepage: https://github.com/koichik/node-tunnel/
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ licenses:
|
|||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: Licensed under the [MIT](https://github.com/koichik/node-tunnel/blob/master/LICENSE)
|
text: Licensed under the [MIT](https://github.com/koichik/node-tunnel/blob/master/LICENSE)
|
||||||
license.
|
license.
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
6
.licenses/npm/universal-user-agent.dep.yml
generated
6
.licenses/npm/universal-user-agent.dep.yml
generated
@@ -6,7 +6,7 @@ summary: Get a user agent string in both browser and node
|
|||||||
homepage:
|
homepage:
|
||||||
license: isc
|
license: isc
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE.md
|
- sources: LICENSE.md
|
||||||
text: |
|
text: |
|
||||||
# [ISC License](https://spdx.org/licenses/ISC)
|
# [ISC License](https://spdx.org/licenses/ISC)
|
||||||
|
|
||||||
@@ -15,6 +15,6 @@ licenses:
|
|||||||
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
- sources: README.md
|
- sources: README.md
|
||||||
text: "[ISC](LICENSE.md)"
|
text: '[ISC](LICENSE.md)'
|
||||||
notices: []
|
notices: []
|
||||||
|
|||||||
20
.licenses/npm/uuid.dep.yml
generated
Normal file
20
.licenses/npm/uuid.dep.yml
generated
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: uuid
|
||||||
|
version: 8.3.2
|
||||||
|
type: npm
|
||||||
|
summary: RFC4122 (v1, v4, and v5) UUIDs
|
||||||
|
homepage:
|
||||||
|
license: mit
|
||||||
|
licenses:
|
||||||
|
- sources: LICENSE.md
|
||||||
|
text: |
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2010-2020 Robert Kieffer and other contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
notices: []
|
||||||
2
.licenses/npm/webidl-conversions.dep.yml
generated
2
.licenses/npm/webidl-conversions.dep.yml
generated
@@ -6,7 +6,7 @@ summary: Implements the WebIDL algorithms for converting to and from JavaScript
|
|||||||
homepage:
|
homepage:
|
||||||
license: bsd-2-clause
|
license: bsd-2-clause
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE.md
|
- sources: LICENSE.md
|
||||||
text: |
|
text: |
|
||||||
# The BSD 2-Clause License
|
# The BSD 2-Clause License
|
||||||
|
|
||||||
|
|||||||
2
.licenses/npm/whatwg-url.dep.yml
generated
2
.licenses/npm/whatwg-url.dep.yml
generated
@@ -6,7 +6,7 @@ summary: An implementation of the WHATWG URL Standard's URL API and parsing mach
|
|||||||
homepage:
|
homepage:
|
||||||
license: mit
|
license: mit
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE.txt
|
- sources: LICENSE.txt
|
||||||
text: |
|
text: |
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
|||||||
2
.licenses/npm/wrappy.dep.yml
generated
2
.licenses/npm/wrappy.dep.yml
generated
@@ -6,7 +6,7 @@ summary: Callback wrapping utility
|
|||||||
homepage: https://github.com/npm/wrappy
|
homepage: https://github.com/npm/wrappy
|
||||||
license: isc
|
license: isc
|
||||||
licenses:
|
licenses:
|
||||||
- sources: LICENSE
|
- sources: LICENSE
|
||||||
text: |
|
text: |
|
||||||
The ISC License
|
The ISC License
|
||||||
|
|
||||||
|
|||||||
1
CODEOWNERS
Normal file
1
CODEOWNERS
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* @actions/actions-add-to-project
|
||||||
154
README.md
154
README.md
@@ -1,16 +1,27 @@
|
|||||||
# actions/add-to-project
|
# actions/add-to-project
|
||||||
|
|
||||||
🚨 **This action is a work in progress. Please do not use it except for
|
Use this action to automatically add the current issue or pull request to a [GitHub project](https://docs.github.com/en/issues/trying-out-the-new-projects-experience/about-projects).
|
||||||
experimentation until a release has been prepared.** 🚨
|
Note that this action does not support [GitHub projects (classic)](https://docs.github.com/en/issues/organizing-your-work-with-project-boards).
|
||||||
|
|
||||||
Use this action to automatically add issues to a GitHub Project. Note that this
|
## Current Status
|
||||||
is for [GitHub Projects
|
|
||||||
(beta)](https://docs.github.com/en/issues/trying-out-the-new-projects-experience/about-projects),
|
|
||||||
not the original GitHub Projects.
|
|
||||||
|
|
||||||
To use the action, create a workflow that runs when issues are opened in your
|
[](https://github.com/actions/add-to-project/actions/workflows/test.yml)
|
||||||
repository. Run this action in a step, optionally configuring any filters you
|
|
||||||
may want to add, such as only adding issues with certain labels.
|
> **NOTE:** ⚠️ This action no longer uses the deprecated ProjectNext API. If you are looking for the old version of that action, use version [v0.0.5](https://github.com/actions/add-to-project/releases/tag/v0.0.5).
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
_See [action.yml](action.yml) for [metadata](https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions) that defines the inputs, outputs, and runs configuration for this action._
|
||||||
|
|
||||||
|
_For more information about workflows, see [Using workflows](https://docs.github.com/en/actions/using-workflows)._
|
||||||
|
|
||||||
|
Create a workflow that runs when Issues or Pull Requests are opened or labeled in your repository; this workflow also supports adding Issues to your project which are transferred into your repository. Optionally configure any filters you may want to add, such as only adding issues with certain labels. You may match labels with an `AND` or an `OR` operator, or exclude labels with a `NOT` operator.
|
||||||
|
|
||||||
|
Once you've configured your workflow, save it as a `.yml` file in your target Repository's `.github/workflows` directory.
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
#### Example Usage: Issue opened with labels `bug` OR `needs-triage`
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
name: Add bugs to bugs project
|
name: Add bugs to bugs project
|
||||||
@@ -25,25 +36,122 @@ jobs:
|
|||||||
name: Add issue to project
|
name: Add issue to project
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
# Pointing to a branch name generally isn't the safest way to refer to an action,
|
- uses: actions/add-to-project@RELEASE_VERSION
|
||||||
# but this is how you can use this action now before we've begun creating releases.
|
with:
|
||||||
# Another option would be to point to a full commit SHA.
|
# You can target a project in a different organization
|
||||||
- uses: actions/add-to-project@main
|
# to the issue
|
||||||
|
project-url: https://github.com/orgs/<orgName>/projects/<projectNumber>
|
||||||
|
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
|
||||||
|
labeled: bug, needs-triage
|
||||||
|
label-operator: OR
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Example Usage: Adds all issues opened that do not include the label `bug` OR `needs-triage`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: Adds all issues that don't include the 'bug' or 'needs-triage' labels to project board
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
add-to-project:
|
||||||
|
name: Add issue to project
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/add-to-project@RELEASE_VERSION
|
||||||
with:
|
with:
|
||||||
project-url: https://github.com/orgs/<orgName>/projects/<projectNumber>
|
project-url: https://github.com/orgs/<orgName>/projects/<projectNumber>
|
||||||
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
|
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
|
||||||
labeled: bug
|
labeled: bug, needs-triage
|
||||||
|
label-operator: NOT
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Example Usage: Pull Requests labeled with `needs-review` and `size/XL`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: Add needs-review and size/XL pull requests to projects
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- labeled
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
add-to-project:
|
||||||
|
name: Add issue to project
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/add-to-project@RELEASE_VERSION
|
||||||
|
with:
|
||||||
|
project-url: https://github.com/orgs/<orgName>/projects/<projectNumber>
|
||||||
|
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
|
||||||
|
labeled: needs-review, size/XL
|
||||||
|
label-operator: AND
|
||||||
|
```
|
||||||
|
|
||||||
|
### Further reading and additional resources
|
||||||
|
|
||||||
|
- [actions/add-to-project](#actionsadd-to-project)
|
||||||
|
- [Current Status](#current-status)
|
||||||
|
- [Usage](#usage)
|
||||||
|
- [Examples](#examples)
|
||||||
|
- [Example Usage: Issue opened with labels `bug` OR `needs-triage`](#example-usage-issue-opened-with-labels-bug-or-needs-triage)
|
||||||
|
- [Example Usage: Adds all issues opened that do not include the label `bug` OR `needs-triage`](#example-usage-adds-all-issues-opened-that-do-not-include-the-label-bug-or-needs-triage)
|
||||||
|
- [Example Usage: Pull Requests labeled with `needs-review` and `size/XL`](#example-usage-pull-requests-labeled-with-needs-review-and-sizexl)
|
||||||
|
- [Further reading and additional resources](#further-reading-and-additional-resources)
|
||||||
|
- [Inputs](#inputs)
|
||||||
|
- [Supported Events](#supported-events)
|
||||||
|
- [Creating a PAT and adding it to your repository](#creating-a-pat-and-adding-it-to-your-repository)
|
||||||
|
- [Development](#development)
|
||||||
|
- [Publish to a distribution branch](#publish-to-a-distribution-branch)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
- `project-url` is the URL of the GitHub Project to add issues to.
|
- <a name="project-url">`project-url`</a> **(required)** is the URL of the GitHub project to add issues to.
|
||||||
- `github-token` is a [personal access
|
_eg: `https://github.com/orgs|users/<ownerName>/projects/<projectNumber>`_
|
||||||
token](https://github.com/settings/tokens/new) with the `repo`, `write:org` and
|
- <a name="github-token">`github-token`</a> **(required)** is a [personal access
|
||||||
`read:org` scopes.
|
token](https://github.com/settings/tokens/new) with `repo` and `project` scopes.
|
||||||
- `labeled` is a comma-separated list of labels. For an issue to be added to the
|
_See [Creating a PAT and adding it to your repository](#creating-a-pat-and-adding-it-to-your-repository) for more details_
|
||||||
project, it must have _one_ of the labels in the list. Omitting this key means
|
- <a name="labeled">`labeled`</a> **(optional)** is a comma-separated list of labels used to filter applicable issues. When this key is provided, an issue must have _one_ of the labels in the list to be added to the project. Omitting this key means that any issue will be added.
|
||||||
that all issues will be added.
|
- <a name="labeled">`label-operator`</a> **(optional)** is the behavior of the labels filter, either `AND`, `OR` or `NOT` that controls if the issue should be matched with `all` `labeled` input or any of them, default is `OR`.
|
||||||
|
|
||||||
|
## Supported Events
|
||||||
|
|
||||||
|
Currently this action supports the following [`issues` events](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#issues):
|
||||||
|
|
||||||
|
- `opened`
|
||||||
|
- `reopened`
|
||||||
|
- `transferred`
|
||||||
|
- `labeled`
|
||||||
|
|
||||||
|
and the following [`pull_request` events](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request):
|
||||||
|
|
||||||
|
- `opened`
|
||||||
|
- `reopened`
|
||||||
|
- `labeled`
|
||||||
|
|
||||||
|
Using these events ensure that a given issue or pull request, in the workflow's repo, is added to the [specified project](#project-url). If [labeled input(s)](#labeled) are defined, then issues will only be added if they contain at least _one_ of the labels in the list.
|
||||||
|
|
||||||
|
## Creating a PAT and adding it to your repository
|
||||||
|
|
||||||
|
- create a new [personal access
|
||||||
|
token](https://github.com/settings/tokens/new) with `project` scope. For private repos you will also need `repo` scope.
|
||||||
|
_See [Creating a personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) for more information_
|
||||||
|
|
||||||
|
> **NOTE:** ℹ️ Use a classic token with full control of projects. Personal access tokens with fine grained access do not support the GraphQL API.
|
||||||
|
|
||||||
|
- add the newly created PAT as a repository secret, this secret will be referenced by the [github-token input](#github-token)
|
||||||
|
_See [Encrypted secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository) for more information_
|
||||||
|
|
||||||
|
## Setting a specific status or column name to the project item
|
||||||
|
|
||||||
|
If you want to add an issue to a custom default column in a project (i.e. other than 'Todo'), you can do this directly via the project UI. You don't need to add anything else to your YAML workflow file to get this to work.
|
||||||
|
|
||||||
|
Use the [Add To GitHub Projects](https://github.com/marketplace/actions/add-to-github-projects) action to assign newly opened issues to the project. And then in the project UI simply [specify which column to use as the default](https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/quickstart-for-projects#configure-built-in-automation)!
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
@@ -76,3 +184,7 @@ the "dist/" directory.
|
|||||||
```
|
```
|
||||||
|
|
||||||
Now, a release can be created from the branch containing the built action.
|
Now, a release can be created from the branch containing the built action.
|
||||||
|
|
||||||
|
# License
|
||||||
|
|
||||||
|
The scripts and documentation in this project are released under the [MIT License](LICENSE)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import * as core from '@actions/core'
|
import * as core from '@actions/core'
|
||||||
import * as github from '@actions/github'
|
import * as github from '@actions/github'
|
||||||
import {addToProject} from '../src/add-to-project'
|
|
||||||
|
import {addToProject, mustGetOwnerTypeQuery} from '../src/add-to-project'
|
||||||
|
|
||||||
describe('addToProject', () => {
|
describe('addToProject', () => {
|
||||||
let outputs: Record<string, string>
|
let outputs: Record<string, string>
|
||||||
@@ -11,8 +12,8 @@ describe('addToProject', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockGetInput({
|
mockGetInput({
|
||||||
'project-url': 'https://github.com/orgs/github/projects/1',
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
'github-token': 'gh_token'
|
'github-token': 'gh_token',
|
||||||
})
|
})
|
||||||
|
|
||||||
outputs = mockSetOutput()
|
outputs = mockSetOutput()
|
||||||
@@ -23,47 +24,20 @@ describe('addToProject', () => {
|
|||||||
jest.restoreAllMocks()
|
jest.restoreAllMocks()
|
||||||
})
|
})
|
||||||
|
|
||||||
test('adds an issue to the project', async () => {
|
test('adds an issue from the same organization to the project', async () => {
|
||||||
mockGraphQL(
|
|
||||||
{
|
|
||||||
test: /getProject/,
|
|
||||||
return: {
|
|
||||||
organization: {
|
|
||||||
projectNext: {
|
|
||||||
id: 'project-next-id'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /addProjectNextItem/,
|
|
||||||
return: {
|
|
||||||
addProjectNextItem: {
|
|
||||||
projectNextItem: {
|
|
||||||
id: 'project-next-item-id'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
await addToProject()
|
|
||||||
|
|
||||||
expect(outputs.itemId).toEqual('project-next-item-id')
|
|
||||||
})
|
|
||||||
|
|
||||||
test('adds matching issues with a label filter', async () => {
|
|
||||||
mockGetInput({
|
|
||||||
'project-url': 'https://github.com/orgs/github/projects/1',
|
|
||||||
'github-token': 'gh_token',
|
|
||||||
labeled: 'bug'
|
|
||||||
})
|
|
||||||
|
|
||||||
github.context.payload = {
|
github.context.payload = {
|
||||||
issue: {
|
issue: {
|
||||||
number: 1,
|
number: 1,
|
||||||
labels: [{name: 'bug'}]
|
labels: [{name: 'bug'}],
|
||||||
}
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
mockGraphQL(
|
mockGraphQL(
|
||||||
@@ -71,41 +45,194 @@ describe('addToProject', () => {
|
|||||||
test: /getProject/,
|
test: /getProject/,
|
||||||
return: {
|
return: {
|
||||||
organization: {
|
organization: {
|
||||||
projectNext: {
|
projectV2: {
|
||||||
id: 'project-next-id'
|
id: 'project-id',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /addProjectNextItem/,
|
test: /addProjectV2ItemById/,
|
||||||
return: {
|
return: {
|
||||||
addProjectNextItem: {
|
addProjectV2ItemById: {
|
||||||
projectNextItem: {
|
item: {
|
||||||
id: 'project-next-item-id'
|
id: 'project-item-id',
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
await addToProject()
|
await addToProject()
|
||||||
|
|
||||||
expect(outputs.itemId).toEqual('project-next-item-id')
|
expect(outputs.itemId).toEqual('project-item-id')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('does not add un-matching issues with a label filter', async () => {
|
test('adds an issue from a different organization to the project', async () => {
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 2221,
|
||||||
|
labels: [{name: 'bug'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/octokit/octokit.js/issues/2221',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'octokit.js',
|
||||||
|
owner: {
|
||||||
|
login: 'octokit',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2DraftIssue/,
|
||||||
|
return: {
|
||||||
|
addProjectV2DraftIssue: {
|
||||||
|
projectItem: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(outputs.itemId).toEqual('project-item-id')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('adds matching issues with a label filter without label-operator', async () => {
|
||||||
mockGetInput({
|
mockGetInput({
|
||||||
'project-url': 'https://github.com/orgs/github/projects/1',
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
'github-token': 'gh_token',
|
'github-token': 'gh_token',
|
||||||
labeled: 'bug'
|
labeled: 'bug, new',
|
||||||
})
|
})
|
||||||
|
|
||||||
github.context.payload = {
|
github.context.payload = {
|
||||||
issue: {
|
issue: {
|
||||||
number: 1,
|
number: 1,
|
||||||
labels: []
|
labels: [{name: 'bug'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(outputs.itemId).toEqual('project-item-id')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('adds matching pull-requests with a label filter without label-operator', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'bug, new',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
pull_request: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'bug'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/pull/136',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(outputs.itemId).toEqual('project-item-id')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('does not add un-matching issues with a label filter without label-operator', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'bug',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const infoSpy = jest.spyOn(core, 'info')
|
const infoSpy = jest.spyOn(core, 'info')
|
||||||
@@ -114,6 +241,563 @@ describe('addToProject', () => {
|
|||||||
expect(infoSpy).toHaveBeenCalledWith(`Skipping issue 1 because it does not have one of the labels: bug`)
|
expect(infoSpy).toHaveBeenCalledWith(`Skipping issue 1 because it does not have one of the labels: bug`)
|
||||||
expect(gqlMock).not.toHaveBeenCalled()
|
expect(gqlMock).not.toHaveBeenCalled()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('adds matching issues with labels filter with AND label-operator', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'bug, new',
|
||||||
|
'label-operator': 'AND',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'bug'}, {name: 'new'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(outputs.itemId).toEqual('project-item-id')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('does not add un-matching issues with labels filter with AND label-operator', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'bug, new',
|
||||||
|
'label-operator': 'AND',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'bug'}, {name: 'other'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const infoSpy = jest.spyOn(core, 'info')
|
||||||
|
const gqlMock = mockGraphQL()
|
||||||
|
await addToProject()
|
||||||
|
expect(infoSpy).toHaveBeenCalledWith(`Skipping issue 1 because it doesn't match all the labels: bug, new`)
|
||||||
|
expect(gqlMock).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('does not add matching issues with labels filter with NOT label-operator', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'bug, new',
|
||||||
|
'label-operator': 'NOT',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'bug'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const infoSpy = jest.spyOn(core, 'info')
|
||||||
|
const gqlMock = mockGraphQL()
|
||||||
|
await addToProject()
|
||||||
|
expect(infoSpy).toHaveBeenCalledWith(`Skipping issue 1 because it contains one of the labels: bug, new`)
|
||||||
|
expect(gqlMock).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('adds issues that do not have labels present in the label list with NOT label-operator', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'bug, new',
|
||||||
|
'label-operator': 'NOT',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'other'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-next-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-next-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(outputs.itemId).toEqual('project-next-item-id')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('adds matching issues with multiple label filters', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'accessibility,backend,bug',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'accessibility'}, {name: 'backend'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const gqlMock = mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
const infoSpy = jest.spyOn(core, 'info')
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(gqlMock).toHaveBeenCalled()
|
||||||
|
expect(infoSpy).toHaveBeenCalledWith('Creating project item')
|
||||||
|
// We shouldn't have any logs relating to the issue being skipped
|
||||||
|
expect(infoSpy.mock.calls.length).toEqual(1)
|
||||||
|
expect(outputs.itemId).toEqual('project-item-id')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('does not add un-matching issues with multiple label filters', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'accessibility, backend, bug',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'data'}, {name: 'frontend'}, {name: 'improvement'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const infoSpy = jest.spyOn(core, 'info')
|
||||||
|
const gqlMock = mockGraphQL()
|
||||||
|
await addToProject()
|
||||||
|
expect(infoSpy).toHaveBeenCalledWith(
|
||||||
|
`Skipping issue 1 because it does not have one of the labels: accessibility, backend, bug`,
|
||||||
|
)
|
||||||
|
expect(gqlMock).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('handles spaces and extra commas gracefully in label filter input', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'accessibility , backend ,, . , bug',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'accessibility'}, {name: 'backend'}, {name: 'bug'}],
|
||||||
|
'label-operator': 'AND',
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const gqlMock = mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
const infoSpy = jest.spyOn(core, 'info')
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(gqlMock).toHaveBeenCalled()
|
||||||
|
expect(infoSpy).toHaveBeenCalledWith('Creating project item')
|
||||||
|
// We shouldn't have any logs relating to the issue being skipped
|
||||||
|
expect(infoSpy.mock.calls.length).toEqual(1)
|
||||||
|
expect(outputs.itemId).toEqual('project-item-id')
|
||||||
|
})
|
||||||
|
|
||||||
|
test(`throws an error when url isn't a valid project url`, async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/github/repositories',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const infoSpy = jest.spyOn(core, 'info')
|
||||||
|
const gqlMock = mockGraphQL()
|
||||||
|
await expect(addToProject()).rejects.toThrow(
|
||||||
|
'Invalid project URL: https://github.com/orgs/github/repositories. Project URL should match the format <GitHub server domain name>/<orgs-or-users>/<ownerName>/projects/<projectNumber>',
|
||||||
|
)
|
||||||
|
expect(infoSpy).not.toHaveBeenCalled()
|
||||||
|
expect(gqlMock).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
|
test(`works with URLs that are not under the github.com domain`, async () => {
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'bug'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://notgithub.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(outputs.itemId).toEqual('project-item-id')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('constructs the correct graphQL query given an organization owner', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'bug, new',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'bug'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const gqlMock = mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(gqlMock).toHaveBeenNthCalledWith(1, expect.stringContaining('organization(login: $projectOwnerName)'), {
|
||||||
|
projectOwnerName: 'actions',
|
||||||
|
projectNumber: 1,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test('constructs the correct graphQL query given a user owner', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/users/monalisa/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'bug, new',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'bug'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/monalisa/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'monalisa',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const gqlMock = mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(gqlMock).toHaveBeenNthCalledWith(1, expect.stringContaining('user(login: $projectOwnerName)'), {
|
||||||
|
projectOwnerName: 'monalisa',
|
||||||
|
projectNumber: 1,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test('compares labels case-insensitively', async () => {
|
||||||
|
mockGetInput({
|
||||||
|
'project-url': 'https://github.com/orgs/actions/projects/1',
|
||||||
|
'github-token': 'gh_token',
|
||||||
|
labeled: 'FOO, Bar, baz',
|
||||||
|
'label-operator': 'AND',
|
||||||
|
})
|
||||||
|
|
||||||
|
github.context.payload = {
|
||||||
|
issue: {
|
||||||
|
number: 1,
|
||||||
|
labels: [{name: 'foo'}, {name: 'BAR'}, {name: 'baz'}],
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
html_url: 'https://github.com/actions/add-to-project/issues/74',
|
||||||
|
},
|
||||||
|
repository: {
|
||||||
|
name: 'add-to-project',
|
||||||
|
owner: {
|
||||||
|
login: 'actions',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
mockGraphQL(
|
||||||
|
{
|
||||||
|
test: /getProject/,
|
||||||
|
return: {
|
||||||
|
organization: {
|
||||||
|
projectV2: {
|
||||||
|
id: 'project-next-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /addProjectV2ItemById/,
|
||||||
|
return: {
|
||||||
|
addProjectV2ItemById: {
|
||||||
|
item: {
|
||||||
|
id: 'project-next-item-id',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
await addToProject()
|
||||||
|
|
||||||
|
expect(outputs.itemId).toEqual('project-next-item-id')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('mustGetOwnerTypeQuery', () => {
|
||||||
|
test('returns organization for orgs ownerType', async () => {
|
||||||
|
const ownerTypeQuery = mustGetOwnerTypeQuery('orgs')
|
||||||
|
|
||||||
|
expect(ownerTypeQuery).toEqual('organization')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('returns user for users ownerType', async () => {
|
||||||
|
const ownerTypeQuery = mustGetOwnerTypeQuery('users')
|
||||||
|
|
||||||
|
expect(ownerTypeQuery).toEqual('user')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('throws an error when an unsupported ownerType is set', async () => {
|
||||||
|
expect(() => {
|
||||||
|
mustGetOwnerTypeQuery('unknown')
|
||||||
|
}).toThrow(`Unsupported ownerType: unknown. Must be one of 'orgs' or 'users'`)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
function mockGetInput(mocks: Record<string, string>): jest.SpyInstance {
|
function mockGetInput(mocks: Record<string, string>): jest.SpyInstance {
|
||||||
@@ -140,7 +824,7 @@ function mockGraphQL(...mocks: {test: RegExp; return: unknown}[]): jest.Mock {
|
|||||||
|
|
||||||
jest.spyOn(github, 'getOctokit').mockImplementation(() => {
|
jest.spyOn(github, 'getOctokit').mockImplementation(() => {
|
||||||
return {
|
return {
|
||||||
graphql: mock
|
graphql: mock,
|
||||||
} as unknown as ReturnType<typeof github.getOctokit>
|
} as unknown as ReturnType<typeof github.getOctokit>
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
10
action.yml
10
action.yml
@@ -1,6 +1,8 @@
|
|||||||
name: Add to Project
|
name: Add To GitHub projects
|
||||||
description: Automatically add issues and PRs to GitHub projects
|
description: Automatically add issues and PRs to GitHub projects
|
||||||
author: GitHub
|
author: GitHub
|
||||||
|
branding:
|
||||||
|
icon: table
|
||||||
inputs:
|
inputs:
|
||||||
project-url:
|
project-url:
|
||||||
required: true
|
required: true
|
||||||
@@ -11,6 +13,12 @@ inputs:
|
|||||||
labeled:
|
labeled:
|
||||||
required: false
|
required: false
|
||||||
description: A comma-separated list of labels to use as a filter for issue to be added
|
description: A comma-separated list of labels to use as a filter for issue to be added
|
||||||
|
label-operator:
|
||||||
|
required: false
|
||||||
|
description: The behavior of the labels filter, AND to match all labels, OR to match any label, NOT to exclude any listed label (default is OR)
|
||||||
|
outputs:
|
||||||
|
itemId:
|
||||||
|
description: The ID of the item that was added to the project
|
||||||
runs:
|
runs:
|
||||||
using: 'node16'
|
using: 'node16'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
|||||||
1536
dist/index.js
generated
vendored
1536
dist/index.js
generated
vendored
File diff suppressed because it is too large
Load Diff
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
13
dist/licenses.txt
generated
vendored
13
dist/licenses.txt
generated
vendored
@@ -562,6 +562,19 @@ Permission to use, copy, modify, and/or distribute this software for any purpose
|
|||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
uuid
|
||||||
|
MIT
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2010-2020 Robert Kieffer and other contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
webidl-conversions
|
webidl-conversions
|
||||||
BSD-2-Clause
|
BSD-2-Clause
|
||||||
# The BSD 2-Clause License
|
# The BSD 2-Clause License
|
||||||
|
|||||||
2
dist/sourcemap-register.js
generated
vendored
2
dist/sourcemap-register.js
generated
vendored
File diff suppressed because one or more lines are too long
@@ -3,7 +3,7 @@ module.exports = {
|
|||||||
moduleFileExtensions: ['js', 'ts'],
|
moduleFileExtensions: ['js', 'ts'],
|
||||||
testMatch: ['**/*.test.ts'],
|
testMatch: ['**/*.test.ts'],
|
||||||
transform: {
|
transform: {
|
||||||
'^.+\\.ts$': 'ts-jest'
|
'^.+\\.ts$': 'ts-jest',
|
||||||
},
|
},
|
||||||
verbose: true
|
verbose: true,
|
||||||
}
|
}
|
||||||
|
|||||||
8228
package-lock.json
generated
8228
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
39
package.json
39
package.json
@@ -1,31 +1,32 @@
|
|||||||
{
|
{
|
||||||
"name": "@actions/add-to-project",
|
"name": "@actions/add-to-project",
|
||||||
"description": "Automatically issues and PRs to GitHub projects",
|
"description": "Automatically adds issues and PRs to GitHub projects",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"author": "GitHub and contributors",
|
"author": "GitHub and contributors",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.6.0",
|
"@actions/core": "^1.10.0",
|
||||||
"@actions/github": "^5.0.0"
|
"@actions/github": "^5.1.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16.0.0 <17.0.0",
|
"node": ">=16.0.0 <20.0.0",
|
||||||
"npm": ">= 7.0.0"
|
"npm": ">= 8.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@github/prettier-config": "^0.0.4",
|
"@github/prettier-config": "^0.0.6",
|
||||||
"@types/jest": "^27.4.0",
|
"@types/jest": "^29.5.4",
|
||||||
"@types/node": "^12.12.6",
|
"@types/node": "16.18.51",
|
||||||
"@typescript-eslint/parser": "^5.10.2",
|
"@typescript-eslint/parser": "^6.7.0",
|
||||||
"@vercel/ncc": "^0.33.1",
|
"@typescript-eslint/eslint-plugin": "^6.7.0",
|
||||||
"concurrently": "^7.0.0",
|
"@vercel/ncc": "^0.38.0",
|
||||||
"eslint": "^8.8.0",
|
"concurrently": "^8.2.1",
|
||||||
"eslint-plugin-github": "^4.3.5",
|
"eslint": "^8.49.0",
|
||||||
"eslint-plugin-jest": "^26.0.0",
|
"eslint-plugin-github": "^4.10.0",
|
||||||
"eslint-plugin-prettier": "^4.0.0",
|
"eslint-plugin-jest": "^27.2.3",
|
||||||
"jest": "^27.4.7",
|
"eslint-plugin-prettier": "^5.0.0",
|
||||||
"prettier": "2.5.1",
|
"jest": "^29.7.0",
|
||||||
"ts-jest": "^27.1.3",
|
"prettier": "3.0.3",
|
||||||
"typescript": "^4.5.5"
|
"ts-jest": "^29.1.1",
|
||||||
|
"typescript": "^5.2.2"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"actions",
|
"actions",
|
||||||
|
|||||||
@@ -1,28 +1,33 @@
|
|||||||
import * as core from '@actions/core'
|
import * as core from '@actions/core'
|
||||||
import * as github from '@actions/github'
|
import * as github from '@actions/github'
|
||||||
|
|
||||||
// TODO: Ensure this (and the Octokit client) works for non-github.com URLs, as well.
|
const urlParse = /\/(?<ownerType>orgs|users)\/(?<ownerName>[^/]+)\/projects\/(?<projectNumber>\d+)/
|
||||||
// https://github.com/orgs|users/<ownerName>/projects/<projectNumber>
|
|
||||||
const urlParse =
|
|
||||||
/^(?:https:\/\/)?github\.com\/(?<ownerType>orgs|users)\/(?<ownerName>[^/]+)\/projects\/(?<projectNumber>\d+)/
|
|
||||||
|
|
||||||
interface ProjectNodeIDResponse {
|
interface ProjectNodeIDResponse {
|
||||||
organization?: {
|
organization?: {
|
||||||
projectNext: {
|
projectV2: {
|
||||||
id: string
|
id: string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
user?: {
|
user?: {
|
||||||
projectNext: {
|
projectV2: {
|
||||||
id: string
|
id: string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ProjectAddItemResponse {
|
interface ProjectAddItemResponse {
|
||||||
addProjectNextItem: {
|
addProjectV2ItemById: {
|
||||||
projectNextItem: {
|
item: {
|
||||||
|
id: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ProjectV2AddDraftIssueResponse {
|
||||||
|
addProjectV2DraftIssue: {
|
||||||
|
projectItem: {
|
||||||
id: string
|
id: string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,83 +40,125 @@ export async function addToProject(): Promise<void> {
|
|||||||
core
|
core
|
||||||
.getInput('labeled')
|
.getInput('labeled')
|
||||||
.split(',')
|
.split(',')
|
||||||
.map(l => l.trim())
|
.map(l => l.trim().toLowerCase())
|
||||||
.filter(l => l.length > 0) ?? []
|
.filter(l => l.length > 0) ?? []
|
||||||
|
const labelOperator = core.getInput('label-operator').trim().toLocaleLowerCase()
|
||||||
|
|
||||||
const octokit = github.getOctokit(ghToken)
|
const octokit = github.getOctokit(ghToken)
|
||||||
const urlMatch = projectUrl.match(urlParse)
|
|
||||||
const issue = github.context.payload.issue ?? github.context.payload.pull_request
|
const issue = github.context.payload.issue ?? github.context.payload.pull_request
|
||||||
const issueLabels: string[] = (issue?.labels ?? []).map((l: {name: string}) => l.name)
|
const issueLabels: string[] = (issue?.labels ?? []).map((l: {name: string}) => l.name.toLowerCase())
|
||||||
|
const issueOwnerName = github.context.payload.repository?.owner.login
|
||||||
|
|
||||||
// Ensure the issue matches our `labeled` filter, if provided.
|
core.debug(`Issue/PR owner: ${issueOwnerName}`)
|
||||||
if (labeled.length > 0) {
|
core.debug(`Issue/PR labels: ${issueLabels.join(', ')}`)
|
||||||
const hasLabel = issueLabels.some(l => labeled.includes(l))
|
|
||||||
|
|
||||||
if (!hasLabel) {
|
// Ensure the issue matches our `labeled` filter based on the label-operator.
|
||||||
|
if (labelOperator === 'and') {
|
||||||
|
if (!labeled.every(l => issueLabels.includes(l))) {
|
||||||
|
core.info(`Skipping issue ${issue?.number} because it doesn't match all the labels: ${labeled.join(', ')}`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else if (labelOperator === 'not') {
|
||||||
|
if (labeled.length > 0 && issueLabels.some(l => labeled.includes(l))) {
|
||||||
|
core.info(`Skipping issue ${issue?.number} because it contains one of the labels: ${labeled.join(', ')}`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (labeled.length > 0 && !issueLabels.some(l => labeled.includes(l))) {
|
||||||
core.info(`Skipping issue ${issue?.number} because it does not have one of the labels: ${labeled.join(', ')}`)
|
core.info(`Skipping issue ${issue?.number} because it does not have one of the labels: ${labeled.join(', ')}`)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
core.debug(`Project URL: ${projectUrl}`)
|
core.debug(`Project URL: ${projectUrl}`)
|
||||||
|
|
||||||
|
const urlMatch = projectUrl.match(urlParse)
|
||||||
|
|
||||||
if (!urlMatch) {
|
if (!urlMatch) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Invalid project URL: ${projectUrl}. Project URL should match the format https://github.com/<orgs-or-users>/<ownerName>/projects/<projectNumber>`
|
`Invalid project URL: ${projectUrl}. Project URL should match the format <GitHub server domain name>/<orgs-or-users>/<ownerName>/projects/<projectNumber>`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const ownerName = urlMatch.groups?.ownerName
|
const projectOwnerName = urlMatch.groups?.ownerName
|
||||||
const projectNumber = parseInt(urlMatch.groups?.projectNumber ?? '', 10)
|
const projectNumber = parseInt(urlMatch.groups?.projectNumber ?? '', 10)
|
||||||
const ownerType = urlMatch.groups?.ownerType
|
const ownerType = urlMatch.groups?.ownerType
|
||||||
const ownerTypeQuery = mustGetOwnerTypeQuery(ownerType)
|
const ownerTypeQuery = mustGetOwnerTypeQuery(ownerType)
|
||||||
|
|
||||||
core.debug(`Org name: ${ownerName}`)
|
core.debug(`Project owner: ${projectOwnerName}`)
|
||||||
core.debug(`Project number: ${projectNumber}`)
|
core.debug(`Project number: ${projectNumber}`)
|
||||||
core.debug(`Owner type: ${ownerType}`)
|
core.debug(`Project owner type: ${ownerType}`)
|
||||||
|
|
||||||
// First, use the GraphQL API to request the project's node ID.
|
// First, use the GraphQL API to request the project's node ID.
|
||||||
const idResp = await octokit.graphql<ProjectNodeIDResponse>(
|
const idResp = await octokit.graphql<ProjectNodeIDResponse>(
|
||||||
`query getProject($ownerName: String!, $projectNumber: Int!) {
|
`query getProject($projectOwnerName: String!, $projectNumber: Int!) {
|
||||||
${ownerTypeQuery}(login: $ownerName) {
|
${ownerTypeQuery}(login: $projectOwnerName) {
|
||||||
projectNext(number: $projectNumber) {
|
projectV2(number: $projectNumber) {
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}`,
|
}`,
|
||||||
{
|
{
|
||||||
ownerName,
|
projectOwnerName,
|
||||||
projectNumber
|
projectNumber,
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
const projectId = idResp[ownerTypeQuery]?.projectNext.id
|
const projectId = idResp[ownerTypeQuery]?.projectV2.id
|
||||||
const contentId = issue?.node_id
|
const contentId = issue?.node_id
|
||||||
|
|
||||||
core.debug(`Project node ID: ${projectId}`)
|
core.debug(`Project node ID: ${projectId}`)
|
||||||
core.debug(`Content ID: ${contentId}`)
|
core.debug(`Content ID: ${contentId}`)
|
||||||
|
|
||||||
// Next, use the GraphQL API to add the issue to the project.
|
// Next, use the GraphQL API to add the issue to the project.
|
||||||
|
// If the issue has the same owner as the project, we can directly
|
||||||
|
// add a project item. Otherwise, we add a draft issue.
|
||||||
|
if (issueOwnerName === projectOwnerName) {
|
||||||
|
core.info('Creating project item')
|
||||||
|
|
||||||
const addResp = await octokit.graphql<ProjectAddItemResponse>(
|
const addResp = await octokit.graphql<ProjectAddItemResponse>(
|
||||||
`mutation addIssueToProject($input: AddProjectNextItemInput!) {
|
`mutation addIssueToProject($input: AddProjectV2ItemByIdInput!) {
|
||||||
addProjectNextItem(input: $input) {
|
addProjectV2ItemById(input: $input) {
|
||||||
projectNextItem {
|
item {
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}`,
|
}`,
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
|
projectId,
|
||||||
contentId,
|
contentId,
|
||||||
projectId
|
},
|
||||||
}
|
},
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
core.setOutput('itemId', addResp.addProjectNextItem.projectNextItem.id)
|
core.setOutput('itemId', addResp.addProjectV2ItemById.item.id)
|
||||||
|
} else {
|
||||||
|
core.info('Creating draft issue in project')
|
||||||
|
|
||||||
|
const addResp = await octokit.graphql<ProjectV2AddDraftIssueResponse>(
|
||||||
|
`mutation addDraftIssueToProject($projectId: ID!, $title: String!) {
|
||||||
|
addProjectV2DraftIssue(input: {
|
||||||
|
projectId: $projectId,
|
||||||
|
title: $title
|
||||||
|
}) {
|
||||||
|
projectItem {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`,
|
||||||
|
{
|
||||||
|
projectId,
|
||||||
|
title: issue?.html_url,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
core.setOutput('itemId', addResp.addProjectV2DraftIssue.projectItem.id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function mustGetOwnerTypeQuery(ownerType?: string): 'organization' | 'user' {
|
export function mustGetOwnerTypeQuery(ownerType?: string): 'organization' | 'user' {
|
||||||
const ownerTypeQuery = ownerType === 'orgs' ? 'organization' : ownerType === 'users' ? 'user' : null
|
const ownerTypeQuery = ownerType === 'orgs' ? 'organization' : ownerType === 'users' ? 'user' : null
|
||||||
|
|
||||||
if (!ownerTypeQuery) {
|
if (!ownerTypeQuery) {
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */,
|
"target": "ES2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */,
|
||||||
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
|
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
|
||||||
"outDir": "./lib" /* Redirect output structure to the directory. */,
|
"outDir": "./lib" /* Redirect output structure to the directory. */,
|
||||||
"rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
|
"rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
|
||||||
"strict": true /* Enable all strict type-checking options. */,
|
"strict": true /* Enable all strict type-checking options. */,
|
||||||
"noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
|
"noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
|
||||||
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
|
||||||
|
"noUncheckedIndexedAccess": true,
|
||||||
|
"lib": ["ES2015"]
|
||||||
},
|
},
|
||||||
"exclude": ["node_modules", "**/*.test.ts"]
|
"exclude": ["node_modules", "**/*.test.ts"]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user