Compare commits
1,637 commits
master
...
docs/audit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6fcf2d6210 | ||
|
|
e2e0f5c95e | ||
|
|
83721ad5b1 | ||
|
|
35750b71cc | ||
|
|
e39ed4ffba | ||
|
|
e571840f1d | ||
|
|
55bba6b40d | ||
|
|
2b6fd3856f | ||
|
|
2040ab9551 | ||
|
|
3f1e16dcfb | ||
|
|
b2b1abd3ce | ||
|
|
232c39abaa | ||
|
|
548c98a37f | ||
|
|
0002324776 | ||
|
|
951194bab5 | ||
|
|
1ca58e8d9f | ||
|
|
c854ec1c46 | ||
|
|
780966c8f4 | ||
|
|
ed879b1be2 | ||
|
|
2db420f4bd | ||
|
|
0c88fb217c | ||
|
|
0a2edd57aa | ||
|
|
f70b9bf229 | ||
|
|
3d1dc86079 | ||
|
|
cb76ef8c60 | ||
|
|
4a9d693e93 | ||
|
|
cbf70499c3 | ||
|
|
751e4afe3f |
||
|
|
966e3d5fbc | ||
|
|
bb53fcbfac |
||
|
|
386034e1ef | ||
|
|
c6f6b0d054 | ||
|
|
91ee276115 | ||
|
|
bfd7a6279c | ||
|
|
335fa0bcc5 |
||
|
|
ff6a333621 |
||
|
|
da9fd9690d |
||
|
|
c179893911 |
||
|
|
afbbcc9521 |
||
|
|
c567263f56 |
||
|
|
9d51280ec6 |
||
|
|
f4b9677bdc | ||
|
|
04ebc69fc6 | ||
|
|
1993ae3d8f | ||
|
|
f7326d8fef | ||
|
|
89ef7f7c55 |
||
|
|
91f4906908 |
||
|
|
043c4a0d94 | ||
|
|
4bfc52f0b5 |
||
|
|
8115b88a71 | ||
|
|
15812b4f80 |
||
|
|
47af2d2d48 | ||
|
|
fb664a7c48 |
||
|
|
b7414a4303 |
||
|
|
fdff7e7b21 | ||
|
|
bf805b4152 |
||
|
|
c2ba85663f |
||
|
|
3f11d4e3fa |
||
|
|
fe717c42b5 |
||
|
|
1a03404983 | ||
|
|
b3c01f4c67 |
||
|
|
26a18ef7a0 |
||
|
|
69929c2c37 | ||
|
|
c02ba8f5d6 |
||
|
|
1cf9042063 | ||
|
|
d863e525e3 |
||
|
|
10447e6fcd |
||
|
|
ca449a7706 |
||
|
|
9fe9c6647e |
||
|
|
1227f140b7 | ||
|
|
4c70d4501e |
||
|
|
ed81ab01e7 |
||
|
|
a9222b538d |
||
|
|
b0871c19e1 |
||
|
|
55277fd695 |
||
|
|
6539c80ba2 |
||
|
|
68c14d711b | ||
|
|
afcdb15503 | ||
|
|
48e3bd3dd4 |
||
|
|
8d999ba34d | ||
|
|
5f1c2ff6dc | ||
|
|
d9a003b56c |
||
|
|
4721add9b8 |
||
|
|
09e71d82b5 | ||
|
|
c2f25131d7 |
||
|
|
a412b70be5 |
||
|
|
81d1459b68 |
||
|
|
db5b0dcd4b |
||
|
|
67058c0923 |
||
|
|
6dc51420ac |
||
|
|
7bd1b4911c | ||
|
|
33a9c05213 |
||
|
|
9d6e6232d6 |
||
|
|
23bf36d36f |
||
|
|
906cd7003d |
||
|
|
f8e4eeb405 |
||
|
|
9f2b992d36 |
||
|
|
c08d2d72c3 |
||
|
|
bf762699bd |
||
|
|
a29b4f0861 |
||
|
|
b5ef00fd42 |
||
|
|
cc5b46cba1 |
||
|
|
b566b1830d | ||
|
|
12022e4947 | ||
|
|
4e2a3505bb |
||
|
|
fd89187c2f | ||
|
|
7a71836224 | ||
|
|
23e1f8923c | ||
|
|
101b09676d | ||
|
|
810dfbb11b | ||
|
|
e018ad6b92 | ||
|
|
234aea19bd | ||
|
|
5b88b485a9 |
||
|
|
112ba7ad4e | ||
|
|
584872eb9a |
||
|
|
1481b30610 |
||
|
|
e11479170a |
||
|
|
919524f287 |
||
|
|
cd06965b1a | ||
|
|
c15155b29b | ||
|
|
426b9fc61e | ||
|
|
fb8f12aca9 | ||
|
|
6857fb840a | ||
|
|
9668e348d8 | ||
|
|
b029a84fe4 | ||
|
|
4532b625c9 | ||
|
|
89cafbab55 | ||
|
|
50fe8cb855 | ||
|
|
425c3469b2 | ||
|
|
6a91656914 | ||
|
|
a3affdc963 | ||
|
|
b8fdee2a3a | ||
|
|
cad1fae3e4 | ||
|
|
52cd0d4cc7 | ||
|
|
a25ea74d5c | ||
|
|
d3d95e07d1 | ||
|
|
a5c43da52f | ||
|
|
cbfbf4699a | ||
|
|
e8765607ff |
||
|
|
9f96439ba1 |
||
|
|
568aa6602f |
||
|
|
b635b8eef5 |
||
|
|
504d456dea |
||
|
|
0bb90b421f | ||
|
|
859e843d02 | ||
|
|
71d11c9469 | ||
|
|
9b0c653948 | ||
|
|
67edf873be |
||
|
|
0fc13fee63 | ||
|
|
4b98ffd590 | ||
|
|
c244eeb21f |
||
|
|
3087ba0bdc |
||
|
|
66ad93d9d5 |
||
|
|
7b7f3cd754 |
||
|
|
0b7d1f4f67 |
||
|
|
a55c1fedcb | ||
|
|
01ed7affc9 |
||
|
|
fbd39c24f4 | ||
|
|
edfa223e2f | ||
|
|
5452135dcb | ||
|
|
3e9f7fce4e | ||
|
|
a8c8417d16 |
||
|
|
1bdeda8530 |
||
|
|
4cc8d1cc2f |
||
|
|
16ea4c72fe |
||
|
|
86f891673a | ||
|
|
d03a63e1b7 | ||
|
|
d126a3196c | ||
|
|
1d75dd030f | ||
|
|
fe29d1405e | ||
|
|
2da5955db7 |
||
|
|
ae4ed4fe31 |
||
|
|
2c99f9e43c |
||
|
|
371e05cb1f |
||
|
|
471ea9350b |
||
|
|
323327b53f |
||
|
|
83005be066 |
||
|
|
2134bc6e0d | ||
|
|
9ebc82afbb | ||
|
|
f143bd6866 | ||
|
|
a1c26a3fd9 | ||
|
|
47f264d010 | ||
|
|
b7c6c82cf3 | ||
|
|
6e93efcdc1 | ||
|
|
a49285bc21 | ||
|
|
dd206c4b67 | ||
|
|
3716acaae4 |
||
|
|
fe4e6c766b |
||
|
|
fa5b486966 |
||
|
|
44fcdf9ad7 |
||
|
|
582ad826b8 |
||
|
|
45d9bbcfae |
||
|
|
cbbba79340 |
||
|
|
2abd05f783 |
||
|
|
191ce6bba3 |
||
|
|
934d8c8871 | ||
|
|
b942293823 |
||
|
|
900da01ad7 | ||
|
|
51c0d1dcdc | ||
|
|
af3c6afb3b | ||
|
|
c922a7e685 | ||
|
|
40117e6565 | ||
|
|
ce8c10247d | ||
|
|
9e3786c9ea | ||
|
|
800810f092 | ||
|
|
2bfbe7f902 |
||
|
|
1618d53967 | ||
|
|
dabc18f663 | ||
|
|
73705dc56a | ||
|
|
754a41537a | ||
|
|
8d9dc19e17 |
||
|
|
e9916158c0 |
||
|
|
52df4837e0 |
||
|
|
f7aaf848ba |
||
|
|
5154f0b60f |
||
|
|
9fa596780b |
||
|
|
59cc71bdbb | ||
|
|
c0a83efe6d |
||
|
|
7287c1eb5c | ||
|
|
d1d57c132c | ||
|
|
f311a33bdd | ||
|
|
b55f4ea8e3 | ||
|
|
be28da26b8 | ||
|
|
94d03d5f13 | ||
|
|
685d8101aa |
||
|
|
833d533ed7 |
||
|
|
da0da5fc69 |
||
|
|
66ba876a65 | ||
|
|
9fcede47f7 | ||
|
|
421b75ef21 |
||
|
|
89a70b94de |
||
|
|
facc47bd30 |
||
|
|
0222bfa728 |
||
|
|
edb90bdaab |
||
|
|
b2a0e2972a |
||
|
|
e973f5ad86 |
||
|
|
f59798ef1d |
||
|
|
eb8a1b53d2 |
||
|
|
2d57b5b1d5 |
||
|
|
29706a4bf8 |
||
|
|
b80ec34550 |
||
|
|
6344a8a553 |
||
|
|
1f5e9852e4 |
||
|
|
e97c390f12 |
||
|
|
7e5edfdfe3 |
||
|
|
81211d56d9 |
||
|
|
7453df5aa1 |
||
|
|
b3cd25cb4a | ||
|
|
a9c031155a | ||
|
|
afb4bd933d |
||
|
|
a8e91e7aec |
||
|
|
f891096d97 |
||
|
|
be1d500974 |
||
|
|
0b546a1856 |
||
|
|
9e2e980e52 |
||
|
|
371e103290 |
||
|
|
0a05348220 |
||
|
|
7977a81606 |
||
|
|
3fba0cfb22 |
||
|
|
c482c85c7b | ||
|
|
dcda263fc8 | ||
|
|
f46352dbe1 | ||
|
|
1d575e3453 |
||
|
|
bd74170fb6 |
||
|
|
1b00dc9ac7 | ||
|
|
e62c0b0b80 | ||
|
|
f6750c3a48 | ||
|
|
3f22e1fe0c |
||
|
|
75dbe85ad6 | ||
|
|
9a41b0ce9f | ||
|
|
5f8a858aa9 | ||
|
|
8c3ee8f1bd | ||
|
|
b313f2cee1 | ||
|
|
bd5c82ef35 | ||
|
|
1022f47f14 | ||
|
|
743882a9b9 | ||
|
|
9db28ec5fd | ||
|
|
38ac5f799b | ||
|
|
1db65a84c3 | ||
|
|
af5abda8b1 | ||
|
|
7d0f7f4652 | ||
|
|
276c653b1d | ||
|
|
d25f923721 | ||
|
|
b102279630 | ||
|
|
1f821667f2 | ||
|
|
7f496c971d | ||
|
|
9a4542347d | ||
|
|
a68391880c | ||
|
|
5ddb27fd3f | ||
|
|
448c78b226 | ||
|
|
ace4f70e3a | ||
|
|
9948cee1f7 | ||
|
|
f870dcc168 | ||
|
|
b2b8f14053 | ||
|
|
f6a5bed582 | ||
|
|
81b40d2afe | ||
|
|
ef3b7d2bc3 | ||
|
|
be1da68dbc | ||
|
|
5dc7bd97f2 | ||
|
|
9adeef2bdf | ||
|
|
e55bf8dffc | ||
|
|
94f245f035 | ||
|
|
88f13369b6 | ||
|
|
b1db2bba12 | ||
|
|
471402556b | ||
|
|
010100456d | ||
|
|
14d6623c13 |
||
|
|
c58709c1a3 | ||
|
|
bd857385d3 | ||
|
|
d98f528734 | ||
|
|
25256f747f | ||
|
|
58b5c105a5 |
||
|
|
4af058bd02 | ||
|
|
ee885fea44 | ||
|
|
b60ef7729e | ||
|
|
e4e24a0f00 | ||
|
|
bccff0f73e | ||
|
|
137bcc5cbb |
||
|
|
4a2dc2875f |
||
|
|
3a3458cff0 |
||
|
|
e810d6a4b0 | ||
|
|
6d15f08db4 |
||
|
|
2cb0dac648 | ||
|
|
e46abdc793 | ||
|
|
1fa68949e6 | ||
|
|
1e67e943df | ||
|
|
e4ec06a9c8 | ||
|
|
bbb3a0389a |
||
|
|
b9e072905a |
||
|
|
5bc94ce400 |
||
|
|
959ce42f26 |
||
|
|
ee9e3973bd |
||
|
|
46dd5ef959 | ||
|
|
0be2efc275 | ||
|
|
8abcd81f30 |
||
|
|
7bd3a1a15c |
||
|
|
3f2db134c2 | ||
|
|
479e22b7c5 | ||
|
|
302c74e90d | ||
|
|
fe6635c1eb |
||
|
|
635ddf5c36 | ||
|
|
d8671de43b |
||
|
|
da99ea47b0 |
||
|
|
b72782c35d |
||
|
|
53a2620860 |
||
|
|
3b101705d5 |
||
|
|
d0d1691004 | ||
|
|
1bb14e16a5 | ||
|
|
d30652a6e6 | ||
|
|
1a0096c169 | ||
|
|
a5eed9a486 | ||
|
|
d1be724f41 | ||
|
|
e4d6e54c63 |
||
|
|
38a4299883 |
||
|
|
15b9118077 |
||
|
|
d95b77ad04 |
||
|
|
742b802cf7 |
||
|
|
bd59b8c724 |
||
|
|
abd27b285e |
||
|
|
fd9c37aa44 |
||
|
|
c8e3ba2d4b |
||
|
|
e07e924519 |
||
|
|
91e9d6abe9 |
||
|
|
866fb36b67 |
||
|
|
b733b1d3c4 |
||
|
|
dc662b561a |
||
|
|
91c9c3f147 |
||
|
|
35cc7fd569 |
||
|
|
5fb1a14c36 |
||
|
|
5e529aed01 |
||
|
|
03c0d4ce6f |
||
|
|
163beb5d58 |
||
|
|
f316b19c2b | ||
|
|
10791fabbd | ||
|
|
0a6a420503 | ||
|
|
a5fdc3a6de | ||
|
|
42c6c2b524 | ||
|
|
39cdd1d1e4 | ||
|
|
fd420bff32 | ||
|
|
d7dec9eda7 | ||
|
|
833d8ec7dc | ||
|
|
d9af6dec32 |
||
|
|
96fa0d25f0 |
||
|
|
f87dce15ea |
||
|
|
d130544b1b | ||
|
|
229dfa8f6f |
||
|
|
2a424f6be5 | ||
|
|
c468af839c | ||
|
|
7c56c4ce00 | ||
|
|
5b6fd04b09 | ||
|
|
69b11109ac | ||
|
|
e64cbd3e66 | ||
|
|
fc0eb760cd | ||
|
|
3aa3e09317 |
||
|
|
73da97053e | ||
|
|
835fcbecc8 |
||
|
|
6423abe630 |
||
|
|
e1a296c68e | ||
|
|
01a51f74e4 |
||
|
|
183abde394 | ||
|
|
9988b7eca8 |
||
|
|
e4f0b64630 | ||
|
|
3b045ada7b |
||
|
|
2dcd35f181 | ||
|
|
9ee2ca51d4 |
||
|
|
151bc6d36b | ||
|
|
cdbe38a30e |
||
|
|
c96b7c693c | ||
|
|
dee22c18ee |
||
|
|
30f0ec4e9c | ||
|
|
0a0592a52e | ||
|
|
da9a9603b9 | ||
|
|
28d22f7bfa | ||
|
|
b2c43c034f |
||
|
|
ad749721e9 | ||
|
|
a807c269cc | ||
|
|
698f9cac39 | ||
|
|
db9e520f08 | ||
|
|
3bdb3ddba3 | ||
|
|
368678ca6b | ||
|
|
5da789c24f | ||
|
|
6c34e74f0a | ||
|
|
207b162544 | ||
|
|
e216b3e513 | ||
|
|
db2cab7b7c | ||
|
|
e86cf68b17 | ||
|
|
5ad3d73001 | ||
|
|
47e5b109c0 | ||
|
|
60ae0c1598 | ||
|
|
acad85e603 | ||
|
|
a4c4ab6c8f | ||
|
|
10ae1f6029 | ||
|
|
ed8cdfa0f6 | ||
|
|
60c1a866f3 | ||
|
|
050e4ef1a8 | ||
|
|
fa498f1c5e | ||
|
|
f769fb3953 | ||
|
|
8dd1b61f1e | ||
|
|
7bbc27594b | ||
|
|
5cf89f362f | ||
|
|
135defc405 | ||
|
|
d74ed5ab54 | ||
|
|
ea98bd2e19 | ||
|
|
af635f02c6 | ||
|
|
5b2c8eba80 | ||
|
|
c774e198ee | ||
|
|
11866ee52f |
||
|
|
b74b9efa8e |
||
|
|
5436ebee71 | ||
|
|
746b38abe5 | ||
|
|
db6295594f | ||
|
|
c0f92d69a0 | ||
|
|
b59f003f61 | ||
|
|
253f67243a | ||
|
|
67adc452cb | ||
|
|
8bbe3816b7 |
||
|
|
e8ad42aa3f | ||
|
|
026ee7fb78 | ||
|
|
5dbd49606b | ||
|
|
55a0c7e605 | ||
|
|
51223f66cd | ||
|
|
ea7660d4b1 | ||
|
|
87ceed05fa | ||
|
|
0dfc2b2a53 | ||
|
|
cdb4045542 | ||
|
|
14fb7ed4f7 | ||
|
|
7b2c04dcb2 | ||
|
|
2c521e63cb | ||
|
|
52f1b595e8 | ||
|
|
95b4bfc253 | ||
|
|
8da998191a | ||
|
|
be716fc0ee | ||
|
|
1dff481199 | ||
|
|
3dbf0589ce | ||
|
|
1e3511c0d3 | ||
|
|
983c25f69f | ||
|
|
c904433ff3 | ||
|
|
bf4222c9cc | ||
|
|
978a982ab7 | ||
|
|
cc760a173a | ||
|
|
9eab58f0d2 | ||
|
|
c1230d4b86 | ||
|
|
f8647ff73c | ||
|
|
27e512d5f1 | ||
|
|
ab9c460088 | ||
|
|
6d44068ede | ||
|
|
a5e2e42a55 |
||
|
|
47a0977ac6 | ||
|
|
9f39577228 | ||
|
|
7757eae745 | ||
|
|
c7d54e2fa9 | ||
|
|
01fa3071f1 | ||
|
|
91f1704f68 | ||
|
|
87f15ced04 | ||
|
|
cc524d78e4 | ||
|
|
f694ad223e | ||
|
|
274511c5cb | ||
|
|
32839bd0d1 | ||
|
|
82ed0e6842 | ||
|
|
d5a8f1e323 | ||
|
|
29c0d15045 |
||
|
|
e7c134de4e |
||
|
|
5059adc561 |
||
|
|
0dc7b3c549 |
||
|
|
1bafc6f22f |
||
|
|
244f32268b |
||
|
|
e75c10d567 |
||
|
|
a49bfcc956 |
||
|
|
69917c2f50 |
||
|
|
8f815e9974 | ||
|
|
fe38cd91c5 | ||
|
|
d314410d01 | ||
|
|
2a6597eece | ||
|
|
23412656de | ||
|
|
ae2936927d | ||
|
|
6edb2b0189 | ||
|
|
63f47bc9ed | ||
|
|
726084fa98 | ||
|
|
2c85b109ac |
||
|
|
2d6db0f27f |
||
|
|
37673eb24d |
||
|
|
d4096868e3 |
||
|
|
d427e9d750 |
||
|
|
2db902ef82 |
||
|
|
36a1b71f93 |
||
|
|
0ecfcee3bf |
||
|
|
b21bb16c08 |
||
|
|
4caf6d6e50 |
||
|
|
ee24099be8 |
||
|
|
6bbac4ad2a | ||
|
|
b4c4cd8ae8 |
||
|
|
c1251e9441 |
||
|
|
3eb3af8c8c |
||
|
|
9ce782be68 | ||
|
|
9bf63b1581 |
||
|
|
c51688499c | ||
|
|
e3ed07997e | ||
|
|
c911e792dc | ||
|
|
95891b8ee1 | ||
|
|
20720ebdad | ||
|
|
cda9184d83 | ||
|
|
5ffdc204f6 | ||
|
|
0f566c5bc8 |
||
|
|
5bd131c929 |
||
|
|
0c771e37f9 |
||
|
|
e31296fe5d |
||
|
|
282b420faf |
||
|
|
b3e81f5cbb |
||
|
|
939e2daff0 |
||
|
|
db61f9f263 |
||
|
|
b4dff607e7 |
||
|
|
46bb4e8414 |
||
|
|
631c8a1cc8 |
||
|
|
31487b5a0c |
||
|
|
3f825823d5 |
||
|
|
16ce1d3448 |
||
|
|
547e30f025 |
||
|
|
b7ab650f36 |
||
|
|
5ccc810999 |
||
|
|
8ba623f5fe |
||
|
|
be8159d410 |
||
|
|
f01b4b9a21 |
||
|
|
e668c81806 |
||
|
|
7387e62a95 |
||
|
|
0e02b07ba3 |
||
|
|
f6ebd6b3de |
||
|
|
51e3a6168c |
||
|
|
33ac88dc2a |
||
|
|
4c59709653 |
||
|
|
9aca915f5c |
||
|
|
9a54f5832d |
||
|
|
7e989b973a |
||
|
|
3f78a3a8ce |
||
|
|
c186917c34 |
||
|
|
8b64705dd6 |
||
|
|
10002d892d |
||
|
|
aa97009c35 |
||
|
|
760b58726a |
||
|
|
9569d487a2 |
||
|
|
20e050b602 |
||
|
|
c6f9ebe22d |
||
|
|
e0c5de6e10 |
||
|
|
a5c32a1504 |
||
|
|
1f9f8dae66 |
||
|
|
88f262b9c2 |
||
|
|
77b8b89130 |
||
|
|
0e239c9771 |
||
|
|
b6b8c18ef5 |
||
|
|
98c4089d15 |
||
|
|
91a99299b1 |
||
|
|
d3d11593bc |
||
|
|
78bde14388 |
||
|
|
60d13880d8 |
||
|
|
59a8ecc5b2 |
||
|
|
773dca77d4 |
||
|
|
7cee957161 |
||
|
|
99b0adfe96 |
||
|
|
97cc4a4b2c |
||
|
|
e794f5d6d8 |
||
|
|
8b53aa39ff |
||
|
|
86f5049d29 |
||
|
|
11cdbd8b83 |
||
|
|
0d4cb4698f |
||
|
|
acd9241819 |
||
|
|
1276ef178b |
||
|
|
27480bc6cb |
||
|
|
6bc6de6d37 |
||
|
|
a90764891f |
||
|
|
65f95b0380 |
||
|
|
8e98d6dd19 |
||
|
|
2ff4e6a080 |
||
|
|
dc598ecf24 |
||
|
|
f61316c18d |
||
|
|
454d170dfb |
||
|
|
01899adef9 |
||
|
|
95a5b926fd |
||
|
|
bcc3ac296d |
||
|
|
37f9f19d6f |
||
|
|
19f60798b3 |
||
|
|
4dd920df0d |
||
|
|
7aa6abfefe |
||
|
|
e75f9c9c7f |
||
|
|
7aa7534852 |
||
|
|
629374698d |
||
|
|
957f759197 |
||
|
|
6e84337898 |
||
|
|
a0b2ab7c0a |
||
|
|
beacf06c7d |
||
|
|
a0ff53b629 |
||
|
|
d03f4ce54a |
||
|
|
8599d7befa |
||
|
|
6be3295205 |
||
|
|
dcb7a7fdfc |
||
|
|
3600f5030a |
||
|
|
8d62a60d60 |
||
|
|
fef7b0827b |
||
|
|
db06fcd087 |
||
|
|
3d4f61419a |
||
|
|
b6c8d9a90a |
||
|
|
2e4fce7c67 |
||
|
|
296b9debd3 |
||
|
|
2a6e3da30a |
||
|
|
5445aebe94 |
||
|
|
e0d788bea9 |
||
|
|
65e7437eed |
||
|
|
797481410c |
||
|
|
424e94542c |
||
|
|
1707cafbbc |
||
|
|
7cbde83f38 |
||
|
|
459b5e1036 |
||
|
|
db00ae8eda |
||
|
|
830f70258e |
||
|
|
7b4befb0b1 | ||
|
|
0466bc6936 | ||
|
|
f2040797d7 |
||
|
|
b37cdf5ba9 |
||
|
|
8444ccf6f2 |
||
|
|
1c34c252cc |
||
|
|
0ebb21f0fb |
||
|
|
9173537ce5 |
||
|
|
43659cc5b3 |
||
|
|
d27e75c57f |
||
|
|
abcc37f9a1 |
||
|
|
76e7654242 |
||
|
|
c54fbdb075 |
||
|
|
eccfd345b5 |
||
|
|
d6866f6317 |
||
|
|
a98bf32b24 |
||
|
|
5f1b1efc66 | ||
|
|
4f9010b024 |
||
|
|
d59ad46a9e |
||
|
|
2417251f02 |
||
|
|
99d538ea97 |
||
|
|
3b7c870a53 |
||
|
|
331097f269 |
||
|
|
0b1ef79a8e |
||
|
|
0f0f9a0262 |
||
|
|
3e00b390c1 |
||
|
|
b4a61e11fa |
||
|
|
35a680632e |
||
|
|
d18b7bc4b8 |
||
|
|
1806aa0d7c |
||
|
|
8b105fc9c3 |
||
|
|
f078ee9f9a |
||
|
|
e4cfae2885 |
||
|
|
bd0c366b2f | ||
|
|
f9d80323dd |
||
|
|
308304b75e |
||
|
|
1cb7a33442 |
||
|
|
4325b06ac4 |
||
|
|
4591fb9b95 | ||
|
|
6870e916bb |
||
|
|
b27aed2497 |
||
|
|
94e8f8b8d7 |
||
|
|
fc6f6bde1d |
||
|
|
f16d1be955 |
||
|
|
77b8132591 |
||
|
|
df091f02ef | ||
|
|
efe0c8d534 |
||
|
|
d5a6d7719c |
||
|
|
5367d056e2 |
||
|
|
860d02d1fe |
||
|
|
9bb5c4f64a |
||
|
|
cfdd612c8d |
||
|
|
40076c6246 |
||
|
|
5670a4d7e7 |
||
|
|
4386f5fcb2 |
||
|
|
2c55110776 |
||
|
|
56494d8d1a |
||
|
|
b30cea0de0 |
||
|
|
6787ce9c40 |
||
|
|
ef8c886b10 |
||
|
|
cc70b98eed | ||
|
|
1c574e79e8 | ||
|
|
5481f3a684 |
||
|
|
7fafee8a6c | ||
|
|
5cde12b42a |
||
|
|
5004aac259 |
||
|
|
2460b570fe |
||
|
|
e316cd0719 |
||
|
|
60c9d1a070 |
||
|
|
46d7f399ff |
||
|
|
88c9017fdc |
||
|
|
46dbbb3b84 |
||
|
|
b756bce67f |
||
|
|
1ed6966cbe |
||
|
|
fbcce0b20c |
||
|
|
96b97b25bf |
||
|
|
cfab21bc81 |
||
|
|
d405bd48f0 |
||
|
|
1cba1416a1 | ||
|
|
cd3b561623 | ||
|
|
170039c1d1 |
||
|
|
38f68f77a0 |
||
|
|
84aa7a879c |
||
|
|
87f51ddbda |
||
|
|
011c9e66fb |
||
|
|
5a61e1007f |
||
|
|
c88f02c5a5 |
||
|
|
212f5c7270 |
||
|
|
7941f00c35 |
||
|
|
ed450c1268 |
||
|
|
76da9e55c9 |
||
|
|
086c7ae32d |
||
|
|
d61bb9c79b |
||
|
|
6c7cd651da | ||
|
|
f94ecaba84 |
||
|
|
f0cec1cf37 |
||
|
|
d7e103de59 |
||
|
|
65b983dcb6 |
||
|
|
d5e289880f |
||
|
|
e51a481219 |
||
|
|
62b795d472 |
||
|
|
8a7057b3b0 |
||
|
|
33a0c9e634 |
||
|
|
5fcebd0274 |
||
|
|
749c433ca6 |
||
|
|
cfe2424f4d |
||
|
|
ed88987308 |
||
|
|
86e43c92b3 |
||
|
|
ae3b92f1ef |
||
|
|
932f1e9161 |
||
|
|
b0ac644e9b |
||
|
|
25cccc32db |
||
|
|
2b5adacbb9 |
||
|
|
ab06920e74 | ||
|
|
c937c3bd8b |
||
|
|
9d488c97e0 |
||
|
|
9d24c039fe | ||
|
|
f738f1e246 | ||
|
|
95c751d4ac | ||
|
|
bf9e17a6c8 |
||
|
|
2baca5d57d | ||
|
|
b0fb67451d | ||
|
|
f454abf45a |
||
|
|
0dd73e249d |
||
|
|
54140e9adb |
||
|
|
45195d5bd6 |
||
|
|
2a056a7855 |
||
|
|
940d0f1906 |
||
|
|
1d2e1b15ea |
||
|
|
e424a85a99 |
||
|
|
939d22d670 |
||
|
|
90b7ea944d |
||
|
|
04a33e2206 |
||
|
|
95956f6362 |
||
|
|
e5d82915dd |
||
|
|
e3f673d9db |
||
|
|
4fd21432c5 |
||
|
|
9c4b412aea |
||
|
|
71b2edc0fe |
||
|
|
7661cd189f |
||
|
|
0833a6d6d3 |
||
|
|
7d851d8434 |
||
|
|
2c29e1ca76 |
||
|
|
5a57ee99ac | ||
|
|
735b6b6c87 | ||
|
|
7ea0601fc6 | ||
|
|
99537f2816 | ||
|
|
b384bb885b |
||
|
|
2255af1c45 |
||
|
|
f55b781d86 |
||
|
|
38d9a9551f |
||
|
|
c38cee0a4a |
||
|
|
0f9c7b1bbf |
||
|
|
32ddbd8e05 |
||
|
|
67c493f1a8 |
||
|
|
69c513e33d |
||
|
|
82b910dd6d |
||
|
|
5d0a58cc6a |
||
|
|
368ca13314 |
||
|
|
2cee1edcb5 |
||
|
|
1b288a0a1a | ||
|
|
81aba310d0 |
||
|
|
b050a07362 |
||
|
|
021efab84d |
||
|
|
0a42a050bd |
||
|
|
9ca1b30da1 |
||
|
|
220d5535f7 |
||
|
|
0895e6a508 |
||
|
|
ed5532a535 |
||
|
|
6f41dbf954 |
||
|
|
c7ed7e72d4 |
||
|
|
a7208f5262 |
||
|
|
09f6680aa9 | ||
|
|
9261130fed | ||
|
|
fec22e0052 | ||
|
|
7c921d6a81 |
||
|
|
16a029754f | ||
|
|
3c9fd67fd0 | ||
|
|
724ca386e7 | ||
|
|
6f75b00463 | ||
|
|
105d9f0d3a | ||
|
|
38f6b1297d | ||
|
|
cf130a6e25 |
||
|
|
e91c30fad0 | ||
|
|
3e3f7b9273 | ||
|
|
88ff84f5a5 |
||
|
|
eee373f15a |
||
|
|
c839c053cb |
||
|
|
238b9ede78 | ||
|
|
c7bd39abc7 | ||
|
|
85b1f909a7 | ||
|
|
675f502802 |
||
|
|
db5553ec75 |
||
|
|
413191411f |
||
|
|
45b2681dfc |
||
|
|
f0986a6441 | ||
|
|
e6645136f9 | ||
|
|
189820135a | ||
|
|
f19cc528d4 | ||
|
|
2b9891da2c |
||
|
|
a5c843f5c6 | ||
|
|
aa8e74539c | ||
|
|
d1968489b7 | ||
|
|
33946a7aac | ||
|
|
ddf74d3793 | ||
|
|
1b3b8178ec | ||
|
|
bf3bdadd90 | ||
|
|
aba82cc527 | ||
|
|
e92994d2e7 |
||
|
|
26d9b3a832 | ||
|
|
bfabaa50bc | ||
|
|
7fcd172387 | ||
|
|
c5bb4c7405 | ||
|
|
98aff7778e | ||
|
|
4ab6352504 | ||
|
|
b325381ca0 | ||
|
|
bc0a9b2e52 | ||
|
|
75c0236a04 |
||
|
|
ec2ce3fcfb |
||
|
|
e9a9420e5c | ||
|
|
209e097ba6 | ||
|
|
8d234cc842 | ||
|
|
e6805707d8 | ||
|
|
acd6f7af5b | ||
|
|
f38532bcf5 |
||
|
|
4b2189ba51 | ||
|
|
fb46cce963 | ||
|
|
eedd5eb7d2 | ||
|
|
716f4af808 | ||
|
|
c21784037d | ||
|
|
0fde6c9922 | ||
|
|
6d90c1678c | ||
|
|
a7fb568aff | ||
|
|
065ca5f6d3 | ||
|
|
ab9eec12eb | ||
|
|
430736a4f2 | ||
|
|
161444107a | ||
|
|
12e2e2101a | ||
|
|
e39097a17e | ||
|
|
be7c723c47 | ||
|
|
a60b198b03 | ||
|
|
e06df85f02 | ||
|
|
288a4757f8 | ||
|
|
29363fc07f | ||
|
|
02a1b540ce | ||
|
|
a048233f4c | ||
|
|
758c4c2c8d | ||
|
|
adae39efee | ||
|
|
84e1bb4d9b | ||
|
|
6b0daf3da9 | ||
|
|
b6c5d90c9d | ||
|
|
a34ccbff33 | ||
|
|
4cd4b46772 | ||
|
|
3d93c83920 | ||
|
|
809863d61a | ||
|
|
4c7b643295 | ||
|
|
05b16f1d63 | ||
|
|
bfa53dfd6c | ||
|
|
4467a1ffa2 | ||
|
|
bfe9a9d015 | ||
|
|
7e687750b2 |
||
|
|
0c3025d695 |
||
|
|
a9c22f0588 |
||
|
|
b8537d1c96 |
||
|
|
12d12a33de | ||
|
|
1956f95f9f | ||
|
|
723dd976b4 | ||
|
|
65251cdafa | ||
|
|
471d626043 |
||
|
|
0b82968c0f |
||
|
|
0584a3929d |
||
|
|
09815e6035 |
||
|
|
9a01650622 |
||
|
|
fb5afbd394 |
||
|
|
fc105cee2b |
||
|
|
1ec3b4ecab |
||
|
|
6e2bbe31ac |
||
|
|
5670c1e655 |
||
|
|
7f5d836916 |
||
|
|
cbaf859103 |
||
|
|
5115b294ee |
||
|
|
c01bc4dbd7 |
||
|
|
7674f8eb2b | ||
|
|
773bdf8ea2 |
||
|
|
b249f0d0ce |
||
|
|
6522657893 |
||
|
|
c82facd6ff |
||
|
|
bcb390f611 |
||
|
|
a805d6c2b1 |
||
|
|
3d08f92705 |
||
|
|
2436229145 |
||
|
|
e5c14d24ae |
||
|
|
23c1a7d1d8 |
||
|
|
44bbce125b |
||
|
|
dff47263d5 | ||
|
|
861ddea1b2 |
||
|
|
ab22ea1f27 |
||
|
|
a6757c352f |
||
|
|
2d97776caa |
||
|
|
3cd26a2220 |
||
|
|
f759162fd1 |
||
|
|
6c3bd124ce |
||
|
|
68b12d4fff |
||
|
|
1195464acb | ||
|
|
68e779d64e |
||
|
|
df0419a7d6 |
||
|
|
3dff6c6875 |
||
|
|
07421ead41 |
||
|
|
b6dc199993 |
||
|
|
6d8a004f4a |
||
|
|
1dae9f613f |
||
|
|
34f7f24e7e |
||
|
|
40bd6125f5 |
||
|
|
012eeab3aa | ||
|
|
2f3eb70a4d | ||
|
|
b37d0f1cf4 | ||
|
|
6262a4fac7 |
||
|
|
c531c714d4 |
||
|
|
d423c1c366 |
||
|
|
5b51e0fad3 |
||
|
|
4151deb9f6 |
||
|
|
d8f9ea7a33 |
||
|
|
46127c8d4d |
||
|
|
8a12a32d31 |
||
|
|
9f567fe2bc |
||
|
|
7f8c1c8a68 |
||
|
|
4a910a7197 |
||
|
|
4c3cbc3535 |
||
|
|
0974a3ad18 |
||
|
|
b08126d745 |
||
|
|
d1255d3a9d |
||
|
|
cf7537df01 |
||
|
|
3e419de86b |
||
|
|
2bb25b12ff |
||
|
|
cdf4bdd2ba |
||
|
|
e0b8da86ed |
||
|
|
472288b2e3 |
||
|
|
51afac4f22 |
||
|
|
daed4141f5 |
||
|
|
157c5e91fc |
||
|
|
e51e184cca |
||
|
|
2b3c96ab3d |
||
|
|
371e57588f |
||
|
|
182f43004a |
||
|
|
23c2660fb0 |
||
|
|
ea409a2cb2 |
||
|
|
984db8620a |
||
|
|
995d9fdc9b |
||
|
|
4b04c10f14 |
||
|
|
43c4966873 |
||
|
|
85fc3a3af6 |
||
|
|
85d68cec55 |
||
|
|
89b5f0af20 |
||
|
|
659f3fa8e2 |
||
|
|
8242834fbd |
||
|
|
814e1ec059 |
||
|
|
12efb8b981 |
||
|
|
b9558cc3cb |
||
|
|
022baad9e5 |
||
|
|
9629b1414e | ||
|
|
ea44cf850c | ||
|
|
61c8c9eac0 | ||
|
|
c89f59dc7c |
||
|
|
1fed110afd |
||
|
|
4ea6a2d120 |
||
|
|
f84bb6a287 | ||
|
|
869a6f761a | ||
|
|
2d3029482d | ||
|
|
250e9f91ba | ||
|
|
df49f49c60 |
||
|
|
3e0ff5edbd | ||
|
|
1142e81348 | ||
|
|
ae38d1e020 |
||
|
|
eefeadc018 | ||
|
|
4593b52863 |
||
|
|
7333ca6c61 |
||
|
|
5b5a4ba4cc |
||
|
|
9af14015e4 | ||
|
|
ef80562a0f | ||
|
|
0b48c3456b |
||
|
|
1f16655769 |
||
|
|
b8d780ba4a |
||
|
|
965460edb7 | ||
|
|
53ea6511fc | ||
|
|
eae73dfa18 |
||
|
|
27c4c5e6f6 | ||
|
|
6f197f67f1 | ||
|
|
412c3a5ed1 |
||
|
|
385b1dbfd4 | ||
|
|
0a4c596ecb | ||
|
|
d2e0e0ed81 | ||
|
|
f787cf4bc2 | ||
|
|
ca21a3b79d | ||
|
|
a773da2651 | ||
|
|
1a90b45f18 | ||
|
|
9f6cd35155 | ||
|
|
f122db2e7b | ||
|
|
d65f1b1647 | ||
|
|
0fc535f2f1 | ||
|
|
e420900e55 | ||
|
|
0cd64d1fbc | ||
|
|
46a0030387 | ||
|
|
495da9b292 | ||
|
|
efb300c9f0 | ||
|
|
7f1706fc74 | ||
|
|
8dbbdc4bf2 | ||
|
|
7c15f9098c |
||
|
|
36a3e90b1d |
||
|
|
3882201434 |
||
|
|
857bf40072 |
||
|
|
075eb1fa3f |
||
|
|
dbb7c6e7d0 |
||
|
|
947d429688 |
||
|
|
f49d42678b |
||
|
|
f28c9515ad |
||
|
|
c6ecbd56e5 | ||
|
|
144567410d | ||
|
|
1b850662ed | ||
|
|
c7c4cacc29 | ||
|
|
7e63355353 | ||
|
|
01652c7940 | ||
|
|
b379e3b0eb | ||
|
|
a2fde7f2c3 | ||
|
|
2beb452207 | ||
|
|
73384a562b | ||
|
|
985c5bf8e2 | ||
|
|
daec8a9a64 |
||
|
|
f88a7a6f99 |
||
|
|
dc16d145c2 |
||
|
|
8432ddc2a8 |
||
|
|
d072393149 |
||
|
|
a8e95bf7f1 |
||
|
|
1735bdc9a2 |
||
|
|
f00685d592 |
||
|
|
ee194f3e46 |
||
|
|
82a9c5b1dd |
||
|
|
fdd8875986 |
||
|
|
3b50e0cbc5 |
||
|
|
fb7fda2256 |
||
|
|
d9beb6126e |
||
|
|
a81581129a | ||
|
|
e95a91861a | ||
|
|
fa5948f40e | ||
|
|
ad4c8aacfb | ||
|
|
afbc09f1e7 | ||
|
|
1a1e5b743a | ||
|
|
24853a7e3b |
||
|
|
1ce83913bd |
||
|
|
1650e26da7 |
||
|
|
bc01fd8ea3 | ||
|
|
3422c40e19 |
||
|
|
e661052c89 |
||
|
|
ff08a5ca2b |
||
|
|
f8250fb0d8 |
||
|
|
d1c3f8af7a | ||
|
|
36b4b3695b |
||
|
|
fb17ec8064 |
||
|
|
51f52656cc |
||
|
|
18746c7819 |
||
|
|
8463c01123 |
||
|
|
8e0671306a |
||
|
|
131a6da554 |
||
|
|
59273fcdab |
||
|
|
7795a2a46f |
||
|
|
2269f64b0a |
||
|
|
439da97573 |
||
|
|
2b478a4608 |
||
|
|
3b95725f09 |
||
|
|
3a23ad1382 |
||
|
|
61a7f1fba5 |
||
|
|
a8641672cd |
||
|
|
320fc20461 |
||
|
|
69f05c39ec |
||
|
|
e55ffedc35 |
||
|
|
0577fefd75 |
||
|
|
02713670c9 |
||
|
|
e6de878395 |
||
|
|
4c75b288bb |
||
|
|
263e1b527a | ||
|
|
3d88bf8795 |
||
|
|
740b2b0979 |
||
|
|
2b843fc12e |
||
|
|
473cf1cae3 |
||
|
|
65d4266400 |
||
|
|
8d5b86fff7 |
||
|
|
92843c8237 |
||
|
|
13b588b555 |
||
|
|
839a9ff498 |
||
|
|
ef8c16d773 |
||
|
|
602fafafea |
||
|
|
83ed7fd2df |
||
|
|
f07e4093be |
||
|
|
bf13afd895 |
||
|
|
9ffc06d42e |
||
|
|
ebe91ba11d | ||
|
|
48aef46f57 | ||
|
|
c77c823c3c | ||
|
|
ccccea1e50 | ||
|
|
a6163849c6 | ||
|
|
130aab3598 | ||
|
|
78b85ce0cc | ||
|
|
dbcf65b2d6 | ||
|
|
d8e27aa5f9 |
||
|
|
ce6d587771 |
||
|
|
81d7bc2d68 |
||
|
|
a49350f300 |
||
|
|
9ac6359e56 |
||
|
|
5958d9c646 |
||
|
|
9b88c8afda |
||
|
|
1b71fef89f |
||
|
|
8ddd29d285 |
||
|
|
dc8cbcf410 |
||
|
|
757a4383e6 | ||
|
|
7c98ee329a | ||
|
|
9d615463f4 |
||
|
|
aea0db5919 |
||
|
|
fc593d90cf |
||
|
|
2524f7b5a0 |
||
|
|
5a0cb1baef |
||
|
|
255690eee0 | ||
|
|
86b6e10620 |
||
|
|
b757292211 | ||
|
|
af54419a0b | ||
|
|
7b84b1c79c | ||
|
|
d047c22526 | ||
|
|
6feab70a72 | ||
|
|
5e1b5ca4e8 | ||
|
|
1726cdb0ad | ||
|
|
2b2828ea41 | ||
|
|
29859ceedf | ||
|
|
8e2527ad35 | ||
|
|
92b26488da | ||
|
|
efa67cb01c | ||
|
|
71fc222059 | ||
|
|
fa6adad4ab | ||
|
|
1c48d567e1 | ||
|
|
2c3216ba36 | ||
|
|
74e2a7e225 | ||
|
|
ff2c92451d | ||
|
|
2a83402d4a | ||
|
|
2449b473c0 | ||
|
|
60c44c44ff | ||
|
|
7e1d685167 | ||
|
|
a9d4a393ba | ||
|
|
a0953fea93 | ||
|
|
02d76835c9 | ||
|
|
dfe03f1347 | ||
|
|
c87489adf3 | ||
|
|
a428a730d5 | ||
|
|
7f7c642339 | ||
|
|
03b79e9a67 | ||
|
|
56b0fcebba | ||
|
|
d9a5130311 |
||
|
|
4663a45e59 |
||
|
|
fb820bcdad |
||
|
|
31c167b412 |
||
|
|
7cdab16ba9 |
||
|
|
05262134ca | ||
|
|
fe48b9d03d |
||
|
|
013ec1d726 |
||
|
|
27b4a984d5 | ||
|
|
d6b6111395 | ||
|
|
af8ee6703e | ||
|
|
793191a479 |
||
|
|
efc86c1056 |
||
|
|
39d44d2644 |
||
|
|
9584a2ce5a |
||
|
|
95b8ceb87a |
||
|
|
37b99b9cb8 |
||
|
|
86354e9fc0 | ||
|
|
b49f135e31 |
||
|
|
fff266f50d | ||
|
|
7cfea7c22c | ||
|
|
6141e5a8ce | ||
|
|
ed58949d24 |
||
|
|
c1d85bd3d9 |
||
|
|
8d3324465e |
||
|
|
8c72746edb |
||
|
|
ea3509d2e7 |
||
|
|
bb3a0cc54f |
||
|
|
d808654d99 | ||
|
|
a6cfdbb403 | ||
|
|
2f7c6834d0 | ||
|
|
ebdd57a7c4 | ||
|
|
4ff6d74054 |
||
|
|
0d8b4aafd5 |
||
|
|
0cca7e9189 |
||
|
|
a5812578c5 |
||
|
|
350b411afe |
||
|
|
9ca86c6093 |
||
|
|
01729ae22a |
||
|
|
9196dc2216 |
||
|
|
b925335bbb |
||
|
|
965f939967 |
||
|
|
00feccbb77 |
||
|
|
b6fc66ba0d |
||
|
|
c40debc0e9 |
||
|
|
3b31d70865 |
||
|
|
afa8b62de7 |
||
|
|
70fd15de2d |
||
|
|
c54d330f89 |
||
|
|
4028560d12 |
||
|
|
3c28c28623 |
||
|
|
a958fa06e7 |
||
|
|
4d39e9e15a |
||
|
|
679ec49e64 |
||
|
|
d98e1d3693 | ||
|
|
be3b7d754e |
||
|
|
ae524c4f84 |
||
|
|
d390cac8db |
||
|
|
17e20ab029 |
||
|
|
34b9b9b508 |
||
|
|
47fd06a445 |
||
|
|
b140ce546f | ||
|
|
08ec2beb7c |
||
|
|
5833f0f109 |
||
|
|
eb2ad258ed |
||
|
|
708aef53e4 |
||
|
|
e893c1c205 |
||
|
|
3e74255127 |
||
|
|
b8d7eed607 |
||
|
|
8eb62fb483 |
||
|
|
ee67bff9e3 |
||
|
|
21e47dcccf |
||
|
|
38ddcf59f8 |
||
|
|
4a62b6a5c7 | ||
|
|
6afbcb69f3 |
||
|
|
4bb522d303 |
||
|
|
f107173a73 |
||
|
|
eb5aff755f |
||
|
|
2384ae0819 |
||
|
|
4a5663c1cb |
||
|
|
9416e01042 | ||
|
|
54fcacfed1 | ||
|
|
69ac5caa4b |
||
|
|
cecbc156d5 |
||
|
|
8ca550cc9e |
||
|
|
d44c8eba1c |
||
|
|
6edd667bdf |
||
|
|
499ff50903 |
||
|
|
5e1f29eda3 |
||
|
|
e5571defb7 |
||
|
|
125d8a6f78 |
||
|
|
21790dc3ee |
||
|
|
cdf48e0589 |
||
|
|
2f9f63771b | ||
|
|
93335b3843 |
||
|
|
f50c8f447e | ||
|
|
bd9f7deb98 | ||
|
|
2171192934 | ||
|
|
3352ebef6e |
||
|
|
2a51ddadfc |
||
|
|
0745aea4d6 |
||
|
|
4804b34208 |
||
|
|
841289f1d1 |
||
|
|
c367ef461e |
||
|
|
ffed41553a | ||
|
|
79deb37675 |
||
|
|
77ca8fe9e6 |
||
|
|
25e58edf28 | ||
|
|
0f2d19c56e | ||
|
|
8bde3d7522 | ||
|
|
c169d26d95 | ||
|
|
946a4c56a0 | ||
|
|
23e87e0ad7 |
||
|
|
7d678154c6 |
||
|
|
0b9fec3f87 |
||
|
|
763c7708f4 |
||
|
|
5f2c1f4534 |
||
|
|
3ac557ccb1 |
||
|
|
e6c691a376 |
||
|
|
ee8eb001c2 |
||
|
|
db836b7a48 |
||
|
|
543b18dd54 |
||
|
|
ec0731d5d8 |
||
|
|
cc5c7d1d29 |
||
|
|
e79c1b7ea3 | ||
|
|
6cbead5bfe |
||
|
|
429bb2bf17 |
||
|
|
c03c41cb21 |
||
|
|
ee29faecbf |
||
|
|
d1d0105276 |
||
|
|
1059e36b52 |
||
|
|
15f602f867 |
||
|
|
13be4a333f |
||
|
|
2553fa1f74 |
||
|
|
f0f5011484 |
||
|
|
5671f3527b |
||
|
|
adb26fa99f |
||
|
|
805429a7c6 |
||
|
|
39af86e59d |
||
|
|
ecf970d6fe | ||
|
|
c9ce17a4d5 |
||
|
|
a6e279f0d3 | ||
|
|
842bc3733e | ||
|
|
5e76a5e76a | ||
|
|
52c3c49f25 |
||
|
|
705239ad7d |
||
|
|
dc865404a9 |
||
|
|
ba7ab2e607 |
||
|
|
d6cfe4414d |
||
|
|
ecbb135949 |
||
|
|
fcb98e6523 |
||
|
|
e7e5597c95 | ||
|
|
7f0479d8b4 | ||
|
|
f5c78f365d |
||
|
|
1fc5f9b12d |
||
|
|
3f55ce6dfc |
||
|
|
1d562d3c27 |
||
|
|
f3974deb88 |
||
|
|
1945616328 |
||
|
|
7db6604227 |
||
|
|
12ce6c5ac3 |
||
|
|
5d9bc4ca81 | ||
|
|
c0b4a3ff35 |
||
|
|
f0bf8cd827 |
||
|
|
10144adf61 |
||
|
|
3efab5ba23 |
||
|
|
3d323ab9d2 | ||
|
|
16ce9e562f | ||
|
|
90e66a7ad4 |
||
|
|
6b59216b32 |
||
|
|
9764ba6334 |
||
|
|
da5929ff34 |
||
|
|
e419822c77 |
||
|
|
b62ce4440e |
||
|
|
3c81fb06e8 |
||
|
|
c27366a270 |
||
|
|
5b6f6c1bff |
||
|
|
3fcac435b2 |
||
|
|
03a3edcdc9 |
||
|
|
5737b3cc7b | ||
|
|
b898b79aaf |
||
|
|
3827ca2d78 |
||
|
|
4de5e1b9f1 |
||
|
|
eb18f02fd2 | ||
|
|
1a7d105917 | ||
|
|
de5cff799e | ||
|
|
67cada78f6 | ||
|
|
5a40f25d03 | ||
|
|
1a09a8a4c8 | ||
|
|
daa0cf83d9 | ||
|
|
e92858f64d | ||
|
|
d52c26e82f | ||
|
|
83900b03d4 | ||
|
|
c123430f22 | ||
|
|
33e20cbc77 | ||
|
|
e942312c4c | ||
|
|
de2e78b507 | ||
|
|
da4a7ac64b | ||
|
|
e44fbc26ba | ||
|
|
bef454f950 | ||
|
|
94e1ec91ad | ||
|
|
56d11ab419 |
||
|
|
c96cccab2e |
||
|
|
989ef1b4a8 |
||
|
|
45cfbe917e |
||
|
|
2e313005e0 |
||
|
|
722c3a653c |
||
|
|
76672facfe |
||
|
|
8f075b5d8d | ||
|
|
b317efaf2c | ||
|
|
29b9c5200f |
||
|
|
4d2b4b4ee7 |
||
|
|
9f8f095a78 |
||
|
|
59c09ebee1 |
||
|
|
5f81a87912 |
||
|
|
7f6151d573 |
||
|
|
9816960995 |
||
|
|
3355d5f0af |
||
|
|
ab38b20444 |
||
|
|
f278229179 | ||
|
|
552390fb84 | ||
|
|
68573cdc48 |
||
|
|
cdf397aaa9 | ||
|
|
ed27558011 |
||
|
|
50387948df | ||
|
|
9b48cc1799 | ||
|
|
86f2ac0e96 | ||
|
|
1537a002cc |
||
|
|
ae9b158b04 |
||
|
|
72ec10b181 | ||
|
|
eed4002a4a | ||
|
|
155e34c7a8 | ||
|
|
22cc649e81 |
||
|
|
367ca745c3 |
||
|
|
01e2e46e0d |
||
|
|
c03078ca16 |
||
|
|
49e62aebe3 |
||
|
|
dc4daaebac |
||
|
|
f855b30c9f | ||
|
|
b614e2b100 | ||
|
|
eafbbab233 | ||
|
|
72a4e9cf6e |
||
|
|
1dbe100a43 |
||
|
|
287d3d066c |
||
|
|
9387d18e88 |
||
|
|
1600bcb1d0 |
||
|
|
2b2defb7c0 |
||
|
|
6d786902eb |
||
|
|
286ce206f0 |
||
|
|
7535f098bd |
||
|
|
b517461fbe |
||
|
|
ffbe67e21f |
||
|
|
833671d30c |
||
|
|
ae691b8e52 |
||
|
|
2b56b7b6b9 |
||
|
|
81a5380f67 |
||
|
|
7c45e3ac13 |
||
|
|
d1932c36ce |
||
|
|
adb7ddf8d2 |
||
|
|
3b0a57ca6d |
||
|
|
4ee75e93c9 |
||
|
|
ff218e5323 |
||
|
|
df0969d1c6 |
||
|
|
23d7ac0e58 |
||
|
|
f9a87944cf |
||
|
|
eff456aa1a |
||
|
|
1ce07cd67c |
||
|
|
fc7952ff3b |
||
|
|
bb28bdf565 |
||
|
|
04d5842124 |
||
|
|
1a12890556 |
||
|
|
d021d885ca |
||
|
|
3433b8ce8f |
||
|
|
6092730acc |
||
|
|
ba4ffe4ecc |
||
|
|
55b3e2d35a |
||
|
|
6b926ec463 |
||
|
|
9b686b5417 |
||
|
|
82ec56bc7d |
||
|
|
798e51d4d3 |
||
|
|
35c41552de |
||
|
|
19be7f61ac | ||
|
|
bbf0e8cdad | ||
|
|
7e2d2a29a1 | ||
|
|
671dc2aa3a | ||
|
|
294a2c701e | ||
|
|
01f03c552d | ||
|
|
dc46154d94 | ||
|
|
87737c23eb | ||
|
|
6e6f099a99 | ||
|
|
4cb3321c39 | ||
|
|
6a2343a1a0 | ||
|
|
f2d6dba2cf | ||
|
|
dd1ef7fae9 | ||
|
|
527cff9ec3 | ||
|
|
ba150eccae | ||
|
|
fa74986f1e | ||
|
|
d1085b5bea | ||
|
|
4d0a14d2eb | ||
|
|
8c3439b733 | ||
|
|
a0534d527a | ||
|
|
a5b52f2795 | ||
|
|
b526ebd679 | ||
|
|
51b9315ae9 | ||
|
|
8edf44dc31 | ||
|
|
9b7626e59e | ||
|
|
6dd092c7a9 | ||
|
|
46a0d467c0 | ||
|
|
e3b164ae93 | ||
|
|
d8f58ab20f | ||
|
|
0de2bccd28 | ||
|
|
2eaf724710 | ||
|
|
58138ac09b | ||
|
|
143f090422 | ||
|
|
f8f466ba7e | ||
|
|
cb28de47f8 | ||
|
|
4ad2475ed6 | ||
|
|
0172078536 | ||
|
|
0bb1fb512a | ||
|
|
b6940d95a2 | ||
|
|
75f0457375 | ||
|
|
ffe31b6265 | ||
|
|
8963610722 | ||
|
|
66bfcf0e36 | ||
|
|
0b3559abfe | ||
|
|
773389ee5e | ||
|
|
4c04991d4d | ||
|
|
d56bb59b72 | ||
|
|
6e92a4f71e | ||
|
|
1f6217c0d8 | ||
|
|
17204bebd0 | ||
|
|
728e2019d8 | ||
|
|
7f3fdd6977 | ||
|
|
e8798f8371 | ||
|
|
402b743553 | ||
|
|
f08ae2fc62 | ||
|
|
178ea9c8c5 | ||
|
|
7c63cee9e8 | ||
|
|
4a60dfc373 | ||
|
|
829a829cb4 | ||
|
|
34896ccb4e | ||
|
|
5df5eb6a04 | ||
|
|
31ba36baf3 | ||
|
|
bf10f71760 | ||
|
|
8aa61fff6d | ||
|
|
f645b530da |
||
|
|
27573d191e | ||
|
|
d6b4fdf979 |
||
|
|
39c834b83f |
||
|
|
f210357bfe |
||
|
|
3094c19cf3 | ||
|
|
225437f1e8 | ||
|
|
a23bb1e350 |
||
|
|
2fbb21a84e | ||
|
|
5c08fcb43e | ||
|
|
cc59655cb1 | ||
|
|
8ff0a2b0ff | ||
|
|
fe549af784 | ||
|
|
a4549c94c1 | ||
|
|
706256d3f0 | ||
|
|
3049773e7f | ||
|
|
9da5df354e | ||
|
|
54ba6d47f4 | ||
|
|
17647e2c2f | ||
|
|
9da5cea88d | ||
|
|
3784746ddb | ||
|
|
281f6335c1 | ||
|
|
5129c0f4e2 | ||
|
|
5078e89a71 | ||
|
|
41aef27631 | ||
|
|
754d0934bf | ||
|
|
be2d616190 | ||
|
|
ba34e47c4b | ||
|
|
a485b188b3 | ||
|
|
718e89ad1e | ||
|
|
9453a60254 | ||
|
|
f87ec9d401 | ||
|
|
cb1859a710 | ||
|
|
1ed95164db | ||
|
|
ac5d0e54f0 | ||
|
|
b1e79411e7 | ||
|
|
a9d834d715 | ||
|
|
68cfd130d3 | ||
|
|
93a4b823c8 | ||
|
|
769662d77a | ||
|
|
7fd627f169 |
||
|
|
b91468b6f2 | ||
|
|
0b9cd4be5d |
||
|
|
4c587ee1b8 |
||
|
|
19e1e8b8a6 |
||
|
|
67e9522c67 |
||
|
|
a829b38a34 |
||
|
|
c8dae94b5b |
||
|
|
87267758ac | ||
|
|
5f72df81fb | ||
|
|
1ed270fe05 |
||
|
|
19a654a2b1 |
||
|
|
f9bbc11711 |
||
|
|
42b1807c36 |
||
|
|
647982de1a |
||
|
|
f5557c612a |
||
|
|
f4749db8b3 | ||
|
|
86a1de6788 | ||
|
|
792c5e2d95 | ||
|
|
6758580be9 |
||
|
|
6f246eed4a | ||
|
|
fc3725d3f4 | ||
|
|
00c6f0dfdb |
||
|
|
cf7b4e2458 |
||
|
|
f682e44367 |
||
|
|
9d1f86c410 |
||
|
|
dac281ac32 |
||
|
|
29a58086a3 |
||
|
|
cb8eb755a7 |
||
|
|
1e8fc29ee4 |
||
|
|
9a05b49e3d |
||
|
|
79f8d92084 |
||
|
|
6e56542586 |
||
|
|
c53443b62b |
||
|
|
1128662c89 |
||
|
|
676787417f |
||
|
|
57422dccf3 |
||
|
|
7f3f51e36b |
||
|
|
ef184ec8bf | ||
|
|
9bfe3094dd |
||
|
|
3547b4d010 |
||
|
|
1222e3aa1b |
||
|
|
cff3ee5079 |
||
|
|
c91aa462aa |
||
|
|
62b3775e2f |
||
|
|
54bf8c1142 |
||
|
|
c4f613e4c5 |
||
|
|
a66d9ab0b1 |
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"files": [
|
||||
"website/src/pages/credits.mdx"
|
||||
"website/src/pages/credits.mdx",
|
||||
"docs/src/assets/contributors.html"
|
||||
],
|
||||
"imageSize": 75,
|
||||
"commit": false,
|
||||
|
|
|
|||
71
.coderabbit.yaml
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
language: en-US
|
||||
tone_instructions: ''
|
||||
early_access: false
|
||||
enable_free_tier: true
|
||||
reviews:
|
||||
profile: chill
|
||||
request_changes_workflow: false
|
||||
high_level_summary: true
|
||||
high_level_summary_placeholder: '@coderabbitai summary'
|
||||
auto_title_placeholder: '@coderabbitai'
|
||||
review_status: true
|
||||
poem: true
|
||||
collapse_walkthrough: false
|
||||
sequence_diagrams: true
|
||||
path_filters: []
|
||||
path_instructions: []
|
||||
abort_on_close: true
|
||||
auto_review:
|
||||
enabled: true
|
||||
auto_incremental_review: true
|
||||
ignore_title_keywords: []
|
||||
labels: []
|
||||
drafts: false
|
||||
base_branches: ['v3-alpha', 'master']
|
||||
tools:
|
||||
shellcheck:
|
||||
enabled: true
|
||||
ruff:
|
||||
enabled: true
|
||||
markdownlint:
|
||||
enabled: true
|
||||
github-checks:
|
||||
enabled: true
|
||||
timeout_ms: 90000
|
||||
languagetool:
|
||||
enabled: true
|
||||
enabled_only: false
|
||||
level: default
|
||||
biome:
|
||||
enabled: true
|
||||
hadolint:
|
||||
enabled: true
|
||||
swiftlint:
|
||||
enabled: true
|
||||
phpstan:
|
||||
enabled: true
|
||||
level: default
|
||||
golangci-lint:
|
||||
enabled: true
|
||||
yamllint:
|
||||
enabled: true
|
||||
gitleaks:
|
||||
enabled: true
|
||||
checkov:
|
||||
enabled: true
|
||||
detekt:
|
||||
enabled: true
|
||||
eslint:
|
||||
enabled: true
|
||||
chat:
|
||||
auto_reply: true
|
||||
knowledge_base:
|
||||
opt_out: false
|
||||
learnings:
|
||||
scope: auto
|
||||
issues:
|
||||
scope: auto
|
||||
jira:
|
||||
project_keys: []
|
||||
linear:
|
||||
team_keys: []
|
||||
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
|
@ -7,6 +7,8 @@ body:
|
|||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
***Please note: No bug reports are currently being accepted for Wails v3***
|
||||
***Please note: No bug reports are currently being accepted for Wails v3***
|
||||
***Please note: No bug reports are currently being accepted for Wails v3***
|
||||
Before submitting this issue, please do the following:
|
||||
- Do a web search for your error. This usually leads to a much better understanding of the issue.
|
||||
|
|
|
|||
44
.github/file-labeler.yml
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# File path specific labels
|
||||
v2-only:
|
||||
- 'v2/**/*'
|
||||
|
||||
v3-alpha:
|
||||
- 'v3/**/*'
|
||||
|
||||
windows:
|
||||
- '**/*_windows.go'
|
||||
- 'v2/internal/frontend/desktop/windows/**/*'
|
||||
|
||||
macos:
|
||||
- '**/*_darwin.go'
|
||||
- 'v2/internal/frontend/desktop/darwin/**/*'
|
||||
|
||||
linux:
|
||||
- '**/*_linux.go'
|
||||
- 'v2/internal/frontend/desktop/linux/**/*'
|
||||
|
||||
cli:
|
||||
- 'v2/cmd/**/*'
|
||||
- 'v3/cmd/**/*'
|
||||
- '**/cli/**/*'
|
||||
- '**/commands/**/*'
|
||||
|
||||
documentation:
|
||||
- '**/*.md'
|
||||
- 'docs/**/*'
|
||||
- 'website/**/*'
|
||||
- 'mkdocs-website/**/*'
|
||||
|
||||
templates:
|
||||
- '**/templates/**/*'
|
||||
- '**/template/**/*'
|
||||
|
||||
runtime:
|
||||
- '**/runtime/**/*'
|
||||
- 'v2/internal/runtime/**/*'
|
||||
- 'v3/internal/runtime/**/*'
|
||||
|
||||
bindings:
|
||||
- 'v2/internal/binding/**/*'
|
||||
- 'v3/internal/generator/**/*'
|
||||
|
||||
144
.github/issue-labeler.yml
vendored
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
# Version labels
|
||||
v2-only:
|
||||
- '\[v2\]'
|
||||
- '\(v2\)'
|
||||
- 'v2:'
|
||||
- 'version 2'
|
||||
- 'wails v2'
|
||||
- 'using v2'
|
||||
- 'master branch'
|
||||
|
||||
v3-alpha:
|
||||
- '\[v3\]'
|
||||
- '\(v3\)'
|
||||
- 'v3:'
|
||||
- '\[v3-alpha\]'
|
||||
- '\(v3-alpha\)'
|
||||
- 'version 3'
|
||||
- 'wails v3'
|
||||
- 'using v3'
|
||||
- 'v3-alpha branch'
|
||||
|
||||
# Component labels
|
||||
webview2:
|
||||
- 'webview2'
|
||||
- 'windows'
|
||||
- 'microsoft edge'
|
||||
- 'edge browser'
|
||||
- 'IE'
|
||||
- 'Explorer'
|
||||
- 'browser crashes'
|
||||
|
||||
macos:
|
||||
- 'macOS'
|
||||
- 'mac OS'
|
||||
- 'OS X'
|
||||
- 'darwin'
|
||||
- 'cocoa'
|
||||
- 'Safari'
|
||||
- 'Catalyst'
|
||||
- 'Ventura'
|
||||
- 'Sonoma'
|
||||
- 'apple'
|
||||
|
||||
linux:
|
||||
- 'linux'
|
||||
- 'ubuntu'
|
||||
- 'debian'
|
||||
- 'fedora'
|
||||
- 'gtk'
|
||||
- 'webkitgtk'
|
||||
- 'webkit2gtk'
|
||||
- 'gnome'
|
||||
- 'x11'
|
||||
- 'wayland'
|
||||
|
||||
cli:
|
||||
- 'cli'
|
||||
- 'command line'
|
||||
- 'wails doctor'
|
||||
- 'wails init'
|
||||
- 'wails build'
|
||||
- 'wails dev'
|
||||
- 'template'
|
||||
- 'scaffolding'
|
||||
|
||||
# Type labels
|
||||
bug:
|
||||
- 'bug'
|
||||
- 'crash'
|
||||
- 'broken'
|
||||
- 'failure'
|
||||
- 'error'
|
||||
- 'failed'
|
||||
- 'panic'
|
||||
- 'segfault'
|
||||
- 'issue'
|
||||
- 'not working'
|
||||
- 'problem'
|
||||
|
||||
enhancement:
|
||||
- 'feature'
|
||||
- 'enhancement'
|
||||
- 'request'
|
||||
- 'add'
|
||||
- 'new'
|
||||
- 'improve'
|
||||
- 'functionality'
|
||||
- 'support for'
|
||||
- 'please add'
|
||||
- 'would be nice'
|
||||
|
||||
documentation:
|
||||
- 'docs'
|
||||
- 'documentation'
|
||||
- 'readme'
|
||||
- 'example'
|
||||
- 'tutorial'
|
||||
- 'guide'
|
||||
- 'explanation'
|
||||
- 'clarification'
|
||||
- 'instructions'
|
||||
|
||||
security:
|
||||
- 'security'
|
||||
- 'vulnerability'
|
||||
- 'exploit'
|
||||
- 'hack'
|
||||
- 'CVE'
|
||||
- 'secure'
|
||||
- 'encryption'
|
||||
- 'hardening'
|
||||
|
||||
performance:
|
||||
- 'performance'
|
||||
- 'slow'
|
||||
- 'speed'
|
||||
- 'memory leak'
|
||||
- 'cpu usage'
|
||||
- 'high memory'
|
||||
- 'lag'
|
||||
- 'freeze'
|
||||
- 'optimization'
|
||||
|
||||
# Priority labels
|
||||
high-priority:
|
||||
- 'urgent'
|
||||
- 'critical'
|
||||
- 'security'
|
||||
- 'high priority'
|
||||
- 'important'
|
||||
- 'production'
|
||||
- 'blocker'
|
||||
- 'blocking'
|
||||
|
||||
question:
|
||||
- 'how to'
|
||||
- 'how do i'
|
||||
- 'can I'
|
||||
- 'is it possible'
|
||||
- 'question'
|
||||
- 'help me'
|
||||
- 'need help'
|
||||
- 'assistance'
|
||||
- 'confused'
|
||||
25
.github/pull_request_template.md
vendored
|
|
@ -1,9 +1,20 @@
|
|||
|
||||
<!--
|
||||
READ CAREFULLY: Before submitting your PR, please ensure you have created an issue for your PR.
|
||||
It is essential that you do this so that we can discuss the proposed changes before you spend time on them.
|
||||
If you do not create an issue, your PR may be rejected without review.
|
||||
If a relevant issue already exists, please reference it in your PR by including `Fixes #<issue number>` in your PR description.
|
||||
|
||||
*********************************************************************
|
||||
* PLEASE READ BEFORE SUBMITTING YOUR PR *
|
||||
* YOUR PR MAY BE REJECTED IF IT DOES NOT FOLLOW THESE STEPS *
|
||||
*********************************************************************
|
||||
|
||||
- *DO NOT* submit bugs for a source install of v3, ONLY tagged versions, e.g. v3.0.0-alpha.11
|
||||
- *DO NOT* submit PRs for v3 alpha enhancements, unless you have opened a post on the discord channel.
|
||||
All enhancements must be discussed first.
|
||||
The feedback guide for v3 is here: https://v3alpha.wails.io/getting-started/feedback/
|
||||
|
||||
- Before submitting your PR, please ensure you have created and linked the PR to an issue.
|
||||
- If a relevant issue already exists, please reference it in your PR by including `Fixes #<issue number>` in your PR description.
|
||||
- Please fill in the checklists.
|
||||
|
||||
-->
|
||||
|
||||
# Description
|
||||
|
|
@ -14,7 +25,7 @@ Fixes # (issue)
|
|||
|
||||
## Type of change
|
||||
|
||||
Please delete options that are not relevant.
|
||||
Please select the option that is relevant.
|
||||
|
||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
|
|
@ -28,6 +39,8 @@ Please describe the tests that you ran to verify your changes. Provide instructi
|
|||
- [ ] Windows
|
||||
- [ ] macOS
|
||||
- [ ] Linux
|
||||
|
||||
If you checked Linux, please specify the distro and version.
|
||||
|
||||
## Test Configuration
|
||||
|
||||
|
|
@ -35,7 +48,7 @@ Please paste the output of `wails doctor`. If you are unable to run this command
|
|||
|
||||
# Checklist:
|
||||
|
||||
- [ ] I have updated `website/src/pages/changelog.mdx` with details of this PR
|
||||
- [ ] I have updated `v3/UNRELEASED_CHANGELOG.md` with details of this PR
|
||||
- [ ] My code follows the general coding style of this project
|
||||
- [ ] I have performed a self-review of my own code
|
||||
- [ ] I have commented my code, particularly in hard-to-understand areas
|
||||
|
|
|
|||
26
.github/stale.yml
vendored
|
|
@ -1,7 +1,7 @@
|
|||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 30
|
||||
daysUntilStale: 45
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
daysUntilClose: 10
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- pinned
|
||||
|
|
@ -9,14 +9,28 @@ exemptLabels:
|
|||
- onhold
|
||||
- inprogress
|
||||
- "Selected For Development"
|
||||
- bug
|
||||
- enhancement
|
||||
- v3-alpha
|
||||
- high-priority
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: "Wont Fix"
|
||||
staleLabel: "stale"
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
recent activity. It will be closed if no further activity occurs within the next 10 days.
|
||||
|
||||
If this issue is still relevant, please add a comment to keep it open.
|
||||
Thank you for your contributions.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
||||
closeComment: >
|
||||
This issue has been automatically closed due to lack of activity.
|
||||
Please feel free to reopen it if it's still relevant.
|
||||
exemptMilestones: true
|
||||
exemptAssignees: true
|
||||
# Only mark issues (not PRs)
|
||||
only: issues
|
||||
# Exempt issues created before a certain date
|
||||
exemptCreatedBefore: "2024-01-01T00:00:00Z"
|
||||
# Starts checking issues only after the specified date
|
||||
startDate: "2025-06-01T00:00:00Z"
|
||||
|
|
|
|||
33
.github/workflows/auto-label-issues.yml
vendored
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
name: Auto Label Issues
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, edited, reopened]
|
||||
pull_request_target:
|
||||
types: [opened, edited, reopened, synchronize]
|
||||
|
||||
jobs:
|
||||
auto-label:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Label issues and PRs by content
|
||||
uses: github/issue-labeler@v3.4
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
configuration-path: .github/issue-labeler.yml
|
||||
enable-versioned-regex: 0
|
||||
include-title: 1
|
||||
|
||||
- name: Label issues and PRs by file paths
|
||||
uses: actions/labeler@v4
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
configuration-path: .github/file-labeler.yml
|
||||
sync-labels: true
|
||||
372
.github/workflows/automated-releases.yml
vendored
Normal file
|
|
@ -0,0 +1,372 @@
|
|||
name: Automated Nightly Releases
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
force_release:
|
||||
description: 'Force release even if no changes detected'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
dry_run:
|
||||
description: 'Run in dry-run mode (no actual releases)'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
# schedule:
|
||||
# Run at 2 AM UTC every day - DISABLED for safety until ready
|
||||
# - cron: '0 2 * * *'
|
||||
|
||||
env:
|
||||
GO_VERSION: '1.24'
|
||||
|
||||
jobs:
|
||||
check-permissions:
|
||||
name: Check Release Permissions
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
authorized: ${{ steps.check.outputs.authorized }}
|
||||
steps:
|
||||
- name: Check if user is authorized for releases
|
||||
id: check
|
||||
run: |
|
||||
# Only allow specific users to trigger releases
|
||||
AUTHORIZED_USERS="leaanthony"
|
||||
|
||||
if [[ "$AUTHORIZED_USERS" == *"${{ github.actor }}"* ]]; then
|
||||
echo "✅ User ${{ github.actor }} is authorized for releases"
|
||||
echo "authorized=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "❌ User ${{ github.actor }} is not authorized for releases"
|
||||
echo "authorized=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
detect-v2-changes:
|
||||
name: Detect v2 Changes
|
||||
runs-on: ubuntu-latest
|
||||
needs: check-permissions
|
||||
if: needs.check-permissions.outputs.authorized == 'true'
|
||||
outputs:
|
||||
has_changes: ${{ steps.changes.outputs.has_changes }}
|
||||
commits_since_last: ${{ steps.changes.outputs.commits_since_last }}
|
||||
last_release_tag: ${{ steps.changes.outputs.last_release_tag }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check for v2 changes since last release
|
||||
id: changes
|
||||
run: |
|
||||
echo "🔍 Checking for v2 changes since last release..."
|
||||
|
||||
# Find the last v2 release tag
|
||||
LAST_TAG=$(git tag -l "v2.*" --sort=-version:refname | head -n 1)
|
||||
if [ -z "$LAST_TAG" ]; then
|
||||
echo "No previous v2 tags found, assuming first release"
|
||||
LAST_TAG=$(git rev-list --max-parents=0 HEAD)
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
echo "commits_since_last=999" >> $GITHUB_OUTPUT
|
||||
echo "last_release_tag=none" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "Last v2 release tag: $LAST_TAG"
|
||||
echo "last_release_tag=$LAST_TAG" >> $GITHUB_OUTPUT
|
||||
|
||||
# Count commits since last release affecting v2 or root files
|
||||
COMMITS_COUNT=$(git rev-list --count ${LAST_TAG}..HEAD -- v2/ website/ README.md CHANGELOG.md || echo "0")
|
||||
echo "Commits since last v2 release: $COMMITS_COUNT"
|
||||
echo "commits_since_last=$COMMITS_COUNT" >> $GITHUB_OUTPUT
|
||||
|
||||
if [ "$COMMITS_COUNT" -gt 0 ] || [ "${{ github.event.inputs.force_release }}" == "true" ]; then
|
||||
echo "✅ Changes detected or forced release"
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "ℹ️ No changes detected since last release"
|
||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
fi
|
||||
|
||||
detect-v3-changes:
|
||||
name: Detect v3-alpha Changes
|
||||
runs-on: ubuntu-latest
|
||||
needs: check-permissions
|
||||
if: needs.check-permissions.outputs.authorized == 'true'
|
||||
outputs:
|
||||
has_changes: ${{ steps.changes.outputs.has_changes }}
|
||||
commits_since_last: ${{ steps.changes.outputs.commits_since_last }}
|
||||
last_release_tag: ${{ steps.changes.outputs.last_release_tag }}
|
||||
steps:
|
||||
- name: Checkout v3-alpha branch
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: v3-alpha
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check for v3-alpha changes since last release
|
||||
id: changes
|
||||
run: |
|
||||
echo "🔍 Checking for v3-alpha changes since last release..."
|
||||
|
||||
# Find the last v3 alpha release tag
|
||||
LAST_TAG=$(git tag -l "v3.*-alpha.*" --sort=-version:refname | head -n 1)
|
||||
if [ -z "$LAST_TAG" ]; then
|
||||
echo "No previous v3-alpha tags found, assuming first release"
|
||||
LAST_TAG=$(git rev-list --max-parents=0 HEAD)
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
echo "commits_since_last=999" >> $GITHUB_OUTPUT
|
||||
echo "last_release_tag=none" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "Last v3-alpha release tag: $LAST_TAG"
|
||||
echo "last_release_tag=$LAST_TAG" >> $GITHUB_OUTPUT
|
||||
|
||||
# Count commits since last release affecting v3 or docs
|
||||
COMMITS_COUNT=$(git rev-list --count ${LAST_TAG}..HEAD -- v3/ docs/ || echo "0")
|
||||
echo "Commits since last v3-alpha release: $COMMITS_COUNT"
|
||||
echo "commits_since_last=$COMMITS_COUNT" >> $GITHUB_OUTPUT
|
||||
|
||||
if [ "$COMMITS_COUNT" -gt 0 ] || [ "${{ github.event.inputs.force_release }}" == "true" ]; then
|
||||
echo "✅ Changes detected or forced release"
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "ℹ️ No changes detected since last release"
|
||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
fi
|
||||
|
||||
release-v2:
|
||||
name: Create v2 Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [check-permissions, detect-v2-changes]
|
||||
if: |
|
||||
needs.check-permissions.outputs.authorized == 'true' &&
|
||||
needs.detect-v2-changes.outputs.has_changes == 'true'
|
||||
outputs:
|
||||
version: ${{ steps.release.outputs.version }}
|
||||
release_notes: ${{ steps.release.outputs.release_notes }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Run v2 release script and extract notes
|
||||
id: release
|
||||
run: |
|
||||
echo "🚀 Running v2 release script..."
|
||||
cd v2/tools/release
|
||||
|
||||
# Run release script and capture output
|
||||
RELEASE_OUTPUT=$(go run release.go 2>&1)
|
||||
echo "$RELEASE_OUTPUT"
|
||||
|
||||
# Extract version from output or version file
|
||||
NEW_VERSION=$(cat ../../cmd/wails/internal/version.txt)
|
||||
echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
# Extract release notes from delimited output
|
||||
RELEASE_NOTES=$(echo "$RELEASE_OUTPUT" | sed -n '/=== RELEASE NOTES FOR/,/=== END RELEASE NOTES ===/p' | sed '1d;$d')
|
||||
|
||||
# Save release notes to file for multiline output
|
||||
echo "$RELEASE_NOTES" > ../../../release_notes_v2.md
|
||||
|
||||
# Set output (escape for GitHub Actions)
|
||||
{
|
||||
echo "release_notes<<EOF"
|
||||
echo "$RELEASE_NOTES"
|
||||
echo "EOF"
|
||||
} >> $GITHUB_OUTPUT
|
||||
|
||||
echo "✅ v2 release script completed - version: $NEW_VERSION"
|
||||
|
||||
- name: Create v2 git tag and release
|
||||
if: github.event.inputs.dry_run != 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
VERSION="${{ steps.release.outputs.version }}"
|
||||
echo "📝 Creating v2 release: $VERSION"
|
||||
|
||||
# Configure git
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
# Commit the changelog changes
|
||||
git add website/src/pages/changelog.mdx v2/cmd/wails/internal/version.txt
|
||||
git commit -m "chore: release $VERSION
|
||||
|
||||
Automated release created by GitHub Actions
|
||||
|
||||
🤖 Generated with [Claude Code](https://claude.ai/code)
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||
|
||||
# Create and push tag
|
||||
git tag -a "$VERSION" -m "Release $VERSION"
|
||||
git push origin master
|
||||
git push origin "$VERSION"
|
||||
|
||||
# Create GitHub release with notes
|
||||
gh release create "$VERSION" \
|
||||
--title "Release $VERSION" \
|
||||
--notes-file release_notes_v2.md \
|
||||
--target master
|
||||
|
||||
- name: Log dry-run results for v2
|
||||
if: github.event.inputs.dry_run == 'true'
|
||||
run: |
|
||||
echo "🧪 DRY RUN - Would have created v2 release:"
|
||||
echo "Version: ${{ steps.release.outputs.version }}"
|
||||
echo "Release Notes:"
|
||||
cat release_notes_v2.md
|
||||
|
||||
release-v3:
|
||||
name: Create v3-alpha Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [check-permissions, detect-v3-changes]
|
||||
if: |
|
||||
needs.check-permissions.outputs.authorized == 'true' &&
|
||||
needs.detect-v3-changes.outputs.has_changes == 'true'
|
||||
outputs:
|
||||
version: ${{ steps.release.outputs.version }}
|
||||
release_notes: ${{ steps.release.outputs.release_notes }}
|
||||
steps:
|
||||
- name: Checkout v3-alpha branch
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: v3-alpha
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Run v3 release script and extract notes
|
||||
id: release
|
||||
run: |
|
||||
echo "🚀 Running v3-alpha release script..."
|
||||
cd v3/tasks/release
|
||||
|
||||
# Run release script and capture output
|
||||
RELEASE_OUTPUT=$(go run release.go 2>&1)
|
||||
echo "$RELEASE_OUTPUT"
|
||||
|
||||
# Extract version from output or version file
|
||||
NEW_VERSION=$(cat ../../internal/version/version.txt)
|
||||
echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
# Extract release notes from delimited output
|
||||
RELEASE_NOTES=$(echo "$RELEASE_OUTPUT" | sed -n '/=== RELEASE NOTES FOR/,/=== END RELEASE NOTES ===/p' | sed '1d;$d')
|
||||
|
||||
# Save release notes to file for multiline output
|
||||
echo "$RELEASE_NOTES" > ../../../release_notes_v3.md
|
||||
|
||||
# Set output (escape for GitHub Actions)
|
||||
{
|
||||
echo "release_notes<<EOF"
|
||||
echo "$RELEASE_NOTES"
|
||||
echo "EOF"
|
||||
} >> $GITHUB_OUTPUT
|
||||
|
||||
echo "✅ v3-alpha release script completed - version: $NEW_VERSION"
|
||||
|
||||
- name: Create v3-alpha git tag and release
|
||||
if: github.event.inputs.dry_run != 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
VERSION="${{ steps.release.outputs.version }}"
|
||||
echo "📝 Creating v3-alpha release: $VERSION"
|
||||
|
||||
# Configure git
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
# Commit the changelog changes
|
||||
git add docs/src/content/docs/changelog.mdx v3/internal/version/version.txt
|
||||
git commit -m "chore: release $VERSION
|
||||
|
||||
Automated v3-alpha release created by GitHub Actions
|
||||
|
||||
🤖 Generated with [Claude Code](https://claude.ai/code)
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||
|
||||
# Create and push tag
|
||||
git tag -a "$VERSION" -m "Release $VERSION"
|
||||
git push origin v3-alpha
|
||||
git push origin "$VERSION"
|
||||
|
||||
# Create GitHub release with notes
|
||||
gh release create "$VERSION" \
|
||||
--title "Release $VERSION" \
|
||||
--notes-file release_notes_v3.md \
|
||||
--target v3-alpha \
|
||||
--prerelease
|
||||
|
||||
- name: Log dry-run results for v3-alpha
|
||||
if: github.event.inputs.dry_run == 'true'
|
||||
run: |
|
||||
echo "🧪 DRY RUN - Would have created v3-alpha release:"
|
||||
echo "Version: ${{ steps.release.outputs.version }}"
|
||||
echo "Release Notes:"
|
||||
cat release_notes_v3.md
|
||||
|
||||
summary:
|
||||
name: Release Summary
|
||||
runs-on: ubuntu-latest
|
||||
needs: [check-permissions, detect-v2-changes, detect-v3-changes, release-v2, release-v3]
|
||||
if: always() && needs.check-permissions.outputs.authorized == 'true'
|
||||
steps:
|
||||
- name: Create release summary
|
||||
run: |
|
||||
echo "# 🚀 Automated Release Summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Repository**: ${{ github.repository }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Triggered by**: ${{ github.actor }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Dry Run Mode**: ${{ github.event.inputs.dry_run || 'false' }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# v2 Summary
|
||||
echo "## v2 Release" >> $GITHUB_STEP_SUMMARY
|
||||
if [ "${{ needs.detect-v2-changes.outputs.has_changes }}" == "true" ]; then
|
||||
if [ "${{ needs.release-v2.result }}" == "success" ]; then
|
||||
echo "✅ **v2 Release**: Created successfully" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Version: ${{ needs.release-v2.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Commits since last: ${{ needs.detect-v2-changes.outputs.commits_since_last }}" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **v2 Release**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
else
|
||||
echo "⏭️ **v2 Release**: Skipped (no changes)" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Commits since last: ${{ needs.detect-v2-changes.outputs.commits_since_last }}" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
# v3 Summary
|
||||
echo "## v3-alpha Release" >> $GITHUB_STEP_SUMMARY
|
||||
if [ "${{ needs.detect-v3-changes.outputs.has_changes }}" == "true" ]; then
|
||||
if [ "${{ needs.release-v3.result }}" == "success" ]; then
|
||||
echo "✅ **v3-alpha Release**: Created successfully" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Version: ${{ needs.release-v3.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Commits since last: ${{ needs.detect-v3-changes.outputs.commits_since_last }}" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **v3-alpha Release**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
else
|
||||
echo "⏭️ **v3-alpha Release**: Skipped (no changes)" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Commits since last: ${{ needs.detect-v3-changes.outputs.commits_since_last }}" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "---" >> $GITHUB_STEP_SUMMARY
|
||||
echo "🤖 **Automated Release System** | Generated with [Claude Code](https://claude.ai/code)" >> $GITHUB_STEP_SUMMARY
|
||||
256
.github/workflows/build-and-test-v3.yml
vendored
Normal file
|
|
@ -0,0 +1,256 @@
|
|||
name: Build + Test v3
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
branches:
|
||||
- v3-alpha
|
||||
paths:
|
||||
- 'v3/**'
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
branches:
|
||||
- v3-alpha
|
||||
|
||||
jobs:
|
||||
check_approval:
|
||||
name: Check PR Approval
|
||||
runs-on: ubuntu-latest
|
||||
if: github.base_ref == 'v3-alpha'
|
||||
outputs:
|
||||
approved: ${{ steps.check.outputs.approved }}
|
||||
steps:
|
||||
- name: Check if PR is approved
|
||||
id: check
|
||||
run: |
|
||||
if [[ "${{ github.event.review.state }}" == "approved" || "${{ github.event.pull_request.approved }}" == "true" ]]; then
|
||||
echo "approved=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "approved=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
test_js:
|
||||
name: Run JS Tests
|
||||
needs: check_approval
|
||||
runs-on: ubuntu-latest
|
||||
if: github.base_ref == 'v3-alpha'
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.x]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install Task
|
||||
uses: arduino/setup-task@v2
|
||||
with:
|
||||
version: 3.x
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
run: |
|
||||
npm ci
|
||||
npx --yes esbuild@latest --version
|
||||
|
||||
- name: Clean build artifacts
|
||||
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
run: npm run clean
|
||||
|
||||
- name: Type-check runtime
|
||||
working-directory: v3
|
||||
run: task runtime:check
|
||||
|
||||
- name: Test runtime
|
||||
working-directory: v3
|
||||
run: task runtime:test
|
||||
|
||||
- name: Check that the bundled runtime builds
|
||||
working-directory: v3
|
||||
run: task runtime:build
|
||||
|
||||
- name: Check that the npm package builds
|
||||
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
run: npm run build
|
||||
|
||||
- name: Store runtime build artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: runtime-build-artifacts
|
||||
path: |
|
||||
v3/internal/runtime/desktop/@wailsio/runtime/dist/
|
||||
v3/internal/runtime/desktop/@wailsio/runtime/types/
|
||||
v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.tsbuildinfo
|
||||
|
||||
test_go:
|
||||
name: Run Go Tests v3
|
||||
needs: [check_approval, test_js]
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: github.base_ref == 'v3-alpha'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [windows-latest, ubuntu-latest, macos-latest]
|
||||
go-version: [1.24]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install linux dependencies
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
with:
|
||||
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config xvfb x11-xserver-utils at-spi2-core xdg-desktop-portal-gtk
|
||||
version: 1.0
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
cache-dependency-path: "v3/go.sum"
|
||||
|
||||
- name: Install Task
|
||||
uses: arduino/setup-task@v2
|
||||
with:
|
||||
version: 3.x
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Retrieve runtime build artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: runtime-build-artifacts
|
||||
path: v3/internal/runtime/desktop/@wailsio/runtime/
|
||||
|
||||
- name: Build Examples
|
||||
working-directory: v3
|
||||
run: |
|
||||
echo "Starting example compilation tests..."
|
||||
task test:examples
|
||||
echo "Example compilation tests completed successfully"
|
||||
|
||||
- name: Run tests (mac)
|
||||
if: matrix.os == 'macos-latest'
|
||||
env:
|
||||
CGO_LDFLAGS: -framework UniformTypeIdentifiers -mmacosx-version-min=10.13
|
||||
working-directory: v3
|
||||
run: go test -v ./...
|
||||
|
||||
- name: Run tests (windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
working-directory: v3
|
||||
run: go test -v ./...
|
||||
|
||||
- name: Run tests (ubuntu)
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
working-directory: v3
|
||||
run: >
|
||||
xvfb-run --auto-servernum
|
||||
sh -c '
|
||||
dbus-update-activation-environment --systemd --all &&
|
||||
go test -v ./...
|
||||
'
|
||||
|
||||
- name: Typecheck binding generator output
|
||||
working-directory: v3
|
||||
run: task generator:test:check
|
||||
|
||||
cleanup:
|
||||
name: Cleanup build artifacts
|
||||
if: always()
|
||||
needs: [test_js, test_go]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: geekyeggo/delete-artifact@v5
|
||||
with:
|
||||
name: runtime-build-artifacts
|
||||
failOnError: false
|
||||
|
||||
test_templates:
|
||||
name: Test Templates
|
||||
needs: test_go
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: github.base_ref == 'v3-alpha'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
template:
|
||||
- svelte
|
||||
- svelte-ts
|
||||
- vue
|
||||
- vue-ts
|
||||
- react
|
||||
- react-ts
|
||||
- preact
|
||||
- preact-ts
|
||||
- lit
|
||||
- lit-ts
|
||||
- vanilla
|
||||
- vanilla-ts
|
||||
go-version: [1.24]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install linux dependencies
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
with:
|
||||
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
|
||||
version: 1.0
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
cache-dependency-path: "v3/go.sum"
|
||||
|
||||
- name: Install Task
|
||||
uses: arduino/setup-task@v2
|
||||
with:
|
||||
version: 3.x
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build Wails3 CLI
|
||||
working-directory: v3
|
||||
run: |
|
||||
task install
|
||||
wails3 doctor
|
||||
|
||||
- name: Generate template '${{ matrix.template }}'
|
||||
run: |
|
||||
mkdir -p ./test-${{ matrix.template }}
|
||||
cd ./test-${{ matrix.template }}
|
||||
wails3 init -n ${{ matrix.template }} -t ${{ matrix.template }}
|
||||
cd ${{ matrix.template }}
|
||||
wails3 build
|
||||
|
||||
build_results:
|
||||
if: ${{ always() }}
|
||||
runs-on: ubuntu-latest
|
||||
name: v3 Build Results
|
||||
needs: [test_go, test_js, test_templates]
|
||||
steps:
|
||||
- run: |
|
||||
go_result="${{ needs.test_go.result }}"
|
||||
js_result="${{ needs.test_js.result }}"
|
||||
templates_result="${{ needs.test_templates.result }}"
|
||||
|
||||
if [[ $go_result == "success" || $go_result == "skipped" ]] && \
|
||||
[[ $js_result == "success" || $js_result == "skipped" ]] && \
|
||||
[[ $templates_result == "success" || $templates_result == "skipped" ]]; then
|
||||
echo "All required jobs succeeded or were skipped"
|
||||
exit 0
|
||||
else
|
||||
echo "One or more required jobs failed"
|
||||
exit 1
|
||||
fi
|
||||
74
.github/workflows/changelog-validation-v3.yml
vendored
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
name: Changelog Validation (v3)
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ v3-alpha ]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: 'PR number to validate (for manual testing)'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
validate-changelog:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'pull_request' || github.event.inputs.pr_number
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || format('refs/pull/{0}/head', github.event.inputs.pr_number) }}
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.23'
|
||||
|
||||
- name: Get PR information
|
||||
id: pr_info
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
||||
echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
|
||||
echo "base_ref=${{ github.event.pull_request.base.ref }}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "pr_number=${{ github.event.inputs.pr_number }}" >> $GITHUB_OUTPUT
|
||||
echo "base_ref=v3-alpha" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Check if changelog was modified
|
||||
id: changelog_check
|
||||
run: |
|
||||
git fetch origin ${{ steps.pr_info.outputs.base_ref }}
|
||||
if git diff --name-only origin/${{ steps.pr_info.outputs.base_ref }}..HEAD | grep -q "v3/UNRELEASED_CHANGELOG.md"; then
|
||||
echo "changelog_modified=true" >> $GITHUB_OUTPUT
|
||||
echo "✅ UNRELEASED_CHANGELOG.md was modified in this PR"
|
||||
else
|
||||
echo "changelog_modified=false" >> $GITHUB_OUTPUT
|
||||
echo "⚠️ UNRELEASED_CHANGELOG.md was not modified"
|
||||
fi
|
||||
|
||||
- name: Comment on PR about missing changelog
|
||||
if: steps.changelog_check.outputs.changelog_modified == 'false' && github.event_name == 'pull_request'
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const author = context.payload.pull_request.user.login;
|
||||
const message = '## ⚠️ Missing Changelog Update\n\n' +
|
||||
`Hi @${author}, please update \`v3/UNRELEASED_CHANGELOG.md\` with a description of your changes.\n\n` +
|
||||
'This helps us keep track of changes for the next release.';
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
issue_number: ${{ steps.pr_info.outputs.pr_number }},
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: message
|
||||
});
|
||||
|
||||
9
.github/workflows/generate-sponsor-image.yml
vendored
|
|
@ -29,7 +29,12 @@ jobs:
|
|||
with:
|
||||
commit-message: "chore: update sponsors.svg"
|
||||
add-paths: "website/static/img/sponsors.svg"
|
||||
title: Update Sponsor Image
|
||||
body: Generated new image
|
||||
title: "chore: update sponsors.svg"
|
||||
body: |
|
||||
Auto-generated by the sponsor image workflow
|
||||
|
||||
[skip ci] [skip actions]
|
||||
branch: update-sponsors
|
||||
base: master
|
||||
delete-branch: true
|
||||
draft: false
|
||||
|
|
|
|||
77
.github/workflows/issue-triage-automation.yml
vendored
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
name: Issue Triage Automation
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, reopened, labeled, unlabeled]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
contents: read
|
||||
steps:
|
||||
# Request more info for unclear bug reports
|
||||
- name: Request more info
|
||||
uses: actions/github-script@v6
|
||||
if: |
|
||||
contains(github.event.issue.labels.*.name, 'bug') &&
|
||||
!contains(github.event.issue.body, 'wails doctor') &&
|
||||
!contains(github.event.issue.body, 'reproduction')
|
||||
with:
|
||||
script: |
|
||||
github.rest.issues.createComment({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: `👋 Thanks for reporting this issue! To help us investigate, could you please:
|
||||
|
||||
1. Add the output of \`wails doctor\` if not already included
|
||||
2. Provide clear steps to reproduce the issue
|
||||
3. If possible, create a minimal reproduction of the issue
|
||||
|
||||
This will help us resolve your issue much faster. Thank you!`
|
||||
});
|
||||
github.rest.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['awaiting feedback']
|
||||
});
|
||||
|
||||
# Prioritize security issues
|
||||
- name: Prioritize security issues
|
||||
uses: actions/github-script@v6
|
||||
if: contains(github.event.issue.labels.*.name, 'security')
|
||||
with:
|
||||
script: |
|
||||
github.rest.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['high-priority']
|
||||
});
|
||||
|
||||
# Tag version-specific issues for project boards
|
||||
- name: Add to v2 project
|
||||
uses: actions/github-script@v6
|
||||
if: |
|
||||
contains(github.event.issue.labels.*.name, 'v2-only') &&
|
||||
!contains(github.event.issue.labels.*.name, 'v3-alpha')
|
||||
with:
|
||||
script: |
|
||||
// Replace PROJECT_ID with your actual GitHub project ID
|
||||
// This is a placeholder as the actual implementation would require
|
||||
// GraphQL API calls to add to a project board
|
||||
console.log('Would add to v2 project board');
|
||||
|
||||
# Tag version-specific issues for project boards
|
||||
- name: Add to v3 project
|
||||
uses: actions/github-script@v6
|
||||
if: contains(github.event.issue.labels.*.name, 'v3-alpha')
|
||||
with:
|
||||
script: |
|
||||
// Replace PROJECT_ID with your actual GitHub project ID
|
||||
// This is a placeholder as the actual implementation would require
|
||||
// GraphQL API calls to add to a project board
|
||||
console.log('Would add to v3 project board');
|
||||
210
.github/workflows/nightly-release-v3.yml
vendored
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
name: Nightly Release v3-alpha
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 2 * * *' # 2 AM UTC daily
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
force_release:
|
||||
description: 'Force release even if no changes detected'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
dry_run:
|
||||
description: 'Run in dry-run mode (no actual release)'
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
nightly-release:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: read
|
||||
actions: write
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: v3-alpha
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.WAILS_REPO_TOKEN || github.token }}
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.24'
|
||||
cache: true
|
||||
cache-dependency-path: 'v3/go.sum'
|
||||
|
||||
- name: Install Task
|
||||
uses: arduino/setup-task@v2
|
||||
with:
|
||||
version: 3.x
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
# Configure git to use the token for authentication
|
||||
git config --global url."https://x-access-token:${{ secrets.WAILS_REPO_TOKEN || github.token }}@github.com/".insteadOf "https://github.com/"
|
||||
|
||||
- name: Check for existing release tag
|
||||
id: check_tag
|
||||
run: |
|
||||
if git describe --tags --exact-match HEAD 2>/dev/null; then
|
||||
echo "has_tag=true" >> $GITHUB_OUTPUT
|
||||
echo "tag=$(git describe --tags --exact-match HEAD)" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "has_tag=false" >> $GITHUB_OUTPUT
|
||||
echo "tag=" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Check for unreleased changelog content
|
||||
id: changelog_check
|
||||
run: |
|
||||
echo "🔍 Checking UNRELEASED_CHANGELOG.md for content..."
|
||||
|
||||
# Run the release script in check mode to see if there's content
|
||||
cd v3/tasks/release
|
||||
|
||||
# Use the release script itself to check for content
|
||||
if go run release.go --check-only 2>/dev/null; then
|
||||
echo "has_unreleased_content=true" >> $GITHUB_OUTPUT
|
||||
echo "✅ Found unreleased changelog content"
|
||||
else
|
||||
echo "has_unreleased_content=false" >> $GITHUB_OUTPUT
|
||||
echo "ℹ️ No unreleased changelog content found"
|
||||
fi
|
||||
|
||||
- name: Quick change detection and early exit
|
||||
id: quick_check
|
||||
run: |
|
||||
echo "🔍 Quick check for changes to determine if we should continue..."
|
||||
|
||||
# First check if we have unreleased changelog content
|
||||
if [ "${{ steps.changelog_check.outputs.has_unreleased_content }}" == "true" ]; then
|
||||
echo "✅ Found unreleased changelog content, proceeding with release"
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
echo "should_continue=true" >> $GITHUB_OUTPUT
|
||||
echo "reason=Found unreleased changelog content" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# If no unreleased changelog content, check for git changes as fallback
|
||||
echo "No unreleased changelog content found, checking for git changes..."
|
||||
|
||||
# Check if current commit has a release tag
|
||||
if git describe --tags --exact-match HEAD 2>/dev/null; then
|
||||
CURRENT_TAG=$(git describe --tags --exact-match HEAD)
|
||||
echo "Current commit has release tag: $CURRENT_TAG"
|
||||
|
||||
# For tagged commits, check if there are changes since the tag
|
||||
COMMIT_COUNT=$(git rev-list ${CURRENT_TAG}..HEAD --count)
|
||||
if [ "$COMMIT_COUNT" -eq 0 ]; then
|
||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||
echo "should_continue=false" >> $GITHUB_OUTPUT
|
||||
echo "reason=No changes since existing tag $CURRENT_TAG and no unreleased changelog content" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
echo "should_continue=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
else
|
||||
# No current tag, check against latest release
|
||||
LATEST_TAG=$(git tag --list "v3.0.0-alpha.*" | sort -V | tail -1)
|
||||
if [ -z "$LATEST_TAG" ]; then
|
||||
echo "No previous release found, proceeding with release"
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
echo "should_continue=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
COMMIT_COUNT=$(git rev-list ${LATEST_TAG}..HEAD --count)
|
||||
if [ "$COMMIT_COUNT" -gt 0 ]; then
|
||||
echo "Found $COMMIT_COUNT commits since $LATEST_TAG"
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
echo "should_continue=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||
echo "should_continue=false" >> $GITHUB_OUTPUT
|
||||
echo "reason=No changes since latest release $LATEST_TAG and no unreleased changelog content" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
- name: Early exit - No changes detected
|
||||
if: |
|
||||
steps.quick_check.outputs.should_continue == 'false' &&
|
||||
github.event.inputs.force_release != 'true'
|
||||
run: |
|
||||
echo "🛑 EARLY EXIT: ${{ steps.quick_check.outputs.reason }}"
|
||||
echo ""
|
||||
echo "ℹ️ No changes detected since last release and force_release is not enabled."
|
||||
echo " Workflow will exit early to save resources."
|
||||
echo ""
|
||||
echo " To force a release anyway, run this workflow with 'force_release=true'"
|
||||
echo ""
|
||||
echo "## 🛑 Early Exit Summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Reason:** ${{ steps.quick_check.outputs.reason }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Action:** Workflow exited early to save resources" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Force Release:** Set 'force_release=true' to override this behavior" >> $GITHUB_STEP_SUMMARY
|
||||
exit 0
|
||||
|
||||
- name: Continue with release process
|
||||
if: |
|
||||
steps.quick_check.outputs.should_continue == 'true' ||
|
||||
github.event.inputs.force_release == 'true'
|
||||
run: |
|
||||
echo "✅ Proceeding with release process..."
|
||||
if [ "${{ github.event.inputs.force_release }}" == "true" ]; then
|
||||
echo "🔨 FORCE RELEASE: Overriding change detection"
|
||||
fi
|
||||
|
||||
- name: Run release script
|
||||
id: release
|
||||
if: |
|
||||
steps.quick_check.outputs.should_continue == 'true' ||
|
||||
github.event.inputs.force_release == 'true'
|
||||
env:
|
||||
WAILS_REPO_TOKEN: ${{ secrets.WAILS_REPO_TOKEN || github.token }}
|
||||
GITHUB_TOKEN: ${{ secrets.WAILS_REPO_TOKEN || github.token }}
|
||||
run: |
|
||||
cd v3/tasks/release
|
||||
ARGS=()
|
||||
if [ "${{ github.event.inputs.dry_run }}" == "true" ]; then
|
||||
ARGS+=(--dry-run)
|
||||
fi
|
||||
go run release.go "${ARGS[@]}"
|
||||
|
||||
- name: Summary
|
||||
if: always()
|
||||
run: |
|
||||
if [ "${{ github.event.inputs.dry_run }}" == "true" ]; then
|
||||
echo "## 🧪 DRY RUN Release Summary" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "## 🚀 Nightly Release Summary" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
echo "================================" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
if [ -n "${{ steps.release.outputs.release_version }}" ]; then
|
||||
echo "- **Version:** ${{ steps.release.outputs.release_version }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **Tag:** ${{ steps.release.outputs.release_tag }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **Status:** ${{ steps.release.outcome == 'success' && '✅ Success' || '⚠️ Failed' }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **Mode:** ${{ steps.release.outputs.release_dry_run == 'true' && '🧪 Dry Run' || '🚀 Live release' }}" >> $GITHUB_STEP_SUMMARY
|
||||
if [ -n "${{ steps.release.outputs.release_url }}" ]; then
|
||||
echo "- **Release URL:** ${{ steps.release.outputs.release_url }}" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### Changelog" >> $GITHUB_STEP_SUMMARY
|
||||
if [ "${{ steps.changelog_check.outputs.has_unreleased_content }}" == "true" ]; then
|
||||
echo "✅ Unreleased changelog processed and reset." >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "ℹ️ No unreleased changelog content detected." >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
else
|
||||
echo "- Release script did not run (skipped or failed before execution)." >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
|
|
@ -1,20 +1,23 @@
|
|||
name: PR Checks
|
||||
name: PR Checks (master)
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
check_docs:
|
||||
name: Check Docs
|
||||
if: ${{github.repository == 'wailsapp/wails' && contains(github.head_ref,'feature/')}}
|
||||
if: ${{github.repository == 'wailsapp/wails' && github.base_ref == 'master'}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Verify Changed files
|
||||
uses: tj-actions/verify-changed-files@v17
|
||||
uses: step-security/changed-files@3dbe17c78367e7d60f00d78ae6781a35be47b4a1 # v45.0.1
|
||||
id: verify-changed-files
|
||||
with:
|
||||
files: |
|
||||
|
|
@ -26,47 +29,28 @@ jobs:
|
|||
run: |
|
||||
echo "::warning::Feature branch does not contain any changes to the website."
|
||||
|
||||
# lint_go:
|
||||
# name: Run Go Linters
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - name: Checkout code
|
||||
# uses: actions/checkout@v4
|
||||
#
|
||||
# - name: Setup Go
|
||||
# uses: actions/setup-go@v4
|
||||
# with:
|
||||
# go-version: "1.21"
|
||||
#
|
||||
# - name: Update go modules
|
||||
# working-directory: ./v2
|
||||
# run: go mod tidy
|
||||
#
|
||||
# - name: Run Linter
|
||||
# uses: golangci/golangci-lint-action@v3
|
||||
# with:
|
||||
# version: v1.54
|
||||
# working-directory: ./v2
|
||||
# args: --timeout=10m0s --config ./.golangci.yml
|
||||
|
||||
test_go:
|
||||
name: Run Go Tests
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: github.event.review.state == 'approved'
|
||||
if: >
|
||||
github.event.review.state == 'approved' &&
|
||||
github.repository == 'wailsapp/wails' &&
|
||||
github.base_ref == 'master' &&
|
||||
github.event.pull_request.head.ref != 'update-sponsors'
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04]
|
||||
go-version: ['1.21']
|
||||
go-version: ['1.23']
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install linux dependencies ( 22.04 )
|
||||
- name: Install linux dependencies (22.04)
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config
|
||||
|
||||
- name: Install linux dependencies ( 24.04 )
|
||||
- name: Install linux dependencies (24.04)
|
||||
if: matrix.os == 'ubuntu-24.04'
|
||||
run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
|
||||
|
||||
119
.github/workflows/publish-npm.yml
vendored
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
on:
|
||||
push:
|
||||
branches: ['v3-alpha']
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: publish-npm-v3
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
detect:
|
||||
name: Detect committed changes
|
||||
if: github.event_name != 'workflow_dispatch'
|
||||
outputs:
|
||||
changed: ${{ steps.package-json-changes.outputs.any_modified == 'true' || steps.source-changes.outputs.any_modified == 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.sha }}
|
||||
persist-credentials: 'true'
|
||||
|
||||
- name: Detect committed package.json changes
|
||||
id: package-json-changes
|
||||
uses: step-security/changed-files@3dbe17c78367e7d60f00d78ae6781a35be47b4a1 # v45.0.1
|
||||
with:
|
||||
files: |
|
||||
v3/internal/runtime/desktop/@wailsio/runtime/package.json
|
||||
v3/internal/runtime/desktop/@wailsio/runtime/package-lock.json
|
||||
|
||||
- name: Detect committed source changes
|
||||
if: >-
|
||||
steps.package-json-changes.outputs.any_modified != 'true'
|
||||
id: source-changes
|
||||
uses: step-security/changed-files@3dbe17c78367e7d60f00d78ae6781a35be47b4a1 # v45.0.1
|
||||
with:
|
||||
files: |
|
||||
v3/internal/runtime/Taskfile.yaml
|
||||
v3/internal/runtime/desktop/@wailsio/compiled/main.js
|
||||
v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.json
|
||||
v3/internal/runtime/desktop/@wailsio/runtime/src/**
|
||||
v3/pkg/events/events.txt
|
||||
v3/tasks/events/**
|
||||
|
||||
rebuild_and_publish:
|
||||
name: Rebuild and publish
|
||||
needs: [detect]
|
||||
if: >-
|
||||
!failure() && !cancelled()
|
||||
&& (github.event_name == 'workflow_dispatch' || needs.detect.outputs.changed == 'true')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
actions: read
|
||||
pull-requests: read
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: 'v3-alpha'
|
||||
token: ${{ secrets.WAILS_REPO_TOKEN || github.token }}
|
||||
|
||||
- name: Configure git
|
||||
run: |
|
||||
git config --global user.email "github-actions@github.com"
|
||||
git config --global user.name "GitHub Actions"
|
||||
git config --global url."https://x-access-token:${{ secrets.WAILS_REPO_TOKEN || github.token }}@github.com/".insteadOf "https://github.com/"
|
||||
|
||||
- name: Install Task
|
||||
uses: arduino/setup-task@v2
|
||||
with:
|
||||
version: 3.x
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Use Node.js 20
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
run: |
|
||||
npm ci
|
||||
npx --yes esbuild@latest --version
|
||||
|
||||
- name: Clean build artifacts
|
||||
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
run: npm run clean
|
||||
|
||||
- name: Build bundled runtime
|
||||
working-directory: v3
|
||||
run: task runtime:build
|
||||
|
||||
- name: Test+Build npm package
|
||||
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
run: |
|
||||
npm test
|
||||
npm run build
|
||||
|
||||
- name: Bump version
|
||||
id: bump-version
|
||||
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
run: |
|
||||
echo "version=$(npm --no-git-tag-version --force version prerelease)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Commit changes
|
||||
run: |
|
||||
git add .
|
||||
git commit -m "[skip ci] Publish @wailsio/runtime ${{ steps.bump-version.outputs.version }}"
|
||||
git push
|
||||
|
||||
- name: Publish npm package
|
||||
uses: JS-DevTools/npm-publish@v3
|
||||
with:
|
||||
package: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
access: public
|
||||
token: ${{ secrets.NPM_TOKEN }}
|
||||
3
.github/workflows/semgrep.yml
vendored
|
|
@ -5,6 +5,7 @@ on:
|
|||
branches:
|
||||
- main
|
||||
- master
|
||||
- v3-alpha
|
||||
paths:
|
||||
- .github/workflows/semgrep.yml
|
||||
schedule:
|
||||
|
|
@ -14,7 +15,7 @@ name: Semgrep
|
|||
jobs:
|
||||
semgrep:
|
||||
name: semgrep/ci
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
|
||||
container:
|
||||
|
|
|
|||
57
.github/workflows/stale-issues.yml
vendored
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
name: Mark and Close Stale Issues
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 1 * * *' # Run at 1 AM UTC every day
|
||||
workflow_dispatch: # Allow manual triggering
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
# General settings
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: 45
|
||||
days-before-close: 10
|
||||
stale-issue-label: 'stale'
|
||||
operations-per-run: 250 # Increased from 50 to 250
|
||||
|
||||
# Issue specific settings
|
||||
stale-issue-message: |
|
||||
This issue has been automatically marked as stale because it has not had recent activity.
|
||||
It will be closed if no further activity occurs within the next 10 days.
|
||||
|
||||
If this issue is still relevant, please add a comment to keep it open.
|
||||
Thank you for your contributions.
|
||||
|
||||
close-issue-message: |
|
||||
This issue has been automatically closed due to lack of activity.
|
||||
Please feel free to reopen it if it's still relevant.
|
||||
|
||||
# PR specific settings - We will not mark PRs as stale
|
||||
days-before-pr-stale: -1 # Disable PR staling
|
||||
days-before-pr-close: -1 # Disable PR closing
|
||||
|
||||
# Exemptions
|
||||
exempt-issue-labels: 'pinned,security,onhold,inprogress,Selected For Development,bug,enhancement,v3-alpha,high-priority'
|
||||
exempt-all-issue-milestones: true
|
||||
exempt-all-issue-assignees: true
|
||||
|
||||
# Protection for existing issues
|
||||
exempt-issue-created-before: '2024-01-01T00:00:00Z'
|
||||
start-date: '2025-06-01T00:00:00Z' # Don't start checking until June 1, 2025
|
||||
|
||||
# Only process issues, not PRs
|
||||
only-labels: ''
|
||||
any-of-labels: ''
|
||||
remove-stale-when-updated: true
|
||||
|
||||
# Debug options
|
||||
debug-only: false # Set to true to test without actually marking issues
|
||||
ascending: true # Process older issues first
|
||||
216
.github/workflows/test-nightly-releases.yml
vendored
Normal file
|
|
@ -0,0 +1,216 @@
|
|||
name: Test Nightly Releases (Dry Run)
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
dry_run:
|
||||
description: 'Run in dry-run mode (no actual releases)'
|
||||
required: false
|
||||
default: true
|
||||
type: boolean
|
||||
test_branch:
|
||||
description: 'Branch to test against'
|
||||
required: false
|
||||
default: 'master'
|
||||
type: string
|
||||
|
||||
env:
|
||||
GO_VERSION: '1.24'
|
||||
|
||||
jobs:
|
||||
test-permissions:
|
||||
name: Test Release Permissions
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
authorized: ${{ steps.check.outputs.authorized }}
|
||||
steps:
|
||||
- name: Check if user is authorized
|
||||
id: check
|
||||
run: |
|
||||
# Test authorization logic
|
||||
AUTHORIZED_USERS="leaanthony"
|
||||
|
||||
if [[ "$AUTHORIZED_USERS" == *"${{ github.actor }}"* ]]; then
|
||||
echo "✅ User ${{ github.actor }} is authorized"
|
||||
echo "authorized=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "❌ User ${{ github.actor }} is not authorized"
|
||||
echo "authorized=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
test-changelog-extraction:
|
||||
name: Test Changelog Extraction
|
||||
runs-on: ubuntu-latest
|
||||
needs: test-permissions
|
||||
if: needs.test-permissions.outputs.authorized == 'true'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.inputs.test_branch }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Test v2 changelog extraction
|
||||
run: |
|
||||
echo "🧪 Testing v2 changelog extraction..."
|
||||
CHANGELOG_FILE="website/src/pages/changelog.mdx"
|
||||
|
||||
if [ ! -f "$CHANGELOG_FILE" ]; then
|
||||
echo "❌ v2 changelog file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract unreleased section
|
||||
awk '
|
||||
/^## \[Unreleased\]/ { found=1; next }
|
||||
found && /^## / { exit }
|
||||
found && !/^$/ { print }
|
||||
' $CHANGELOG_FILE > v2_release_notes.md
|
||||
|
||||
echo "📝 v2 changelog content (first 10 lines):"
|
||||
head -10 v2_release_notes.md || echo "No content found"
|
||||
echo "Total lines: $(wc -l < v2_release_notes.md)"
|
||||
|
||||
- name: Test v3 changelog extraction (if accessible)
|
||||
run: |
|
||||
echo "🧪 Testing v3 changelog extraction..."
|
||||
|
||||
if git show v3-alpha:docs/src/content/docs/changelog.mdx > /dev/null 2>&1; then
|
||||
echo "✅ v3 changelog accessible"
|
||||
|
||||
git show v3-alpha:docs/src/content/docs/changelog.mdx | awk '
|
||||
/^## \[Unreleased\]/ { found=1; next }
|
||||
found && /^## / { exit }
|
||||
found && !/^$/ { print }
|
||||
' > v3_release_notes.md
|
||||
|
||||
echo "📝 v3 changelog content (first 10 lines):"
|
||||
head -10 v3_release_notes.md || echo "No content found"
|
||||
echo "Total lines: $(wc -l < v3_release_notes.md)"
|
||||
else
|
||||
echo "⚠️ v3 changelog not accessible from current context"
|
||||
fi
|
||||
|
||||
test-version-detection:
|
||||
name: Test Version Detection
|
||||
runs-on: ubuntu-latest
|
||||
needs: test-permissions
|
||||
if: needs.test-permissions.outputs.authorized == 'true'
|
||||
outputs:
|
||||
v2_current_version: ${{ steps.versions.outputs.v2_current }}
|
||||
v2_next_patch: ${{ steps.versions.outputs.v2_next_patch }}
|
||||
v2_next_minor: ${{ steps.versions.outputs.v2_next_minor }}
|
||||
v2_next_major: ${{ steps.versions.outputs.v2_next_major }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Test version detection logic
|
||||
id: versions
|
||||
run: |
|
||||
echo "🧪 Testing version detection..."
|
||||
|
||||
# Test v2 version parsing
|
||||
if [ -f "v2/cmd/wails/internal/version.txt" ]; then
|
||||
CURRENT_V2=$(cat v2/cmd/wails/internal/version.txt | sed 's/^v//')
|
||||
echo "Current v2 version: v$CURRENT_V2"
|
||||
echo "v2_current=v$CURRENT_V2" >> $GITHUB_OUTPUT
|
||||
|
||||
# Parse and increment
|
||||
IFS='.' read -ra VERSION_PARTS <<< "$CURRENT_V2"
|
||||
MAJOR=${VERSION_PARTS[0]}
|
||||
MINOR=${VERSION_PARTS[1]}
|
||||
PATCH=${VERSION_PARTS[2]}
|
||||
|
||||
PATCH_VERSION="v$MAJOR.$MINOR.$((PATCH + 1))"
|
||||
MINOR_VERSION="v$MAJOR.$((MINOR + 1)).0"
|
||||
MAJOR_VERSION="v$((MAJOR + 1)).0.0"
|
||||
|
||||
echo "v2_next_patch=$PATCH_VERSION" >> $GITHUB_OUTPUT
|
||||
echo "v2_next_minor=$MINOR_VERSION" >> $GITHUB_OUTPUT
|
||||
echo "v2_next_major=$MAJOR_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
echo "✅ Patch: v$CURRENT_V2 → $PATCH_VERSION"
|
||||
echo "✅ Minor: v$CURRENT_V2 → $MINOR_VERSION"
|
||||
echo "✅ Major: v$CURRENT_V2 → $MAJOR_VERSION"
|
||||
else
|
||||
echo "❌ v2 version file not found"
|
||||
fi
|
||||
|
||||
test-commit-analysis:
|
||||
name: Test Commit Analysis
|
||||
runs-on: ubuntu-latest
|
||||
needs: test-permissions
|
||||
if: needs.test-permissions.outputs.authorized == 'true'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Test commit analysis
|
||||
run: |
|
||||
echo "🧪 Testing commit analysis..."
|
||||
|
||||
# Get recent commits for testing
|
||||
echo "Recent commits:"
|
||||
git log --oneline -10
|
||||
|
||||
# Test conventional commit detection
|
||||
RECENT_COMMITS=$(git log --oneline --since="7 days ago")
|
||||
echo "Commits from last 7 days:"
|
||||
echo "$RECENT_COMMITS"
|
||||
|
||||
# Analyze for release type
|
||||
RELEASE_TYPE="patch"
|
||||
if echo "$RECENT_COMMITS" | grep -q "feat!\|fix!\|BREAKING CHANGE:"; then
|
||||
RELEASE_TYPE="major"
|
||||
elif echo "$RECENT_COMMITS" | grep -q "feat\|BREAKING CHANGE"; then
|
||||
RELEASE_TYPE="minor"
|
||||
fi
|
||||
|
||||
echo "✅ Detected release type: $RELEASE_TYPE"
|
||||
|
||||
test-summary:
|
||||
name: Test Summary
|
||||
runs-on: ubuntu-latest
|
||||
needs: [test-permissions, test-changelog-extraction, test-version-detection, test-commit-analysis]
|
||||
if: always()
|
||||
steps:
|
||||
- name: Print test results
|
||||
run: |
|
||||
echo "# 🧪 Nightly Release Workflow Test Results" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
if [ "${{ needs.test-permissions.result }}" == "success" ]; then
|
||||
echo "✅ **Permissions Test**: Passed" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **Permissions Test**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
if [ "${{ needs.test-changelog-extraction.result }}" == "success" ]; then
|
||||
echo "✅ **Changelog Extraction**: Passed" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **Changelog Extraction**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
if [ "${{ needs.test-version-detection.result }}" == "success" ]; then
|
||||
echo "✅ **Version Detection**: Passed" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Current v2: ${{ needs.test-version-detection.outputs.v2_current_version }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Next patch: ${{ needs.test-version-detection.outputs.v2_next_patch }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Next minor: ${{ needs.test-version-detection.outputs.v2_next_minor }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo " - Next major: ${{ needs.test-version-detection.outputs.v2_next_major }}" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **Version Detection**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
if [ "${{ needs.test-commit-analysis.result }}" == "success" ]; then
|
||||
echo "✅ **Commit Analysis**: Passed" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **Commit Analysis**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Note**: This was a dry-run test. No actual releases were created." >> $GITHUB_STEP_SUMMARY
|
||||
11
.github/workflows/test-simple.yml
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
name: Test Simple
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Test
|
||||
run: echo "Hello World"
|
||||
128
.github/workflows/unreleased-changelog-trigger.yml
vendored
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
name: Auto Release on Changelog Update
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- v3-alpha
|
||||
paths:
|
||||
- 'v3/UNRELEASED_CHANGELOG.md'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
dry_run:
|
||||
description: 'Run in dry-run mode (no actual release)'
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
check-permissions:
|
||||
name: Check Release Permissions
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
authorized: ${{ steps.check.outputs.authorized }}
|
||||
steps:
|
||||
- name: Check if user is authorized for releases
|
||||
id: check
|
||||
run: |
|
||||
# Only allow specific users to trigger releases
|
||||
AUTHORIZED_USERS="leaanthony"
|
||||
|
||||
if [[ "$AUTHORIZED_USERS" == *"${{ github.actor }}"* ]]; then
|
||||
echo "✅ User ${{ github.actor }} is authorized for releases"
|
||||
echo "authorized=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "❌ User ${{ github.actor }} is not authorized for releases"
|
||||
echo "authorized=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
trigger-release:
|
||||
name: Trigger v3-alpha Release
|
||||
permissions:
|
||||
contents: read
|
||||
runs-on: ubuntu-latest
|
||||
needs: check-permissions
|
||||
if: needs.check-permissions.outputs.authorized == 'true'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: v3-alpha
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.WAILS_REPO_TOKEN || github.token }}
|
||||
|
||||
- name: Check for unreleased changelog content
|
||||
id: changelog_check
|
||||
run: |
|
||||
echo "🔍 Checking UNRELEASED_CHANGELOG.md for content..."
|
||||
|
||||
cd v3
|
||||
# Check if UNRELEASED_CHANGELOG.md has actual content beyond the template
|
||||
if [ -f "UNRELEASED_CHANGELOG.md" ]; then
|
||||
# Use a simple check for actual content (bullet points starting with -)
|
||||
CONTENT_LINES=$(grep -E "^\s*-\s+[^[:space:]]" UNRELEASED_CHANGELOG.md | wc -l)
|
||||
if [ "$CONTENT_LINES" -gt 0 ]; then
|
||||
echo "✅ Found $CONTENT_LINES content lines in UNRELEASED_CHANGELOG.md"
|
||||
echo "has_content=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "ℹ️ No actual content found in UNRELEASED_CHANGELOG.md"
|
||||
echo "has_content=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
else
|
||||
echo "❌ UNRELEASED_CHANGELOG.md not found"
|
||||
echo "has_content=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Trigger nightly release workflow
|
||||
if: steps.changelog_check.outputs.has_content == 'true'
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.WAILS_REPO_TOKEN || github.token }}
|
||||
script: |
|
||||
const response = await github.rest.actions.createWorkflowDispatch({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
workflow_id: 'nightly-release-v3.yml',
|
||||
ref: 'v3-alpha',
|
||||
inputs: {
|
||||
force_release: 'true',
|
||||
dry_run: '${{ github.event.inputs.dry_run || "false" }}'
|
||||
}
|
||||
});
|
||||
|
||||
console.log('🚀 Successfully triggered nightly release workflow');
|
||||
console.log(`Workflow dispatch response status: ${response.status}`);
|
||||
|
||||
// Create a summary
|
||||
core.summary
|
||||
.addHeading('🚀 Auto Release Triggered')
|
||||
.addRaw('The v3-alpha release workflow has been automatically triggered due to changes in UNRELEASED_CHANGELOG.md')
|
||||
.addTable([
|
||||
[{data: 'Trigger', header: true}, {data: 'Value', header: true}],
|
||||
['Repository', context.repo.repo],
|
||||
['Branch', 'v3-alpha'],
|
||||
['Actor', context.actor],
|
||||
['Dry Run', '${{ github.event.inputs.dry_run || "false" }}'],
|
||||
['Force Release', 'true']
|
||||
])
|
||||
.addRaw('\n---\n*This release was automatically triggered by the unreleased-changelog-trigger workflow*')
|
||||
.write();
|
||||
|
||||
- name: No content found
|
||||
if: steps.changelog_check.outputs.has_content == 'false'
|
||||
run: |
|
||||
echo "ℹ️ No content found in UNRELEASED_CHANGELOG.md, skipping release trigger"
|
||||
echo "## ℹ️ No Release Triggered" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Reason:** UNRELEASED_CHANGELOG.md does not contain actual changelog content" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Action:** No release workflow was triggered" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "To trigger a release, add actual changelog entries to the UNRELEASED_CHANGELOG.md file." >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Unauthorized user
|
||||
if: needs.check-permissions.outputs.authorized == 'false'
|
||||
run: |
|
||||
echo "❌ User ${{ github.actor }} is not authorized to trigger releases"
|
||||
echo "## ❌ Unauthorized Release Attempt" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**User:** ${{ github.actor }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Action:** Release trigger was blocked due to insufficient permissions" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Only authorized users can trigger automatic releases via changelog updates." >> $GITHUB_STEP_SUMMARY
|
||||
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
|
||||
- name: Verify Changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v41
|
||||
uses: step-security/changed-files@3dbe17c78367e7d60f00d78ae6781a35be47b4a1 # v45.0.1
|
||||
with:
|
||||
files: |
|
||||
website/**/*.mdx
|
||||
|
|
|
|||
42
.github/workflows/v3-docs.yml
vendored
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
name: Deploy to GitHub Pages
|
||||
|
||||
on:
|
||||
# Trigger the workflow every time you push to the `main` branch
|
||||
# Using a different branch name? Replace `main` with your branch’s name
|
||||
push:
|
||||
branches: [v3-alpha]
|
||||
# Allows you to run this workflow manually from the Actions tab on GitHub.
|
||||
workflow_dispatch:
|
||||
|
||||
# Allow this job to clone the repo and create a page deployment
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.repository.fork == false
|
||||
steps:
|
||||
- name: Checkout your repository using git
|
||||
uses: actions/checkout@v4
|
||||
- name: Install, build, and upload your site output
|
||||
uses: withastro/action@v2
|
||||
with:
|
||||
path: docs
|
||||
node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 18. (optional)
|
||||
# package-manager: pnpm@latest # The Node package manager that should be used to install dependencies and build your site. Automatically detected based on your lockfile. (optional)
|
||||
|
||||
deploy:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||
54
.gitignore
vendored
|
|
@ -37,5 +37,57 @@ v2/cmd/wails/internal/commands/initialise/templates/testtemplates/
|
|||
/websitev3/site/
|
||||
/v3/examples/plugins/bin/testapp
|
||||
|
||||
# V3 Example binaries - ignore executables that match directory names
|
||||
/v3/examples/badge-custom/badge-custom
|
||||
/v3/examples/badge/badge
|
||||
/v3/examples/binding/binding
|
||||
/v3/examples/cancel-async/cancel-async
|
||||
/v3/examples/cancel-chaining/cancel-chaining
|
||||
/v3/examples/clipboard/clipboard
|
||||
/v3/examples/contextmenus/contextmenus
|
||||
/v3/examples/dev/dev
|
||||
/v3/examples/dialogs-basic/dialogs-basic
|
||||
/v3/examples/dialogs/dialogs
|
||||
/v3/examples/drag-n-drop/drag-n-drop
|
||||
/v3/examples/environment/environment
|
||||
/v3/examples/events-bug/events-bug
|
||||
/v3/examples/events/events
|
||||
/v3/examples/file-association/file-association
|
||||
/v3/examples/frameless/frameless
|
||||
/v3/examples/gin-example/gin-example
|
||||
/v3/examples/gin-routing/gin-routing
|
||||
/v3/examples/gin-service/gin-service
|
||||
/v3/examples/hide-window/hide-window
|
||||
/v3/examples/html-dnd-api/html-dnd-api
|
||||
/v3/examples/ignore-mouse/ignore-mouse
|
||||
/v3/examples/keybindings/keybindings
|
||||
/v3/examples/menu/menu
|
||||
/v3/examples/notifications/notifications
|
||||
/v3/examples/panic-handling/panic-handling
|
||||
/v3/examples/plain/plain
|
||||
/v3/examples/raw-message/raw-message
|
||||
/v3/examples/screen/screen
|
||||
/v3/examples/services/services
|
||||
/v3/examples/show-macos-toolbar/show-macos-toolbar
|
||||
/v3/examples/single-instance/single-instance
|
||||
/v3/examples/systray-basic/systray-basic
|
||||
/v3/examples/systray-custom/systray-custom
|
||||
/v3/examples/systray-menu/systray-menu
|
||||
/v3/examples/video/video
|
||||
/v3/examples/window-api/window-api
|
||||
/v3/examples/window-call/window-call
|
||||
/v3/examples/window-menu/window-menu
|
||||
/v3/examples/window/window
|
||||
/v3/examples/wml/wml
|
||||
|
||||
# Common binary names in examples
|
||||
/v3/examples/*/main
|
||||
/v3/examples/*/app
|
||||
/v3/examples/*/changeme
|
||||
/v3/examples/*/testbuild-*
|
||||
|
||||
# Temporary called mkdocs, should be renamed to more standard -website or similar
|
||||
/mkdocs-website/site
|
||||
/docs/site
|
||||
.aider*
|
||||
.cache
|
||||
.local
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
overrides:
|
||||
- files:
|
||||
- "**/*.md"
|
||||
- "**/*.mdx"
|
||||
options:
|
||||
printWidth: 80
|
||||
proseWrap: always
|
||||
|
|
|
|||
2
.tool-versions
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
golang 1.25.1
|
||||
nodejs 24.8.0
|
||||
16
AGENTS.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# Repository Guidelines
|
||||
|
||||
## Project Structure & Module Organization
|
||||
The repository hosts the current Wails tooling in `v3/`, the maintained v2 runtime in `v2/`, and shared assets under `assets/` and `pkg/`. CLI entrypoints live in `v3/cmd/wails3`, while reusable runtime code is grouped under `v3/internal/*` (platform integrations, packaging, templates) and `v3/pkg/*` (application, services, UI helpers). Example applications used for testing and documentation reside in `v3/examples`, with Docker build scripts and harnesses in `v3/test` and targeted regression suites in `v3/tests`. Documentation and site content are stored in `docs/` and `website/`; keep tutorial updates alongside related code changes.
|
||||
|
||||
## Build, Test, and Development Commands
|
||||
Run `task v3:install` to compile and install the v3 CLI locally, and `task v3:precommit` before submitting changes to execute `go test ./...` and apply repository formatters. Use `task v3:test:examples` for a full platform-agnostic build of every example, or scope work with `task v3:test:example:windows DIR=badge` (replace `badge` as needed). Markdown formatting is standardized with `task format:md`, and changelog automation is driven via `task contributors:update` when contributor metadata changes.
|
||||
|
||||
## Coding Style & Naming Conventions
|
||||
Go code must remain `gofmt`-clean with idiomatic package names (lowercase, no underscores) and exported API names following Go's PascalCase. Match existing directory naming by grouping platform-specific code under clearly named packages (e.g., `mac`, `w32`) and keep generator templates in `internal/templates`. Frontend or documentation updates should respect Prettier defaults; run `npx prettier --write "**/*.md"` or the Taskfile wrapper to stay consistent.
|
||||
|
||||
## Testing Guidelines
|
||||
Unit and integration tests accompany Go sources inside the nearest package; add new suites under `v3/tests` for regression coverage. Cross-platform build validation relies on the Taskfile matrix—`task test:examples:all` exercises macOS, Windows, and Linux Docker pipelines, while `task test:example:linux:docker DIR=<name>` verifies a single sample with architecture auto-detection. Prefer deterministic tests and clean up generated binaries (`testbuild-*`) after manual runs.
|
||||
|
||||
## Commit & Pull Request Guidelines
|
||||
Adopt conventional commits recognized by the release tooling (`feat:`, `fix:`, `chore:`, with `!` or `BREAKING CHANGE:` when necessary) so nightly pipelines classify versions correctly. Reference issues or discussion threads in the body, and update `v3/UNRELEASED_CHANGELOG.md` with concise entries under the appropriate heading. Pull requests should summarize scope, list validation commands executed (e.g., `task v3:precommit`), and include platform-specific notes or screenshots for UI-affecting work. Ensure CI passes and that new docs or samples link from the relevant navigation files in `docs/src/content` before requesting review.
|
||||
1
CNAME
Normal file
|
|
@ -0,0 +1 @@
|
|||
v3alpha.wails.io
|
||||
317
DEVELOPER_GUIDE.md
Normal file
|
|
@ -0,0 +1,317 @@
|
|||
# Wails v3 Developer Guide (Top-Level Overview)
|
||||
|
||||
This guide provides a technical, developer-focused overview of the Wails v3 codebase located under the `v3` directory. It is the start of a comprehensive series that will later dive into each package and file in detail. For now, it establishes orientation, architecture, responsibilities, and workflows so contributors have a reliable high-level map before we document every component thoroughly.
|
||||
|
||||
Scope: Only the `v3` directory is in scope for this guide.
|
||||
|
||||
Last updated: 2025-09-24
|
||||
|
||||
|
||||
## Goals of Wails v3
|
||||
|
||||
Wails lets you build desktop applications using Go for the backend and web technologies (HTML/CSS/JS) for the frontend, packaging them into a native desktop experience across platforms. Version 3 focuses on modular internal packages, improved runtime and tooling, and clearer boundaries between build-time and run-time responsibilities.
|
||||
|
||||
|
||||
## High-Level Architecture
|
||||
|
||||
- Command-line tooling (CLI): developer-facing entry points for building, generating, packaging, and inspecting Wails apps.
|
||||
- Internal libraries: build orchestration, runtime integration, OS abstractions, packaging, capabilities, templates, and utilities. These are mostly under `v3/internal` and not intended as public API.
|
||||
- Public Go packages: simple APIs for applications to use (e.g., `v3/pkg/application`, `v3/pkg/ui`, `v3/pkg/services`, etc.).
|
||||
- Runtime (desktop): the bridge between the Go app and the web frontend, with bindings, window control, events, and platform integrations.
|
||||
- Examples and tests: reference implementations and validation.
|
||||
|
||||
|
||||
## Directory Map (top-level under v3)
|
||||
|
||||
- `cmd/` — CLI entrypoints.
|
||||
- `wails3/` — The main Wails v3 CLI. Includes `main.go`, usage docs, and a prebuilt binary (when present in repo artifacts).
|
||||
|
||||
- `examples/` — Working sample apps demonstrating various capabilities.
|
||||
- Examples include, among others: drag-and-drop, raw message handling, etc. These show best practices and can be used to validate changes.
|
||||
|
||||
- `internal/` — Internal (non-public) packages used by the CLI and by build/runtime components.
|
||||
- `assetserver/` — Static file serving logic for development or build steps.
|
||||
- `buildinfo/` — Build metadata and version stamping.
|
||||
- `capabilities/` — Capabilities gating or feature flags across subsystems.
|
||||
- `changelog/` — Utilities for changelog parsing/validation.
|
||||
- `commands/` — Implementation of CLI subcommands and orchestration logic.
|
||||
- `dbus/` — D-Bus integration for Linux desktop features.
|
||||
- `debug/` — Debug utilities or dev-mode helpers.
|
||||
- `doctor/` — Environment diagnostics (e.g., checking toolchains).
|
||||
- `fileexplorer/` — File chooser/dialog logic beyond platform primitives.
|
||||
- `flags/` — Centralized command-line flag definitions and parsing helpers.
|
||||
- `generator/` — Code and project generators (scaffolding, bindings, etc.).
|
||||
- `github/` — GitHub integration (release automation or metadata helpers).
|
||||
- `go-common-file-dialog/` — Common file dialog wrappers (likely cross-platform helpers).
|
||||
- `hash/` — Hashing utilities for caching, integrity, or content addressing.
|
||||
- `operatingsystem/` — OS detection and OS-specific helpers.
|
||||
- `packager/` — Packaging/build pipelines to produce platform-specific bundles.
|
||||
- `runtime/` — Runtime glue for the desktop environment.
|
||||
- `desktop/` — Desktop runtime resources including the browser window bridge and TS/JS runtime.
|
||||
- `@wailsio/runtime/` — TypeScript source for the frontend runtime bridge (window and app bindings, event bus, etc.).
|
||||
- `s/` — Small internal helpers or shared primitives.
|
||||
- `service/` — Service abstractions and service lifecycle helpers used internally.
|
||||
- `signal/` — Signal handling (OS process signals).
|
||||
- `templates/` — Project and code templates (used by the generator and packager).
|
||||
- `term/`, `term2/` — Terminal rendering, progress, and rich text helpers.
|
||||
- `version/` — Versioning helpers shared across commands.
|
||||
|
||||
- `pkg/` — Public packages intended for application developers.
|
||||
- `application/` — Main application abstraction (app lifecycle, window management hooks, startup/shutdown).
|
||||
- `events/` — Event bus/interfaces for app<->frontend communication.
|
||||
- `icons/` — Icon helpers/types for application and window icons.
|
||||
- `mac/` — macOS-specific helpers.
|
||||
- `mcp/` — Platform or protocol utilities (exact scope to be detailed in the deep dive).
|
||||
- `services/` — Public service interfaces and service registration.
|
||||
- `ui/` — UI helpers and types exposed to apps.
|
||||
- `w32/` — Windows-specific helpers and bindings.
|
||||
|
||||
- `scripts/` — Maintenance or developer scripts used in CI or local workflows.
|
||||
- `validate-changelog.go` — Validates changelog format and rules.
|
||||
|
||||
- `tasks/` — Task-based workflow helpers (used by maintainers and CI).
|
||||
- `cleanup/`, `contribs/`, `events/`, `fix-bindings/`, `release/`, `sed/` — Per-task utilities and scripts.
|
||||
|
||||
- `test/`, `tests/`, `tooltest/` — Test suites, fixtures, and tools used for verifying functionality.
|
||||
|
||||
- `.task/`, `wep/` — Project tooling/configuration directories (to be detailed later as needed).
|
||||
|
||||
|
||||
## Build and Development Overview
|
||||
|
||||
- CLI usage: The `v3/cmd/wails3` command is the primary interface. Typical workflows include:
|
||||
- Project creation via templates (generator).
|
||||
- Development server and live reload for the frontend (assetserver, runtime dev helpers).
|
||||
- Building a production bundle and packaging for the target OS (packager).
|
||||
- Internal packages are not part of the public API contract and may change. Public Go APIs under `v3/pkg/` are maintained for application developers.
|
||||
- The desktop runtime bridges Go and the Web frontend via a JS/TS runtime (`internal/runtime/desktop/@wailsio/runtime`). This provides window controls, eventing, and invocation bridges to Go.
|
||||
|
||||
|
||||
## Key Data Flows (Conceptual)
|
||||
|
||||
1. Developer runs a CLI command (wails3) → CLI delegates to `internal/commands` and uses helpers under `internal/*` for build, generate, package, etc.
|
||||
2. The application code (using `v3/pkg/*`) defines the Go-side application, services, and event handlers.
|
||||
3. At runtime, the desktop bridge injects a JS runtime into the web app so frontend can call Go methods and subscribe to events. The Go-side emits events to the frontend via the runtime channel.
|
||||
4. Packaging uses `internal/packager` to produce OS-native bundles, using OS-specific helpers from `pkg/mac`, `pkg/w32`, etc., as needed.
|
||||
|
||||
|
||||
## Contributing Workflow (High-Level)
|
||||
|
||||
- Make small, focused changes. For cross-platform features, ensure Linux, macOS, and Windows implications are considered.
|
||||
- Run example apps under `v3/examples` to validate changes.
|
||||
- Use scripts under `v3/scripts` and tasks under `v3/tasks` where applicable (e.g., changelog validation or release workflows).
|
||||
- When modifying the runtime bridge, ensure TypeScript builds for `@wailsio/runtime` are up-to-date and integration-tested against example apps.
|
||||
|
||||
|
||||
## Next Steps in This Guide
|
||||
|
||||
This is the top-level overview. In subsequent iterations, we will deep-dive into every package and file in the `v3` directory with:
|
||||
- Detailed per-package responsibilities and structure.
|
||||
- File-by-file documentation including key types, functions, and data flow.
|
||||
- Build, test, and troubleshooting instructions for each component.
|
||||
|
||||
If you need a specific package documented next, please indicate which one, and we’ll start the in-depth coverage there.
|
||||
|
||||
|
||||
# Deep Dive: pkg/application
|
||||
|
||||
Scope: This section documents every file under v3/pkg/application and explains the end-to-end data flows for how an application is initialised and then run. It complements the top-level overview above.
|
||||
|
||||
Last reviewed: 2025-09-24
|
||||
|
||||
|
||||
Overview of the application package
|
||||
- Purpose: Provides the public API and core runtime glue for building and running a Wails desktop application. It owns the App type and orchestrates windows, menus, dialogs, system trays, eventing, and platform-specific main loops.
|
||||
- Key types:
|
||||
- App: The core application object exposed to developers.
|
||||
- Window/WebviewWindow: Represents a browser-hosted UI Window (WebView2 on Windows, WKWebView on macOS, WebKitGTK on Linux).
|
||||
- Managers: Subsystems that manage windows, menus, dialogs, events, clipboard, screens, environment, system trays, etc.
|
||||
- Options: Configuration used to create the App and its initial windows and services.
|
||||
- EventProcessor and event contexts: Abstractions for custom events and application/window event flows.
|
||||
|
||||
|
||||
Lifecycle and data flow (initialisation -> run -> shutdown)
|
||||
1) Construction via New(options)
|
||||
- File: application.go (New)
|
||||
- Actions:
|
||||
- Merge defaults (mergeApplicationDefaults) and normalize Options (application_options.go).
|
||||
- Construct the App: allocate fields, set logger, prepare asset serving (middleware, asset handlers), store any initial services from options.
|
||||
- Prepare developer tooling (dev vs production variants in application_dev.go/application_production.go). In dev, static server may proxy to dev server; in production, use bundled assets.
|
||||
- Defer platform-specific initialization; platform-specific App (platformApp) is created later in Run() via newPlatformApp(...) implemented per-OS.
|
||||
|
||||
2) App.init()
|
||||
- File: application.go (init method on App)
|
||||
- Actions:
|
||||
- Create root context (a.ctx) and cancellation function.
|
||||
- Instantiate and wire all managers:
|
||||
- newWindowManager, newContextMenuManager, newKeyBindingManager, newBrowserManager, newEnvironmentManager, newDialogManager, newEventManager, newMenuManager, newScreenManager, newClipboardManager, newSystemTrayManager.
|
||||
- Initialize internal maps: windows, systemTrays, contextMenus, keyBindings, listener registries.
|
||||
|
||||
3) Pre-run hooks and service startup
|
||||
- File: application.go (Run -> preRun -> service startup)
|
||||
- Actions:
|
||||
- preRun() executes any post-creation hooks (e.g., build/runtime settling, menu prep, assetserver finalization). If this fails, Run aborts.
|
||||
- Services provided in Options.Services are started in order (startupService). On failure, an error is returned and started services are tracked for orderly shutdown.
|
||||
|
||||
4) Platform App creation
|
||||
- File: application.go (Run)
|
||||
- Calls newPlatformApp(a) which selects implementation based on GOOS:
|
||||
- application_windows.go -> windowsApp
|
||||
- application_darwin.go -> darwinApp (plus associated Objective-C glue .m/.h for Cocoa/WKWebView)
|
||||
- application_linux.go -> gtkApp (with CGO or purego variants)
|
||||
- The platformApp implements methods like run(), init(), setApplicationMenu(), setIcon(), show/hide, main-thread dispatch, window/tray registration, etc.
|
||||
|
||||
5) Event pump setup (concurrency and channels)
|
||||
- File: application.go (Run)
|
||||
- Starts goroutines to drain and dispatch internal channels:
|
||||
- applicationEvents -> a.Event.handleApplicationEvent
|
||||
- windowEvents -> a.handleWindowEvent
|
||||
- webviewRequests -> a.handleWebViewRequest
|
||||
- windowMessageBuffer -> a.handleWindowMessage
|
||||
- windowKeyEvents -> a.handleWindowKeyEvent
|
||||
- windowDragAndDropBuffer -> a.handleDragAndDropMessage
|
||||
- menuItemClicked -> a.Menu.handleMenuItemClicked
|
||||
- These goroutines run for the lifetime of the app and route messages from the platform layer and WebView bridges into App managers and windows.
|
||||
|
||||
6) Final run
|
||||
- File: application.go (Run)
|
||||
- Marks a.running = true, drains any a.pendingRun tasks scheduled before the run loop started, sets the application menu (darwin) and icon (if provided), and then calls a.impl.run() which enters the platform event loop (message pump on Windows, CFRunLoop on macOS, GTK main loop on Linux).
|
||||
|
||||
7) Shutdown
|
||||
- File: application.go (cleanup, shutdownServices, Quit)
|
||||
- Cancel root context, tear down windows/system trays/menus, stop services in reverse order, and exit the platform loop. Fatal errors use handleFatalError to log and os.Exit(1).
|
||||
|
||||
|
||||
File-by-file guide (v3/pkg/application)
|
||||
Note: Brief purpose for each file and how it participates in init/run and data flows.
|
||||
|
||||
Core App and options
|
||||
- application.go: Defines App and its lifecycle. Key functions/methods: New, init (method), Run, cleanup, Quit, event and message handlers, Hide/Show, SetIcon, runOrDeferToAppRun. Creates managers and coordinates inter-manager communication via channels and callbacks.
|
||||
- application_options.go: Defines Options for configuring the App: window defaults, asset options, logger, middlewares, platform-specific options (MacOptions, WindowsOptions, LinuxOptions), and asset server helpers. Contains middleware chaining and helpers for serving assets from fs.FS.
|
||||
- services.go: Declares Service interface and service lifecycle integration with App (startupService, shutdownServices) and registration via App.RegisterService.
|
||||
- environment.go / environment_manager.go: Detects and exposes environment info to the app (dev/prod, capabilities, platform variables), often referenced when preparing runtime flags and window defaults.
|
||||
- errors.go: Error types, including FatalError used by handleFatalError in App.
|
||||
- panic_handler.go: Centralized panic recovery where goroutines defer handlePanic() to avoid crashing the app silently.
|
||||
- mainthread*.go: Utilities to ensure code runs on the GUI main thread when required by the OS toolkit; used by platformApp implementations and App.dispatchOnMainThread.
|
||||
- messageprocessor*.go: Message router between WebView frontend and Go backend; different files focus on different domains (application, window, dialogs, clipboard, context menus, screens, system). They parse inbound messages (e.g., from JS runtime) and call into managers/App methods.
|
||||
- bindings.go: Handles Go<->JS binding registration and call routing, including returning values/errors to the frontend via WebView.
|
||||
|
||||
Platform-specific app implementations
|
||||
- application_windows.go: windowsApp implements platformApp for Windows. Responsibilities:
|
||||
- init(): OS integration (DPI awareness, COM init as needed via WebView2 loader), building application menu, creating hidden “application” window for message routing if needed.
|
||||
- run(): Enters the Windows message loop, dispatches messages to wndProc, and integrates with WebView2 (go-webview2).
|
||||
- wndProc(): Translates native window messages into Wails events: focus, resize, menu select, accelerator keys, system tray clicks, drag/drop, etc., forwarding into channels consumed by App.Run goroutines.
|
||||
- setApplicationMenu(), setIcon(), show/hide, registration of windows and system trays.
|
||||
- logPlatformInfo() and platformEnvironment() provide environment metadata used during startup.
|
||||
- application_darwin.go and related Objective-C files (.h/.m): darwinApp uses Cocoa and WKWebView. Objective-C delegate files integrate with NSApplication, NSWindow, menus, and app activation policy; bridge callbacks enqueue events into Go channels.
|
||||
- application_linux.go plus linux_cgo.go/linux_purego.go: GTK-based implementation; CGO variant integrates with GTK main loop and dialogs; purego variant offers a fallback depending on build tags.
|
||||
- application_dev.go / application_production.go: Build-tagged files that adjust behavior for development vs production (e.g., logger defaults, asset server wiring, runtime flags). logger_dev*.go/logger_prod.go customize logging sinks by target OS and mode.
|
||||
|
||||
Windows/macOS/Linux specific helpers
|
||||
- keys*.go: Keyboard key codes and modifier mappings per OS; used to parse accelerators and handle key bindings.
|
||||
- dialogs*.go: Platform-specific dialog implementations (message box, file open/save) backing the cross-platform dialogs.go facade.
|
||||
- clipboard*.go and clipboard_manager.go: Clipboard APIs per OS.
|
||||
- screen_*.go and screenmanager.go: Screen enumeration, DPI/scale factors, active screen selection; used when positioning windows.
|
||||
- systemtray_*.go and system_tray_manager.go: System tray icon/menu management; events funneled through channels to App and Menu managers.
|
||||
|
||||
Windowing: webview window and options
|
||||
- webview_window.go: The core window abstraction backed by a webviewWindowImpl (implemented per-OS). Responsibilities:
|
||||
- Window creation via NewWindow(options) after App is created.
|
||||
- Eventing: WindowEvent and listener registration (OnWindowEvent, RegisterHook), mapping of events to callbacks.
|
||||
- Lifecycle methods: Show/Hide, Run (window-level), Close/Destroy, Focus, Resize/Move, Fullscreen/Maximise/Minimise, Zoom, ContentProtection, Frameless toggling, DevTools (per OS), ExecJS, SetHTML/URL, printing.
|
||||
- Input handling: processKeyBinding and HandleKeyEvent for accelerators; integrates with menu accelerator mappings.
|
||||
- Messaging bridge: HandleMessage (routes call responses and RPC from JS), DialogResponse/CallResponse, drag-and-drop (HandleDragAndDropMessage), context menus.
|
||||
- Internal queues: dispatchWindowEvent, isDestroyed checks, destroyed state management.
|
||||
- webview_window_options.go: Defines WebviewWindowOptions, styling and behavior (title, size, min/max constraints, position, background color, frameless, URL/HTML/Assets, debug flags, dev tools, zoom policy, theme, user agent, drag regions, etc.). Also includes GPU policy and per-OS defaults. Options feed directly into platform window creation.
|
||||
- webview_window_* per-OS files: Implement webviewWindowImpl for each platform. They translate cross-platform window API to native toolkit calls and send back events via channels (e.g., windowEvents, windowMessageBuffer, windowKeyEvents).
|
||||
- window.go and window_manager.go: The common Window interface and its manager. The manager tracks windows by ID, exposes Find/All/Focused, and routes broadcast events.
|
||||
|
||||
Menus, roles, and accelerators
|
||||
- menu.go/menu_darwin.go/menu_linux.go/menu_windows.go: Cross-platform Menu representation with platform renderers. Supports app menu (macOS), window menus, and menu bar visibility.
|
||||
- menuitem.go and family: MenuItem definition, roles, selectors (macOS), per-OS renderers. menuitem_roles.go defines standard roles (Copy, Paste, Quit, etc.).
|
||||
- roles*.go: Dev vs production role sets.
|
||||
- popupmenu_windows.go and context_menu_manager.go: Context menu helpers and manager lifecycle.
|
||||
- key_binding_manager.go: Manages registration of accelerators (e.g., "CmdOrCtrl+Shift+P") and dispatches to window/menu handlers.
|
||||
|
||||
Dialogs
|
||||
- dialogs.go: Cross-platform API for dialogs. Provides MessageDialog, OpenFileDialog, SaveFileDialog with builder-style options; delegates to per-OS implementations via messageDialogImpl/openFileDialogImpl/saveFileDialogImpl.
|
||||
- dialogs_* per-OS: Bridge to native dialog toolkits (NSAlert/NSSavePanel on macOS, IFileDialog/MessageBox on Windows, GTK dialogs on Linux).
|
||||
|
||||
Eventing
|
||||
- events.go: Custom event system for the application package. Provides:
|
||||
- CustomEvent (name, data, cancellation) and ApplicationEvent/WindowEvent wrappers with Context() access to typed event contexts.
|
||||
- EventProcessor to register listeners (On/Once/OnMultiple), hooks, and to Emit events. Safe for concurrent use via sync primitives.
|
||||
- Bridges to pkg/events for enum types (ApplicationEventType, WindowEventType) used throughout.
|
||||
- context_application_event.go, context_window_event.go: Define typed context payloads for app/window events passed to listeners (e.g., theme change info, file open URL, window IDs).
|
||||
- events_common_*.go and event_manager.go: Glue code that maps platform events to high-level events and exposes App.Event API used by apps and internal subsystems.
|
||||
|
||||
Miscellaneous utilities
|
||||
- browser_manager.go: Tracks browser/webview state across windows; used by certain operations that need to coordinate with the web runtime.
|
||||
- image.go: Image helpers (e.g., RGBA), icons.
|
||||
- path.go: Small helpers for path normalization when interacting with OS file dialogs or asset paths.
|
||||
- urlvalidator.go: Validates URLs provided for window content (security and correctness). Unit tests in urlvalidator_test.go.
|
||||
- single_instance*.go: Optional single-instance enforcement per OS; integrates with platform IPC or file locks.
|
||||
- systemtray.go: Cross-platform SystemTray API given to app developers; platform-specific implementations in systemtray_*.go.
|
||||
- clipboard.go: Cross-platform Clipboard API facade; platform-specific glue in clipboard_*.go.
|
||||
- logger_dev*.go/logger_prod.go: Logging helpers per build mode and OS.
|
||||
- TODO.md: Notes for maintainers.
|
||||
|
||||
|
||||
Detailed init/run sequence with call graph highlights
|
||||
- App creation:
|
||||
1. application.New(options)
|
||||
- Merges defaults; stores Options; sets up assets/middleware stack; chooses dev/prod behaviors; prepares logger.
|
||||
- Does NOT start platform loop yet.
|
||||
2. App.init() (method) is called by New internally to initialise managers and state.
|
||||
|
||||
- Run startup (application.go: Run):
|
||||
3. Guard against double Run; mark starting; arrange context cancellation on failure.
|
||||
4. preRun(): perform any post-construction checks and assetserver finalisation.
|
||||
5. Create platform app: a.impl = newPlatformApp(a) -> application_{os}.go
|
||||
- Platform impl may do platform-specific pre-main-loop init in impl.init().
|
||||
6. Start services: for each options.Service, a.startupService(service) and record for shutdown order.
|
||||
7. Start event pumps: spin goroutines to drain internal channels and dispatch to managers and windows (see channels list above).
|
||||
8. Flip a.running = true and execute any pending runnables queued before Run (runOrDeferToAppRun).
|
||||
9. Apply app-level UI state: set application menu (macOS), set icon if provided.
|
||||
10. Enter platform loop: return a.impl.run(). From here, the native main loop owns the thread and dispatches native events that are bridged back into Go via callbacks and channels.
|
||||
|
||||
- Runtime interactions:
|
||||
- Window creation: NewWindow(options) constructs a WebviewWindow, invokes platform creation, and registers it with WindowManager and platformApp. Events from native layer (resize, focus, key) become messages in windowEvents/windowMessageBuffer/windowKeyEvents and are dispatched by App handlers to per-window callbacks.
|
||||
- Dialogs: The public dialog builders call through to per-OS implementations; responses are sent back via DialogResponse/DialogError into the originating Window.
|
||||
- Menus and accelerators: Menu items with accelerators are registered with KeyBindingManager. Native key events are turned into accelerator strings per-OS (keys_*.go) and routed back to WebviewWindow.processKeyBinding.
|
||||
- Custom events: App.Event.Emit(CustomEvent) dispatches to registered listeners and also to windows (DispatchWailsEvent) so frontends subscribed via the JS runtime receive them.
|
||||
|
||||
- Shutdown:
|
||||
- Triggered by App.Quit(), window close that results in shouldQuit() returning true, or fatal errors.
|
||||
- App.cleanup() tears down windows, trays, menus, and services in order; cancels root context; releases native resources via platformApp.destroy().
|
||||
|
||||
|
||||
Data channels and queues (core ones referenced in application.go)
|
||||
- applicationEvents: carries ApplicationEvent to App.Event handler.
|
||||
- windowEvents: carries internal windowEvent to App.handleWindowEvent which locates the Window and emits a typed WindowEvent.
|
||||
- webviewRequests: transports webview asset HTTP requests to the asset server pipeline (headers, middleware, handlers).
|
||||
- windowMessageBuffer: messages from webview to window (RPC responses, console/log, menu clicks, etc.).
|
||||
- windowKeyEvents: key accelerator strings per window; processed by WebviewWindow to run actions or menu accelerators.
|
||||
- windowDragAndDropBuffer: drag-and-drop messages containing filenames and drop-zone details; dispatched to the destination window.
|
||||
- menuItemClicked: menu item selection IDs enqueued by platform menu handlers and dispatched to Menu manager.
|
||||
|
||||
|
||||
How to trace the flow yourself
|
||||
- Set breakpoints in application.go Run() and platform newPlatformApp(...) to observe startup.
|
||||
- On Windows, observe application_windows.go run() and wndProc() to see message dispatch into channels.
|
||||
- Create a simple Example (see v3/examples) and instrument NewWindow() and WebviewWindow.HandleMessage() to see frontend<->backend calls.
|
||||
- Enable dev logging (logger_dev*.go) to see debug lines emitted when events and drag-and-drop messages are processed.
|
||||
|
||||
|
||||
Practical usage pattern (developer API surface)
|
||||
- Create and configure the app:
|
||||
- app := application.New(application.Options{ /* set windows, assets, menu, services, etc. */ })
|
||||
- mainWindow := application.NewWindow(webview_window_options)
|
||||
- mainWindow.Show()
|
||||
- return app.Run()
|
||||
- Register services via app.RegisterService(...) before Run().
|
||||
- Use app.Event.On/Once to register for application events (ApplicationStarted, ThemeChanged, etc.).
|
||||
- Use window.OnWindowEvent to subscribe to per-window events.
|
||||
- Use dialogs via application.InfoDialog()/OpenFileDialog()/SaveFileDialog(), etc.
|
||||
|
||||
This deep dive should equip you to understand and trace how an application is initialised and run across platforms within the v3/pkg/application package.
|
||||
45
DND_ANALYSIS.md
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# Drag-and-Drop Analysis (Windows Focus)
|
||||
|
||||
## Overview
|
||||
- Wails v3 supports two drag-and-drop surfaces when `EnableDragAndDrop` is set: a native window-level file drop channel and HTML drag/drop within the embedded webview. You can see the end-to-end flow in `v3/pkg/application/webview_window_windows.go` (native bridge) and `v3/internal/runtime/desktop/@wailsio/runtime/src/window.ts` (runtime dispatcher).
|
||||
- Native drops rely on a custom `IDropTarget` implementation that gathers files/coordinates from Win32, pushes them through the Wails event system, and fan out as `events.Common.WindowDropZoneFilesDropped` with enriched context (`DropZoneDetails`, attribute map, coordinates).
|
||||
- Pure HTML drag/drop (e.g. `v3/examples/html-dnd-api`) is handled entirely by the browser layer; Wails only needs to stay out of the way so standard DOM APIs operate normally.
|
||||
|
||||
## Native/Go Pipeline
|
||||
1. When a window is created with `EnableDragAndDrop`, line ~1948 of `v3/pkg/application/webview_window_windows.go` instantiates `w32.NewDropTarget()` and (optionally) calls `chromium.AllowExternalDrag(false)` to disable WebView2’s built-in file handling.
|
||||
2. `EnumChildWindows` registers the COM drop target against every current child HWND. The callbacks (`OnEnter`, `OnOver`, `OnLeave`, `OnDrop`) emit Windows-specific events (`events.Windows.WindowDragEnter` etc.) via `w.parent.emit`, so listeners can react even before files are delivered.
|
||||
3. `DropTarget.Drop` (see `v3/pkg/w32/idroptarget.go:69-140`) extracts filenames from the `IDataObject`, then hands control back to the window impl. Coordinates arrive as screen pixels (`POINT`), so `OnDrop` converts to window-relative coordinates and then calls `convertWindowToWebviewCoordinates` (lines ~1908-1990). Finally `InitiateFrontendDropProcessing` (in `v3/pkg/application/webview_window.go:1484-1515`) formats a JS call: `window.wails.Window.HandlePlatformFileDrop([...], x, y)`.
|
||||
4. `MessageProcessor` case `WindowDropZoneDropped` (`v3/pkg/application/messageprocessor_window.go:430-488`) decodes the payload that the runtime posts back, wraps it in `DropZoneDetails`, and pushes it through the buffered `windowDragAndDropBuffer`. `App.handleDragAndDropMessage` picks it up and forwards to `WebviewWindow.HandleDragAndDropMessage`, which attaches dropped files + drop-zone metadata to the `WindowEventContext`.
|
||||
5. The consumer API is the `events.Common.WindowDropZoneFilesDropped` event. The drag-n-drop example shows how to subscribe (`v3/examples/drag-n-drop/main.go:109-158`) and propagate to the frontend via custom events.
|
||||
|
||||
## Runtime/JS Behaviour
|
||||
- `@wailsio/runtime/src/window.ts:538-680` controls the frontend side. `HandlePlatformFileDrop` locates a drop target using `document.elementFromPoint` and `closest([data-wails-dropzone])`; if nothing qualifies it returns early, so native drops that miss a registered dropzone never reach Go.
|
||||
- The runtime maintains hover styling by tracking `dragenter/over/leave` on `document.documentElement` and toggling `wails-dropzone-hover`. This is how the example achieves live highlighting.
|
||||
- A legacy helper still exists: `System.HandlePlatformFileDrop` in `@wailsio/runtime/src/system.ts:159-184` marshals a different payload and calls method id `ApplicationFilesDroppedWithContext`, but there is no matching handler in `messageprocessor_application.go`. That means any codepath that invokes it would receive an HTTP 400/500.
|
||||
- The window runtime bundles `drag.ts`, which manages `--wails-draggable` regions so window dragging/resizing does not swallow pointer events. Developers must ensure dropzones are not also marked draggable.
|
||||
|
||||
## Example Insights
|
||||
- `v3/examples/drag-n-drop/assets/index.html` annotates folders with `data-wails-dropzone` and demonstrates how attributes flow through to Go (`DropZoneDetails.Attributes`). It also shows that the frontend expects `dropX/dropY` in CSS pixels, which helps when validating coordinate transforms.
|
||||
- `v3/examples/html-dnd-api` confirms standard HTML DnD works without the native bridge; it is a useful regression test when tweaking `drag.ts` so pointer suppression does not break DOM events.
|
||||
|
||||
## Potential Bug Hotspots
|
||||
- **Window-level drops ignored** - `window.ts:554-569` bails if no dropzone is discovered, so the documented `WindowFilesDropped` event never fires. Users expecting “drop anywhere” support lose file payloads entirely.
|
||||
- **Coordinate scaling** - `convertWindowToWebviewCoordinates` (`webview_window_windows.go:1908-1994`) computes offsets using physical pixels but never converts to WebView2 DIPs. On mixed-DPI or >100% scaling setups, `elementFromPoint` will query the wrong DOM position.
|
||||
- **Drop target lifecycle** - `EnumChildWindows` runs only once during initialisation. WebView2 can spawn new `Chrome_RenderWidgetHostHWND` instances on navigation or GPU process resets, leaving them unregistered and breaking drops until the app restarts.
|
||||
- **OLE cleanup** - `DropTarget.Drop` never calls `w32.DragFinish` after `DragQueryFile`. Windows docs recommend doing so to release HDROP resources; skipping it risks leaks on repeated drops.
|
||||
- **Stale runtime API** - `System.HandlePlatformFileDrop` references a non-existent backend method (`messageprocessor_application.go` lacks case 100). Any future JS that follows the generated docs will fail at runtime.
|
||||
- **Backpressure risk** - `windowDragAndDropBuffer` (channel size 5) blocks the HTTP handler if event consumers stall. Heavy processing in listeners could cause the runtime call to hang and, on Windows, freeze the drag cursor until the fetch resolves.
|
||||
|
||||
## Improvement Opportunities
|
||||
1. Emit a fallback `WindowFilesDropped` event directly from `DropTarget.OnDrop` when `HandlePlatformFileDrop` declines the payload, preserving drop-anywhere behaviour.
|
||||
2. Introduce DPI-aware coordinate conversion (use `globalApplication.Screen.PhysicalToDipPoint`) before invoking `elementFromPoint`.
|
||||
3. Re-run `RegisterDragDrop` whenever a new WebView child window appears (CoreWebView2 `FrameCreated` / `NewBrowserVersionAvailable` callbacks) and on navigation completions.
|
||||
4. Either wire up the `ApplicationFilesDroppedWithContext` method or remove the `System.HandlePlatformFileDrop` export to avoid misleading integrators.
|
||||
5. Add integration tests that exercise drops on high-DPI displays and across multiple monitors using the drag-n-drop example as a harness.
|
||||
6. Consider surfacing drop-target state (e.g., active element id) via diagnostic logging so Windows reports can be correlated without attaching a debugger.
|
||||
|
||||
## Open Questions
|
||||
- Do we need to respect WebView2’s native `AllowExternalDrop(true)` when `EnableDragAndDrop` is disabled, or should we expose both behaviours concurrently?
|
||||
- How should conflicting CSS states (`--wails-draggable` vs `data-wails-dropzone`) be resolved? Current logic leaves it up to the developer, but documenting or enforcing precedence could prevent accidental suppression.
|
||||
- Can we guarantee that `elementFromPoint` is safe when overlays or transparent windows are involved, or do we need hit-testing improvements using `elementsFromPoint`?
|
||||
- Would it be safer to move drop processing entirely to Go (dispatching both window-wide and targeted events) and keep JS solely for hover styling?
|
||||
246
DND_ISSUES.md
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
# Wails Drag and Drop Issues Report
|
||||
|
||||
## Summary
|
||||
This report compiles all drag and drop related issues found in Wails v3 GitHub repository. The issues span across multiple platforms (Windows, macOS, Linux) and various versions of Wails.
|
||||
|
||||
---
|
||||
|
||||
## Issue #1: [V3] Drag-and-drop broken on Windows since alpha 19
|
||||
|
||||
**Title:** [V3] Drag-and-drop broken on windows since alpha 19
|
||||
**Platform:** Windows 10
|
||||
**Reported:** 2024-08-09
|
||||
**Location:** GitHub
|
||||
**Reporter:** xob0t
|
||||
**Link:** https://github.com/wailsapp/wails/issues/4489
|
||||
|
||||
**Summary:** No drag and drop events are triggered on the Go side in Wails v3 alpha 20+. The issue appears to have been introduced by PR #4318.
|
||||
|
||||
**Reproduction:**
|
||||
1. Run dnd example on Windows
|
||||
2. Observe that no DnD events are triggered
|
||||
|
||||
**System:** Windows 10 Pro, Wails v3.0.0-alpha.20, AMD Ryzen 5 5600X, NVIDIA GeForce RTX 3070
|
||||
|
||||
---
|
||||
|
||||
## Issue #2: Windows 10 doesn't receive drag and drop events on the backend
|
||||
|
||||
**Title:** Windows 10 doesn't receive drag and drop events on the backend
|
||||
**Platform:** Windows 10
|
||||
**Reported:** 2025-01-07
|
||||
**Location:** GitHub
|
||||
**Reporter:** makew0rld
|
||||
**Link:** https://github.com/wailsapp/wails/issues/3985
|
||||
|
||||
**Summary:** Backend drop handler registered with `runtime.OnFileDrop` never gets executed when dropping files on Windows 10, though JavaScript drop events do fire. The event is not being propagated to the backend properly.
|
||||
|
||||
**Reproduction:**
|
||||
1. Clone https://github.com/makew0rld/wails-issue-3985
|
||||
2. Build for Windows: `wails build -platform windows/amd64 -windowsconsole -debug`
|
||||
3. Open the .exe in Windows
|
||||
4. Open web console using right-click menu
|
||||
5. Drag in a file
|
||||
6. Observe nothing appears in backend console, but drop event appears in web console
|
||||
|
||||
**System:** Built on Arch Linux, tested on Windows 10 VM, Wails v2.9.2
|
||||
|
||||
---
|
||||
|
||||
## Issue #3: [v3] [mac] drag n drop does not work as expected after resizing window
|
||||
|
||||
**Title:** [v3] [mac] drag n drop does not work as expected after resizing window
|
||||
**Platform:** macOS
|
||||
**Reported:** 2024-09-12
|
||||
**Location:** GitHub
|
||||
**Reporter:** Etesam913
|
||||
**Link:** https://github.com/wailsapp/wails/issues/3743
|
||||
|
||||
**Summary:** On macOS, after resizing the window, drag and drop usually gets rejected when trying to drag a file into the window.
|
||||
|
||||
**Reproduction:**
|
||||
1. `git checkout v3-alpha`
|
||||
2. `cd v3/examples/drag-n-drop`
|
||||
3. `go run main.go`
|
||||
4. Resize window
|
||||
5. Drag file into window
|
||||
6. File gets rejected
|
||||
|
||||
**System:** macOS 15.0, Apple M2, Wails v3.0.0-alpha.6
|
||||
|
||||
---
|
||||
|
||||
## Issue #4: Webview failed to set AllowExternalDrag to false on Win 10
|
||||
|
||||
**Title:** Webview failed to set AllowExternalDrag to false on Win 10 (after cross compile on macOS)
|
||||
**Platform:** Windows 10
|
||||
**Reported:** 2024-09-26
|
||||
**Location:** GitHub
|
||||
**Reporter:** barats
|
||||
**Link:** https://github.com/wailsapp/wails/issues/3782
|
||||
|
||||
**Summary:** Two main issues: 1) WebView fails to set AllowExternalDrag to false, causing WebView to automatically open dragged files. 2) Backend `runtime.OnFileDrop` doesn't work - no events are triggered.
|
||||
|
||||
**Reproduction:**
|
||||
1. Build windows/amd64 app on macOS
|
||||
2. Move .exe files to Win10 and run
|
||||
3. Drag and drop files into app window
|
||||
4. WebView DnD not disabled, backend events not called
|
||||
|
||||
**System:** Built on macOS 15.0, tested on Windows 10, Wails v2.9.2
|
||||
|
||||
---
|
||||
|
||||
## Issue #5: [v2] Files DragAndDrop bugs
|
||||
|
||||
**Title:** [v2] Files DragAndDrop bugs
|
||||
**Platform:** Linux (Ubuntu)
|
||||
**Reported:** 2024-06-23
|
||||
**Location:** GitHub
|
||||
**Reporter:** Vovan-VE
|
||||
**Link:** https://github.com/wailsapp/wails/issues/3563
|
||||
|
||||
**Summary:** Two issues: 1) When only `EnableFileDrop: true`, every D'n'D triggers an `OnDomReady` event. 2) When `EnableFileDrop: true, DisableWebViewDrop: true`, D'n'D doesn't work at all for files.
|
||||
|
||||
**Reproduction:**
|
||||
```go
|
||||
func (a *App) domReady(ctx context.Context) {
|
||||
runtime.OnFileDropOff(ctx)
|
||||
runtime.LogInfof(ctx, "DOM READY -------------------------------\n%+v", errors.New("WTF?"))
|
||||
runtime.OnFileDrop(ctx, a.onFileDrop)
|
||||
}
|
||||
|
||||
func (a *App) onFileDrop(x, y int, paths []string) {
|
||||
runtime.LogInfof(a.ctx, "drop files: %#v\n%+v", paths, errors.New("WTF?"))
|
||||
}
|
||||
```
|
||||
|
||||
**System:** Ubuntu 22.04, AMD Ryzen 9 7950X, Wails v2.9.1 and v2.9.2
|
||||
|
||||
---
|
||||
|
||||
## Issue #6: File drag and drop displays file in Linux WebKit
|
||||
|
||||
**Title:** File drag and drop displays file in Linux WebKit
|
||||
**Platform:** Linux
|
||||
**Reported:** 2024-08-17
|
||||
**Location:** GitHub
|
||||
**Reporter:** makew0rld
|
||||
**Link:** https://github.com/wailsapp/wails/issues/3686
|
||||
|
||||
**Summary:** When dragging and dropping a file onto the Window, the `OnFileDrop` handler runs successfully, but the entire GUI is replaced with a view of the file if the browser supports it (e.g., images, PDFs). This makes the dropped file unusable as all UI is gone.
|
||||
|
||||
**Reproduction:**
|
||||
1. Enable file dropping and add a simple handler
|
||||
2. Try and drop an image file with WebKit on Linux
|
||||
3. Observe the UI get replaced with a view of the image
|
||||
|
||||
**System:** Arch Linux, Intel Core i7-1165G7, Wails v2.9.1
|
||||
|
||||
**Note:** Issue was closed on 2025-08-02 with a workaround involving preventDefault() on drop and dragover events.
|
||||
|
||||
---
|
||||
|
||||
## Issue #7: Drag And Drop "wails-drop-target-active" class issue
|
||||
|
||||
**Title:** Drag And Drop "wails-drop-target-active" class is only applied if cssDropProperty is set via raw `style`
|
||||
**Platform:** Windows
|
||||
**Reported:** 2025-07-13
|
||||
**Location:** GitHub
|
||||
**Reporter:** riannucci
|
||||
**Link:** https://github.com/wailsapp/wails/issues/4419
|
||||
|
||||
**Summary:** `OnFileDrop` does not apply the `wails-drop-target-active` class unless `--wails-drop-target: drop` is set directly via the element's `style` attribute, even though the `OnFileDrop` callback does fire.
|
||||
|
||||
**Reproduction:**
|
||||
1. Set up a new wails project
|
||||
2. Set EnableFileDrop in Application Options
|
||||
3. Add CSS with `--wails-drop-target: drop` in stylesheet
|
||||
4. Run app and drag file to target element
|
||||
5. Base path gets set but element doesn't change styles
|
||||
|
||||
**System:** Windows 10/11 Pro, AMD Ryzen 7 5800X3D, Wails v2.10.2
|
||||
|
||||
**Note:** Issue was closed on 2025-08-02. Problem was in draganddrop.js using element.style instead of getComputedStyle.
|
||||
|
||||
---
|
||||
|
||||
## Issue #8: Use a user-agent that is more recognizable by front-end code
|
||||
|
||||
**Title:** Use a user-agent that is more recognizable by front-end code
|
||||
**Platform:** macOS
|
||||
**Reported:** 2024-01-31
|
||||
**Location:** GitHub
|
||||
**Reporter:** hsiafan
|
||||
**Link:** https://github.com/wailsapp/wails/issues/3226
|
||||
|
||||
**Summary:** SortableJS (drag-and-drop library) doesn't work properly in Wails' webview because the userAgent doesn't contain standard browser identifiers like 'Safari/605.1.15', causing library detection to fail.
|
||||
|
||||
**Reproduction:**
|
||||
Libraries like SortableJS check userAgent for specific strings ('Edge', 'Firefox', 'Chrome', 'Safari') and fail to work properly when these are not present.
|
||||
|
||||
**System:** macOS, affects drag-and-drop libraries
|
||||
|
||||
---
|
||||
|
||||
## Issue #9: Application soft crashes when using vue-virtual-scroller on Linux
|
||||
|
||||
**Title:** Application soft crashes when using vue-virtual-scroller on Linux
|
||||
**Platform:** Linux (Ubuntu)
|
||||
**Reported:** 2024-10-22
|
||||
**Location:** GitHub
|
||||
**Reporter:** ysmilda
|
||||
**Link:** https://github.com/wailsapp/wails/issues/3849
|
||||
|
||||
**Summary:** Using vue-virtual-scroller component causes the application to crash on Linux builds, rendering a grey screen and hanging the inspector window. Works fine on Windows and in dev view.
|
||||
|
||||
**Reproduction:**
|
||||
1. Create new wails instance with `wails init -n myproject -t vue-ts`
|
||||
2. Add vue-virtual-scroller component
|
||||
3. Create Linux build (`wails build -tags webkit2_41`)
|
||||
4. Observe crash while rendering
|
||||
|
||||
**System:** Ubuntu 24.04, Intel Core i7-12700, Wails v2.9.2
|
||||
|
||||
---
|
||||
|
||||
## Issue #10: [DragAndDrop] panic when dropping non-file objects
|
||||
|
||||
**Title:** [DragAndDrop] panic when dropping non-file objects
|
||||
**Platform:** Windows
|
||||
**Reported:** 2024-07-09
|
||||
**Location:** GitHub
|
||||
**Reporter:** Alpa-1
|
||||
**Link:** https://github.com/wailsapp/wails/issues/3596
|
||||
|
||||
**Summary:** A panic occurs when dropping non-file objects (like strings or browser tabs) into the webview. The application crashes with a nil pointer dereference.
|
||||
|
||||
**Reproduction:**
|
||||
1. Enable DragAndDrop
|
||||
2. Add a drop target on frontend with `--wails-drop-target`
|
||||
3. Register a callback with `OnFileDrop((x,y,f) => { console.log(f) }, true)`
|
||||
4. Drop a Browser Tab onto the element
|
||||
5. Application panics
|
||||
|
||||
**System:** Windows 10 Enterprise, AMD Ryzen 7 PRO 4750U, Wails v2.9.1
|
||||
|
||||
**Note:** Issue was closed on 2024-08-18. A simple nil check fix was provided.
|
||||
|
||||
---
|
||||
|
||||
## Common Patterns Identified:
|
||||
|
||||
1. **Platform-specific issues:** Windows has the most reported issues, particularly with events not reaching the backend
|
||||
2. **Version regression:** Multiple reports indicate v3 alpha 19+ broke drag and drop on Windows
|
||||
3. **WebView configuration:** Several issues relate to DisableWebViewDrop not working correctly
|
||||
4. **Cross-platform builds:** Issues when building for Windows on other platforms
|
||||
5. **Frontend/Backend disconnect:** Common pattern of JavaScript events firing but Go handlers not receiving events
|
||||
6. **UI replacement on Linux:** Specific issue where dropped files replace the entire UI in WebKit
|
||||
|
||||
## Recommendations:
|
||||
|
||||
1. Focus on Windows platform issues first as they are most prevalent
|
||||
2. Investigate the changes in PR #4318 which allegedly broke Windows DnD
|
||||
3. Review the event propagation mechanism between frontend and backend
|
||||
4. Test cross-platform builds more thoroughly
|
||||
5. Improve documentation on DragAndDrop configuration options
|
||||
|
|
@ -16,6 +16,11 @@ includes:
|
|||
dir: v3
|
||||
optional: true
|
||||
|
||||
docs:
|
||||
taskfile: docs
|
||||
dir: docs
|
||||
optional: true
|
||||
|
||||
tasks:
|
||||
contributors:check:
|
||||
cmds:
|
||||
|
|
|
|||
6
astro.config.mjs
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import d2 from 'astro-d2';
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
integrations: [d2()]
|
||||
});
|
||||
21
docs/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# build output
|
||||
dist/
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
1
docs/.npmrc
Normal file
|
|
@ -0,0 +1 @@
|
|||
save-exact=true
|
||||
4
docs/.vscode/extensions.json
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
||||
11
docs/.vscode/launch.json
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
1
docs/CNAME
Normal file
|
|
@ -0,0 +1 @@
|
|||
v3alpha.wails.io
|
||||
65
docs/README.md
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
# Wails v3 Documentation
|
||||
|
||||
[](https://starlight.astro.build)
|
||||
|
||||
World-class documentation for Wails v3, redesigned following Netflix documentation principles.
|
||||
|
||||
## 📚 Documentation Redesign (2025-10-01)
|
||||
|
||||
This documentation has been completely redesigned to follow the **Netflix approach** to developer documentation:
|
||||
|
||||
- **Problem-first framing** - Start with why, not what
|
||||
- **Progressive disclosure** - Multiple entry points for different skill levels
|
||||
- **Real production examples** - No toy code
|
||||
- **Story-Code-Context pattern** - Why → How → When
|
||||
- **Scannable content** - Clear structure, visual aids
|
||||
|
||||
**Status:** Foundation complete (~20%), ready for content migration
|
||||
|
||||
See [IMPLEMENTATION_SUMMARY.md](./IMPLEMENTATION_SUMMARY.md) for full details.
|
||||
|
||||
## 🚀 Project Structure
|
||||
|
||||
Inside of your Astro + Starlight project, you'll see the following folders and
|
||||
files:
|
||||
|
||||
```sh
|
||||
.
|
||||
├── public/
|
||||
├── src/
|
||||
│ ├── assets/
|
||||
│ ├── content/
|
||||
│ │ ├── docs/
|
||||
│ │ └── config.ts
|
||||
│ └── env.d.ts
|
||||
├── astro.config.mjs
|
||||
├── package.json
|
||||
└── tsconfig.json
|
||||
```
|
||||
|
||||
Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory.
|
||||
Each file is exposed as a route based on its file name.
|
||||
|
||||
Images can be added to `src/assets/` and embedded in Markdown with a relative
|
||||
link.
|
||||
|
||||
Static assets, like favicons, can be placed in the `public/` directory.
|
||||
|
||||
## 🧞 Commands
|
||||
|
||||
All commands are run from the root of the project, from a terminal:
|
||||
|
||||
| Command | Action |
|
||||
| :------------------------ | :----------------------------------------------- |
|
||||
| `npm install` | Installs dependencies |
|
||||
| `npm run dev` | Starts local dev server at `localhost:4321` |
|
||||
| `npm run build` | Build your production site to `./dist/` |
|
||||
| `npm run preview` | Preview your build locally, before deploying |
|
||||
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||
| `npm run astro -- --help` | Get help using the Astro CLI |
|
||||
|
||||
## 👀 Want to learn more?
|
||||
|
||||
Check out [Starlight’s docs](https://starlight.astro.build/), read
|
||||
[the Astro documentation](https://docs.astro.build), or jump into the
|
||||
[Astro Discord server](https://astro.build/chat).
|
||||
38
docs/Taskfile.yml
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# https://taskfile.dev
|
||||
|
||||
version: '3'
|
||||
|
||||
vars:
|
||||
# Change this to switch package managers: bun, npm, pnpm, yarn
|
||||
PKG_MANAGER: bun
|
||||
|
||||
tasks:
|
||||
|
||||
setup:
|
||||
summary: Setup the project (including D2 diagram tool)
|
||||
preconditions:
|
||||
- sh: '{{.PKG_MANAGER}} --version'
|
||||
msg: "Looks like {{.PKG_MANAGER}} isn't installed."
|
||||
- sh: 'go version'
|
||||
msg: "Go is not installed. Install from https://go.dev/dl/"
|
||||
cmds:
|
||||
- '{{.PKG_MANAGER}} install'
|
||||
- go install oss.terrastruct.com/d2@latest
|
||||
- echo "✓ Setup complete. D2 installed to $(go env GOPATH)/bin/d2"
|
||||
|
||||
dev:
|
||||
summary: Run the dev server
|
||||
preconditions:
|
||||
- sh: '{{.PKG_MANAGER}} --version'
|
||||
msg: "Looks like {{.PKG_MANAGER}} isn't installed."
|
||||
cmds:
|
||||
- '{{.PKG_MANAGER}} run dev'
|
||||
|
||||
build:
|
||||
summary: Build the docs
|
||||
preconditions:
|
||||
- sh: '{{.PKG_MANAGER}} --version'
|
||||
msg: "Looks like {{.PKG_MANAGER}} isn't installed."
|
||||
cmds:
|
||||
- '{{.PKG_MANAGER}} run build'
|
||||
|
||||
342
docs/astro.config.mjs
Normal file
|
|
@ -0,0 +1,342 @@
|
|||
// @ts-check
|
||||
import { defineConfig } from "astro/config";
|
||||
import starlight from "@astrojs/starlight";
|
||||
import sitemap from "@astrojs/sitemap";
|
||||
import starlightLinksValidator from "starlight-links-validator";
|
||||
import starlightImageZoom from "starlight-image-zoom";
|
||||
import starlightBlog from "starlight-blog";
|
||||
import { authors } from "./src/content/authors";
|
||||
import d2 from 'astro-d2';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: "https://wails.io",
|
||||
trailingSlash: "ignore",
|
||||
compressHTML: true,
|
||||
output: "static",
|
||||
build: { format: "directory" },
|
||||
devToolbar: { enabled: true },
|
||||
integrations: [
|
||||
d2(),
|
||||
sitemap(),
|
||||
starlight({
|
||||
title: "",
|
||||
titleDelimiter: "",
|
||||
logo: {
|
||||
dark: "./src/assets/wails-logo-horizontal-dark.svg",
|
||||
light: "./src/assets/wails-logo-horizontal-light.svg",
|
||||
},
|
||||
favicon: "./public/favicon.svg",
|
||||
description: "Build beautiful desktop applications using Go and modern web technologies.",
|
||||
pagefind: true,
|
||||
customCss: ["./src/stylesheets/extra.css"],
|
||||
lastUpdated: true,
|
||||
pagination: true,
|
||||
editLink: {
|
||||
baseUrl: "https://github.com/wailsapp/wails/edit/v3-alpha/docs",
|
||||
},
|
||||
social: {
|
||||
github: "https://github.com/wailsapp/wails",
|
||||
discord: "https://discord.gg/JDdSxwjhGf",
|
||||
"x.com": "https://x.com/wailsapp",
|
||||
},
|
||||
head: [
|
||||
{
|
||||
tag: 'script',
|
||||
content: `
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const socialLinks = document.querySelector('.social-icons');
|
||||
if (socialLinks) {
|
||||
const sponsorLink = document.createElement('a');
|
||||
sponsorLink.href = 'https://github.com/sponsors/leaanthony';
|
||||
sponsorLink.className = 'sl-flex';
|
||||
sponsorLink.title = 'Sponsor';
|
||||
sponsorLink.innerHTML = '<span class="sr-only">Sponsor</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="#ef4444" stroke="none"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"/></svg>';
|
||||
socialLinks.appendChild(sponsorLink);
|
||||
}
|
||||
});
|
||||
`,
|
||||
},
|
||||
],
|
||||
defaultLocale: "root",
|
||||
locales: {
|
||||
root: { label: "English", lang: "en", dir: "ltr" },
|
||||
},
|
||||
plugins: [
|
||||
starlightImageZoom(),
|
||||
starlightBlog({
|
||||
title: "Wails Blog",
|
||||
authors: authors,
|
||||
}),
|
||||
],
|
||||
sidebar: [
|
||||
{ label: "Home", link: "/" },
|
||||
|
||||
// Progressive Onboarding - Netflix Principle: Start with the problem
|
||||
{ label: "Why Wails?", link: "/quick-start/why-wails" },
|
||||
|
||||
{
|
||||
label: "Quick Start",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ label: "Installation", link: "/quick-start/installation" },
|
||||
{ label: "Your First App", link: "/quick-start/first-app" },
|
||||
{ label: "Next Steps", link: "/quick-start/next-steps" },
|
||||
],
|
||||
},
|
||||
|
||||
// Tutorials
|
||||
{
|
||||
label: "Tutorials",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "tutorials" },
|
||||
},
|
||||
|
||||
// Core Concepts
|
||||
{
|
||||
label: "Core Concepts",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "How Wails Works", link: "/concepts/architecture" },
|
||||
{ label: "Manager API", link: "/concepts/manager-api" },
|
||||
{ label: "Application Lifecycle", link: "/concepts/lifecycle" },
|
||||
{ label: "Go-Frontend Bridge", link: "/concepts/bridge" },
|
||||
{ label: "Build System", link: "/concepts/build-system" },
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
label: "Features",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
label: "Windows",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Window Basics", link: "/features/windows/basics" },
|
||||
{ label: "Window Options", link: "/features/windows/options" },
|
||||
{ label: "Multiple Windows", link: "/features/windows/multiple" },
|
||||
{ label: "Frameless Windows", link: "/features/windows/frameless" },
|
||||
{ label: "Window Events", link: "/features/windows/events" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Menus",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Application Menus", link: "/features/menus/application" },
|
||||
{ label: "Context Menus", link: "/features/menus/context" },
|
||||
{ label: "System Tray Menus", link: "/features/menus/systray" },
|
||||
{ label: "Menu Reference", link: "/features/menus/reference" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Bindings & Services",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Method Binding", link: "/features/bindings/methods" },
|
||||
{ label: "Services", link: "/features/bindings/services" },
|
||||
{ label: "Advanced Binding", link: "/features/bindings/advanced" },
|
||||
{ label: "Best Practices", link: "/features/bindings/best-practices" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Events",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Event System", link: "/features/events/system" },
|
||||
{ label: "Application Events", link: "/features/events/application" },
|
||||
{ label: "Window Events", link: "/features/events/window" },
|
||||
{ label: "Custom Events", link: "/features/events/custom" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Dialogs",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "File Dialogs", link: "/features/dialogs/file" },
|
||||
{ label: "Message Dialogs", link: "/features/dialogs/message" },
|
||||
{ label: "Custom Dialogs", link: "/features/dialogs/custom" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Clipboard",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "features/clipboard" },
|
||||
},
|
||||
{
|
||||
label: "Browser",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "features/browser" },
|
||||
},
|
||||
{ label: "Drag & Drop", link: "/features/drag-drop" },
|
||||
{
|
||||
label: "Keyboard",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "features/keyboard" },
|
||||
},
|
||||
{
|
||||
label: "Notifications",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "features/notifications" },
|
||||
},
|
||||
{
|
||||
label: "Screens",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "features/screens" },
|
||||
},
|
||||
{
|
||||
label: "Environment",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "features/environment" },
|
||||
},
|
||||
{
|
||||
label: "Platform-Specific",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "features/platform" },
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
// Guides - Task-oriented patterns (Netflix: When to use it, when not to use it)
|
||||
{
|
||||
label: "Guides",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
label: "Development",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Project Structure", link: "/guides/dev/project-structure" },
|
||||
{ label: "Development Workflow", link: "/guides/dev/workflow" },
|
||||
{ label: "Debugging", link: "/guides/dev/debugging" },
|
||||
{ label: "Testing", link: "/guides/dev/testing" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Building & Packaging",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Building Applications", link: "/guides/build/building" },
|
||||
{ label: "Build Customization", link: "/guides/build/customization" },
|
||||
{ label: "Cross-Platform Builds", link: "/guides/build/cross-platform" },
|
||||
{ label: "Code Signing", link: "/guides/build/signing" },
|
||||
{ label: "Windows Packaging", link: "/guides/build/windows" },
|
||||
{ label: "macOS Packaging", link: "/guides/build/macos" },
|
||||
{ label: "Linux Packaging", link: "/guides/build/linux" },
|
||||
{ label: "MSIX Packaging", link: "/guides/build/msix" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Distribution",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Auto-Updates", link: "/guides/distribution/auto-updates" },
|
||||
{ label: "File Associations", link: "/guides/distribution/file-associations" },
|
||||
{ label: "Custom Protocols", link: "/guides/distribution/custom-protocols" },
|
||||
{ label: "Single Instance", link: "/guides/distribution/single-instance" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Integration Patterns",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Using Gin Router", link: "/guides/patterns/gin-routing" },
|
||||
{ label: "Gin Services", link: "/guides/patterns/gin-services" },
|
||||
{ label: "Database Integration", link: "/guides/patterns/database" },
|
||||
{ label: "REST APIs", link: "/guides/patterns/rest-api" },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "Advanced Topics",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Custom Templates", link: "/guides/advanced/custom-templates" },
|
||||
{ label: "WML (Wails Markup)", link: "/guides/advanced/wml" },
|
||||
{ label: "Panic Handling", link: "/guides/advanced/panic-handling" },
|
||||
{ label: "Security Best Practices", link: "/guides/advanced/security" },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
// Reference - Comprehensive API docs (Netflix: Complete technical reference)
|
||||
{
|
||||
label: "API Reference",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Overview", link: "/reference/overview" },
|
||||
{ label: "Application", link: "/reference/application" },
|
||||
{ label: "Window", link: "/reference/window" },
|
||||
{ label: "Menu", link: "/reference/menu" },
|
||||
{ label: "Events", link: "/reference/events" },
|
||||
{ label: "Dialogs", link: "/reference/dialogs" },
|
||||
{ label: "Frontend Runtime", link: "/reference/frontend-runtime" },
|
||||
{ label: "CLI", link: "/reference/cli" },
|
||||
],
|
||||
},
|
||||
|
||||
// Contributing
|
||||
{
|
||||
label: "Contributing",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Getting Started", link: "/contributing/getting-started" },
|
||||
{ label: "Development Setup", link: "/contributing/setup" },
|
||||
{ label: "Coding Standards", link: "/contributing/standards" },
|
||||
],
|
||||
},
|
||||
|
||||
// Migration & Troubleshooting
|
||||
{
|
||||
label: "Migration",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "From v2 to v3", link: "/migration/v2-to-v3" },
|
||||
{ label: "From Electron", link: "/migration/from-electron" },
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
label: "Troubleshooting",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "troubleshooting" },
|
||||
},
|
||||
|
||||
// Community & Resources
|
||||
{
|
||||
label: "Community",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Links", link: "/community/links" },
|
||||
{ label: "Templates", link: "/community/templates" },
|
||||
{
|
||||
label: "Showcase",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: "Overview", link: "/community/showcase" },
|
||||
{
|
||||
label: "Applications",
|
||||
autogenerate: {
|
||||
directory: "community/showcase",
|
||||
collapsed: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
{ label: "What's New", link: "/whats-new" },
|
||||
{ label: "Status", link: "/status" },
|
||||
{ label: "Changelog", link: "/changelog" },
|
||||
{
|
||||
label: "Sponsor",
|
||||
link: "https://github.com/sponsors/leaanthony",
|
||||
badge: { text: "❤️" },
|
||||
},
|
||||
{ label: "Credits", link: "/credits" },
|
||||
],
|
||||
}),
|
||||
],
|
||||
});
|
||||
23
docs/build-output.txt
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
$ astro build
|
||||
10:08:53 [WARN] [starlight-blog-plugin] It looks like you already have a `MarkdownContent` component override in your Starlight configuration.
|
||||
10:08:53 [WARN] [starlight-blog-plugin] To use `starlight-blog`, either remove your override or update it to render the content from `starlight-blog/overrides/MarkdownContent.astro`.
|
||||
10:08:54 [content] Syncing content
|
||||
10:08:54 [WARN] [glob-loader] The base directory "E:\wails\docs\src\content\i18n\" does not exist.
|
||||
10:08:55 [WARN] [astro-expressive-code] Error while loading code block language "pseudo" in document "E:\wails\docs\src\content\docs\DEVELOPER_GUIDE.md". Using "txt" instead. You can add custom languages using the "langs" config option. Error details: Unknown language "pseudo"
|
||||
10:08:55 [WARN] [astro-expressive-code] Error while loading code block language "pseudo" in document "E:\wails\docs\src\content\docs\DEVELOPER_GUIDE.md". Using "txt" instead. You can add custom languages using the "langs" config option. Error details: Unknown language "pseudo"
|
||||
10:08:55 [WARN] [astro-expressive-code] Error while loading code block language "pseudo" in document "E:\wails\docs\src\content\docs\DEVELOPER_GUIDE.md". Using "txt" instead. You can add custom languages using the "langs" config option. Error details: Unknown language "pseudo"
|
||||
10:08:55 [WARN] [astro-expressive-code] Error while loading code block language "pseudo" in document "E:\wails\docs\src\content\docs\DEVELOPER_GUIDE.md". Using "txt" instead. You can add custom languages using the "langs" config option. Error details: Unknown language "pseudo"
|
||||
10:08:55 [WARN] [astro-expressive-code] Error while loading code block language "pseudo" in document "E:\wails\docs\src\content\docs\DEVELOPER_GUIDE.md". Using "txt" instead. You can add custom languages using the "langs" config option. Error details: Unknown language "pseudo"
|
||||
10:08:55 [WARN] [astro-expressive-code] Error while loading code block language "pseudo" in document "E:\wails\docs\src\content\docs\DEVELOPER_GUIDE.md". Using "txt" instead. You can add custom languages using the "langs" config option. Error details: Unknown language "pseudo"
|
||||
10:08:55 [WARN] [astro-expressive-code] Error while loading code block language "pseudo" in document "E:\wails\docs\src\content\docs\DEVELOPER_GUIDE.md". Using "txt" instead. You can add custom languages using the "langs" config option. Error details: Unknown language "pseudo"
|
||||
10:08:55 [WARN] [astro-expressive-code] Error while loading code block language "pseudo" in document "E:\wails\docs\src\content\docs\DEVELOPER_GUIDE.md". Using "txt" instead. You can add custom languages using the "langs" config option. Error details: Unknown language "pseudo"
|
||||
bad indentation of a mapping entry
|
||||
Location:
|
||||
E:\wails\docs\src\content\docs\learn\context-menu.mdx:3:7
|
||||
Stack trace:
|
||||
at generateError (file:///E:/wails/docs/node_modules/js-yaml/dist/js-yaml.mjs:1273:10)
|
||||
at readBlockMapping (file:///E:/wails/docs/node_modules/js-yaml/dist/js-yaml.mjs:2272:7)
|
||||
at readDocument (file:///E:/wails/docs/node_modules/js-yaml/dist/js-yaml.mjs:2715:3)
|
||||
at load$1 (file:///E:/wails/docs/node_modules/js-yaml/dist/js-yaml.mjs:2804:19)
|
||||
at safeParseFrontmatter (file:///E:/wails/docs/node_modules/@astrojs/mdx/dist/utils.js:33:12)
|
||||
error: script "astro" exited with code 1
|
||||
1560
docs/bun.lock
Normal file
33
docs/create-dirs.ps1
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
$dirs = @(
|
||||
"src/content/docs/quick-start",
|
||||
"src/content/docs/concepts",
|
||||
"src/content/docs/features/windows",
|
||||
"src/content/docs/features/menus",
|
||||
"src/content/docs/features/bindings",
|
||||
"src/content/docs/features/events",
|
||||
"src/content/docs/features/dialogs",
|
||||
"src/content/docs/features/platform",
|
||||
"src/content/docs/guides/dev",
|
||||
"src/content/docs/guides/build",
|
||||
"src/content/docs/guides/distribution",
|
||||
"src/content/docs/guides/patterns",
|
||||
"src/content/docs/guides/advanced",
|
||||
"src/content/docs/reference/application",
|
||||
"src/content/docs/reference/window",
|
||||
"src/content/docs/reference/menu",
|
||||
"src/content/docs/reference/events",
|
||||
"src/content/docs/reference/dialogs",
|
||||
"src/content/docs/reference/runtime",
|
||||
"src/content/docs/reference/cli",
|
||||
"src/content/docs/contributing/architecture",
|
||||
"src/content/docs/contributing/codebase",
|
||||
"src/content/docs/contributing/workflows",
|
||||
"src/content/docs/migration"
|
||||
)
|
||||
|
||||
foreach ($dir in $dirs) {
|
||||
New-Item -ItemType Directory -Force -Path $dir | Out-Null
|
||||
Write-Host "Created: $dir"
|
||||
}
|
||||
|
||||
Write-Host "`nAll directories created successfully!"
|
||||
9344
docs/package-lock.json
generated
Normal file
31
docs/package.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"name": "wails-docs",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"build": "astro check && astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/check": "^0.9.4",
|
||||
"@astrojs/react": "^4.1.0",
|
||||
"@astrojs/starlight": "^0.30.0",
|
||||
"@types/react": "^19.0.1",
|
||||
"@types/react-dom": "^19.0.2",
|
||||
"astro": "^5.0.0",
|
||||
"astro-d2": "^0.5.0",
|
||||
"framer-motion": "^11.14.4",
|
||||
"motion": "^11.14.4",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
"sharp": "^0.33.5",
|
||||
"starlight-blog": "^0.15.0",
|
||||
"starlight-image-zoom": "^0.9.0",
|
||||
"starlight-links-validator": "^0.13.4",
|
||||
"starlight-showcases": "^0.2.0",
|
||||
"typescript": "^5.7.2"
|
||||
}
|
||||
}
|
||||
188
docs/public/d2/docs/DEVELOPER_GUIDE-0.svg
Normal file
|
After Width: | Height: | Size: 38 KiB |
181
docs/public/d2/docs/DEVELOPER_GUIDE-1.svg
Normal file
|
After Width: | Height: | Size: 33 KiB |
181
docs/public/d2/docs/quick-start/why-wails-0.svg
Normal file
|
After Width: | Height: | Size: 30 KiB |
1
docs/public/favicon.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" version="1.1" viewBox="0 0 550 310" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g><path d="M0.883,-0.081L0.121,0.081L0.256,-0.063L0.883,-0.081Z" transform="matrix(-166.599,4.57132,4.57132,166.599,147.403,167.648)" style="fill:url(#_Linear1);fill-rule:nonzero"/></g><g><path d="M0.878,-0.285L-0.073,0.71L-1.186,0.542L0.015,0.207L-0.846,0.077L0.355,-0.258L-0.505,-0.388L0.649,-0.71L0.878,-0.285Z" transform="matrix(-106.443,-16.0669,-16.0669,106.443,428.19,188.033)" style="fill:url(#_Linear2);fill-rule:nonzero"/></g><g><path d="M0.44,-0.04L0.265,-0.056L0.177,0.437L-0.311,-0.255L0.262,-0.437L0.568,-0.437L0.44,-0.04Z" transform="matrix(-114.484,-162.408,-162.408,114.484,333.291,285.804)" style="fill:url(#_Linear3);fill-rule:nonzero"/></g><g><path d="M0.622,-0.115L0.761,-0.115L0.806,-0.013L0.826,0.182L0.622,-0.115Z" transform="matrix(238.126,298.893,298.893,-238.126,113.516,-150.536)" style="fill:url(#_Linear4);fill-rule:nonzero"/></g><g><path d="M0.467,0.005L0.49,0.062L0.271,-0.062L0.467,0.005Z" transform="matrix(-369.529,-97.4118,-97.4118,369.529,582.38,94.027)" style="fill:url(#_Linear5);fill-rule:nonzero"/></g><g><path d="M0.2,0.001L0.219,-0.018L0.614,0.012L0.519,0.089L0.282,0.068L0.2,0.135L0.463,0.194L0.374,0.266L0.138,0.186L0.047,0.033L-0.131,-0.266L0.2,0.001Z" transform="matrix(-496.156,-53.9751,-53.9751,496.156,367.888,125.085)" style="fill:url(#_Linear6);fill-rule:nonzero"/></g><g><path d="M269.095,104.527L287.764,111.419L263.632,106.75L269.095,104.527Z" transform="matrix(0.436503,-1.22916,4.88651,1.73532,-368.043,253.619)" style="fill:#fff"/></g><defs><linearGradient id="_Linear1" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,-3.46945e-18,3.46945e-18,1,0,-3.05761e-06)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,0,0,1,0,-2.75467e-06)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear3" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,-1.11022e-16,1.11022e-16,1,0,-2.61861e-06)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear4" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(-0.801899,-0.59746,0.59746,-0.801899,1.3495,0.447457)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear5" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,-2.77556e-17,2.77556e-17,1,0,-1.92826e-06)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear6" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,0,0,1,0,9.68429e-07)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient></defs></svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
BIN
docs/public/missing.png
Normal file
|
After Width: | Height: | Size: 498 KiB |
BIN
docs/public/showcase-images/bboard.webp
Normal file
|
After Width: | Height: | Size: 8 KiB |
BIN
docs/public/showcase-images/cfntracker.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
docs/public/showcase-images/edex-ui.webp
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
docs/public/showcase-images/emailit.webp
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/public/showcase-images/encrypteasy.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/public/showcase-images/filehound.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
docs/public/showcase-images/gamestacker.webp
Normal file
|
After Width: | Height: | Size: 166 KiB |
BIN
docs/public/showcase-images/hiposter.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
docs/public/showcase-images/mchat.webp
Normal file
|
After Width: | Height: | Size: 503 KiB |
BIN
docs/public/showcase-images/minecraft-mod-updater.webp
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
docs/public/showcase-images/minesweeper-xp.webp
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
docs/public/showcase-images/modalfilemanager.webp
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
docs/public/showcase-images/mollywallet.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
docs/public/showcase-images/october.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
docs/public/showcase-images/optimus.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
docs/public/showcase-images/portfall.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/public/showcase-images/resizem.webp
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
docs/public/showcase-images/riftshare-main.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/public/showcase-images/scriptbar.webp
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
docs/public/showcase-images/tiny-rdm1.webp
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
docs/public/showcase-images/tiny-rdm2.webp
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
docs/public/showcase-images/varly2.webp
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
docs/public/showcase-images/wailsterm.webp
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
docs/public/showcase-images/wally.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
docs/public/showcase-images/wombat.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
docs/public/showcase-images/ytd.webp
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
docs/public/sponsors/jetbrains-grayscale.webp
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
197
docs/public/sponsors/sponsors.svg
Normal file
|
After Width: | Height: | Size: 235 KiB |
BIN
docs/public/sponsors/zsa.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
docs/src/assets/blog-images/browser.webp
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
docs/src/assets/blog-images/build-cross-windows.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/src/assets/blog-images/build-darwin-amd.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
docs/src/assets/blog-images/build-darwin-arm.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
docs/src/assets/blog-images/build-darwin-universal.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/src/assets/blog-images/devtools.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/src/assets/blog-images/linux-build-cross-windows.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/src/assets/blog-images/montage.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
docs/src/assets/blog-images/multiwindow.webp
Normal file
|
After Width: | Height: | Size: 269 KiB |
BIN
docs/src/assets/blog-images/remote-linux.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
docs/src/assets/blog-images/remote-mac.webp
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
docs/src/assets/blog-images/remote.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
docs/src/assets/blog-images/vscode.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/src/assets/blog-images/wails-linux.webp
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
docs/src/assets/blog-images/wails-mac.webp
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
docs/src/assets/blog-images/wails-menus-linux.webp
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
docs/src/assets/blog-images/wails-menus-mac.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/src/assets/blog-images/wails-menus.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
docs/src/assets/blog-images/wails.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
246
docs/src/assets/contributors.html
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
<div class="container">
|
||||
|
||||
<!--GAMFC_DELIMITER-->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/leaanthony"><img src="https://avatars.githubusercontent.com/u/1943904?v=4?s=75" width="75px;" alt="Lea Anthony"/><br /><sub><b>Lea Anthony</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=leaanthony" title="Code">💻</a> <a href="#ideas-leaanthony" title="Ideas, Planning, & Feedback">🤔</a> <a href="#design-leaanthony" title="Design">🎨</a> <a href="#content-leaanthony" title="Content">🖋</a> <a href="#example-leaanthony" title="Examples">💡</a> <a href="#mentoring-leaanthony" title="Mentoring">🧑🏫</a> <a href="#projectManagement-leaanthony" title="Project Management">📆</a> <a href="#tool-leaanthony" title="Tools">🔧</a> <a href="https://github.com/wailsapp/wails/yssues?q=author%3Aleaanthony" title="Bug reports">🐛</a> <a href="#blog-leaanthony" title="Blogposts">📝</a> <a href="#maintenance-leaanthony" title="Maintenance">🚧</a> <a href="#platform-leaanthony" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Aleaanthony" title="Reviewed Pull Requests">👀</a> <a href="#question-leaanthony" title="Answering Questions">💬</a> <a href="#research-leaanthony" title="Research">🔬</a> <a href="https://github.com/wailsapp/wails/commits?author=leaanthony" title="Tests">⚠️</a> <a href="#tutorial-leaanthony" title="Tutorials">✅</a> <a href="#talk-leaanthony" title="Talks">📢</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Aleaanthony" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/wailsapp/wails/commits?author=leaanthony" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/stffabi"><img src="https://avatars.githubusercontent.com/u/9464631?v=4?s=75" width="75px;" alt="stffabi"/><br /><sub><b>stffabi</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=stffabi" title="Code">💻</a> <a href="#ideas-stffabi" title="Ideas, Planning, & Feedback">🤔</a> <a href="#design-stffabi" title="Design">🎨</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Astffabi" title="Bug reports">🐛</a> <a href="#maintenance-stffabi" title="Maintenance">🚧</a> <a href="#platform-stffabi" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Astffabi" title="Reviewed Pull Requests">👀</a> <a href="#question-stffabi" title="Answering Questions">💬</a> <a href="#research-stffabi" title="Research">🔬</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Astffabi" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/wailsapp/wails/commits?author=stffabi" title="Documentation">📖</a> <a href="https://github.com/wailsapp/wails/commits?author=stffabi" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tmclane"><img src="https://avatars.githubusercontent.com/u/511975?v=4?s=75" width="75px;" alt="Travis McLane"/><br /><sub><b>Travis McLane</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=tmclane" title="Code">💻</a> <a href="#research-tmclane" title="Research">🔬</a> <a href="#platform-tmclane" title="Packaging/porting to new platform">📦</a> <a href="#ideas-tmclane" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Atmclane" title="Bug reports">🐛</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Atmclane" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/wailsapp/wails/commits?author=tmclane" title="Tests">⚠️</a> <a href="#question-tmclane" title="Answering Questions">💬</a> <a href="https://github.com/wailsapp/wails/commits?author=tmclane" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://misitebao.com/"><img src="https://avatars.githubusercontent.com/u/28185258?v=4?s=75" width="75px;" alt="Misite Bao"/><br /><sub><b>Misite Bao</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=misitebao" title="Documentation">📖</a> <a href="#translation-misitebao" title="Translation">🌍</a> <a href="#research-misitebao" title="Research">🔬</a> <a href="#maintenance-misitebao" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/bh90210"><img src="https://avatars.githubusercontent.com/u/22690219?v=4?s=75" width="75px;" alt="Byron Chris"/><br /><sub><b>Byron Chris</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=bh90210" title="Code">💻</a> <a href="#research-bh90210" title="Research">🔬</a> <a href="#maintenance-bh90210" title="Maintenance">🚧</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Abh90210" title="Bug reports">🐛</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Abh90210" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/wailsapp/wails/commits?author=bh90210" title="Tests">⚠️</a> <a href="#question-bh90210" title="Answering Questions">💬</a> <a href="#ideas-bh90210" title="Ideas, Planning, & Feedback">🤔</a> <a href="#design-bh90210" title="Design">🎨</a> <a href="#platform-bh90210" title="Packaging/porting to new platform">📦</a> <a href="#infra-bh90210" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/konez2k"><img src="https://avatars.githubusercontent.com/u/32417933?v=4?s=75" width="75px;" alt="konez2k"/><br /><sub><b>konez2k</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=konez2k" title="Code">💻</a> <a href="#platform-konez2k" title="Packaging/porting to new platform">📦</a> <a href="#ideas-konez2k" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/dedo1911"><img src="https://avatars.githubusercontent.com/u/1364496?v=4?s=75" width="75px;" alt="Dario Emerson"/><br /><sub><b>Dario Emerson</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=dedo1911" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Adedo1911" title="Bug reports">🐛</a> <a href="#ideas-dedo1911" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=dedo1911" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://ianmjones.com/"><img src="https://avatars.githubusercontent.com/u/4710?v=4?s=75" width="75px;" alt="Ian M. Jones"/><br /><sub><b>Ian M. Jones</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=ianmjones" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Aianmjones" title="Bug reports">🐛</a> <a href="#ideas-ianmjones" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=ianmjones" title="Tests">⚠️</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Aianmjones" title="Reviewed Pull Requests">👀</a> <a href="#platform-ianmjones" title="Packaging/porting to new platform">📦</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/marktohark"><img src="https://avatars.githubusercontent.com/u/19359934?v=4?s=75" width="75px;" alt="marktohark"/><br /><sub><b>marktohark</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=marktohark" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/rh12503"><img src="https://avatars.githubusercontent.com/u/48951973?v=4?s=75" width="75px;" alt="Ryan H"/><br /><sub><b>Ryan H</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=rh12503" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://codybentley.dev/"><img src="https://avatars.githubusercontent.com/u/6968902?v=4?s=75" width="75px;" alt="Cody Bentley"/><br /><sub><b>Cody Bentley</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=codydbentley" title="Code">💻</a> <a href="#platform-codydbentley" title="Packaging/porting to new platform">📦</a> <a href="#ideas-codydbentley" title="Ideas, Planning, & Feedback">🤔</a> <a href="#financial-codydbentley" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/napalu"><img src="https://avatars.githubusercontent.com/u/6690378?v=4?s=75" width="75px;" alt="Florent"/><br /><sub><b>Florent</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=napalu" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Anapalu" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/akhudek"><img src="https://avatars.githubusercontent.com/u/147633?v=4?s=75" width="75px;" alt="Alexander Hudek"/><br /><sub><b>Alexander Hudek</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=akhudek" title="Code">💻</a> <a href="#financial-akhudek" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://twitter.com/timkippdev"><img src="https://avatars.githubusercontent.com/u/37030721?v=4?s=75" width="75px;" alt="Tim Kipp"/><br /><sub><b>Tim Kipp</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=timkippdev" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gelleson"><img src="https://avatars.githubusercontent.com/u/44272887?v=4?s=75" width="75px;" alt="Altynbek Kaliakbarov"/><br /><sub><b>Altynbek Kaliakbarov</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=gelleson" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Chronophylos"><img src="https://avatars.githubusercontent.com/u/14890588?v=4?s=75" width="75px;" alt="Nikolai Zimmermann"/><br /><sub><b>Nikolai Zimmermann</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Chronophylos" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/k-muchmore"><img src="https://avatars.githubusercontent.com/u/16393095?v=4?s=75" width="75px;" alt="k-muchmore"/><br /><sub><b>k-muchmore</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=k-muchmore" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://peakd.com/@snider"><img src="https://avatars.githubusercontent.com/u/631881?v=4?s=75" width="75px;" alt="Snider"/><br /><sub><b>Snider</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Snider" title="Code">💻</a> <a href="#ideas-Snider" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=Snider" title="Documentation">📖</a> <a href="#financial-Snider" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/albert-sun"><img src="https://avatars.githubusercontent.com/u/54585592?v=4?s=75" width="75px;" alt="Albert Sun"/><br /><sub><b>Albert Sun</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=albert-sun" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/commits?author=albert-sun" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/adalessa"><img src="https://avatars.githubusercontent.com/u/7914601?v=4?s=75" width="75px;" alt="Ariel"/><br /><sub><b>Ariel</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=adalessa" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Aadalessa" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://triplebits.com/"><img src="https://avatars.githubusercontent.com/u/4365245?v=4?s=75" width="75px;" alt="Ilgıt Yıldırım"/><br /><sub><b>Ilgıt Yıldırım</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=ilgityildirim" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Ailgityildirim" title="Bug reports">🐛</a> <a href="#financial-ilgityildirim" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Vaelatern"><img src="https://avatars.githubusercontent.com/u/7906072?v=4?s=75" width="75px;" alt="Toyam Cox"/><br /><sub><b>Toyam Cox</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Vaelatern" title="Code">💻</a> <a href="#platform-Vaelatern" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3AVaelatern" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/hi019"><img src="https://avatars.githubusercontent.com/u/65871571?v=4?s=75" width="75px;" alt="hi019"/><br /><sub><b>hi019</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=hi019" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Ahi019" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://artooro.com/"><img src="https://avatars.githubusercontent.com/u/393395?v=4?s=75" width="75px;" alt="Arthur Wiebe"/><br /><sub><b>Arthur Wiebe</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=artooro" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Aartooro" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://sectcs.com/"><img src="https://avatars.githubusercontent.com/u/16898783?v=4?s=75" width="75px;" alt="Balakrishna Prasad Ganne"/><br /><sub><b>Balakrishna Prasad Ganne</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=aayush420" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/BillBuilt"><img src="https://avatars.githubusercontent.com/u/28831382?v=4?s=75" width="75px;" alt="BillBuilt"/><br /><sub><b>BillBuilt</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=BillBuilt" title="Code">💻</a> <a href="#platform-BillBuilt" title="Packaging/porting to new platform">📦</a> <a href="#ideas-BillBuilt" title="Ideas, Planning, & Feedback">🤔</a> <a href="#question-BillBuilt" title="Answering Questions">💬</a> <a href="#financial-BillBuilt" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Juneezee"><img src="https://avatars.githubusercontent.com/u/20135478?v=4?s=75" width="75px;" alt="Eng Zer Jun"/><br /><sub><b>Eng Zer Jun</b></sub></a><br /><a href="#maintenance-Juneezee" title="Maintenance">🚧</a> <a href="https://github.com/wailsapp/wails/commits?author=Juneezee" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://lgiki.net/"><img src="https://avatars.githubusercontent.com/u/20807713?v=4?s=75" width="75px;" alt="LGiki"/><br /><sub><b>LGiki</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=LGiki" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lontten"><img src="https://avatars.githubusercontent.com/u/30745595?v=4?s=75" width="75px;" alt="Lontten"/><br /><sub><b>Lontten</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=lontten" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/phoenix147"><img src="https://avatars.githubusercontent.com/u/809358?v=4?s=75" width="75px;" alt="Lukas Crepaz"/><br /><sub><b>Lukas Crepaz</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=phoenix147" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Aphoenix147" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://utf9k.net/"><img src="https://avatars.githubusercontent.com/u/14816406?v=4?s=75" width="75px;" alt="Marcus Crane"/><br /><sub><b>Marcus Crane</b></sub></a><br /><a href="https://github.com/wailsapp/wails/issues?q=author%3Amarcus-crane" title="Bug reports">🐛</a> <a href="https://github.com/wailsapp/wails/commits?author=marcus-crane" title="Documentation">📖</a> <a href="#financial-marcus-crane" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://qaisjp.com/"><img src="https://avatars.githubusercontent.com/u/923242?v=4?s=75" width="75px;" alt="Qais Patankar"/><br /><sub><b>Qais Patankar</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=qaisjp" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://wakefulcloud.dev/"><img src="https://avatars.githubusercontent.com/u/38930607?v=4?s=75" width="75px;" alt="Wakeful-Cloud"/><br /><sub><b>Wakeful-Cloud</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Wakeful-Cloud" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3AWakeful-Cloud" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Lyimmi"><img src="https://avatars.githubusercontent.com/u/8627125?v=4?s=75" width="75px;" alt="Zámbó, Levente"/><br /><sub><b>Zámbó, Levente</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Lyimmi" title="Code">💻</a> <a href="#platform-Lyimmi" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3ALyimmi" title="Bug reports">🐛</a> <a href="https://github.com/wailsapp/wails/commits?author=Lyimmi" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Ironpark"><img src="https://avatars.githubusercontent.com/u/4973597?v=4?s=75" width="75px;" alt="Ironpark"/><br /><sub><b>Ironpark</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Ironpark" title="Code">💻</a> <a href="#ideas-Ironpark" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mondy"><img src="https://avatars.githubusercontent.com/u/3961824?v=4?s=75" width="75px;" alt="mondy"/><br /><sub><b>mondy</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=mondy" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/commits?author=mondy" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://ryben.dev/"><img src="https://avatars.githubusercontent.com/u/6241454?v=4?s=75" width="75px;" alt="Benjamin Ryan"/><br /><sub><b>Benjamin Ryan</b></sub></a><br /><a href="https://github.com/wailsapp/wails/issues?q=author%3Aredraskal" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/fallendusk"><img src="https://avatars.githubusercontent.com/u/565631?v=4?s=75" width="75px;" alt="fallendusk"/><br /><sub><b>fallendusk</b></sub></a><br /><a href="#platform-fallendusk" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/wailsapp/wails/commits?author=fallendusk" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://twitter.com/matryer"><img src="https://avatars.githubusercontent.com/u/101659?v=4?s=75" width="75px;" alt="Mat Ryer"/><br /><sub><b>Mat Ryer</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=matryer" title="Code">💻</a> <a href="#ideas-matryer" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Amatryer" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/abtin"><img src="https://avatars.githubusercontent.com/u/441372?v=4?s=75" width="75px;" alt="Abtin"/><br /><sub><b>Abtin</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=abtin" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Aabtin" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/lanzafame"><img src="https://avatars.githubusercontent.com/u/5924712?v=4?s=75" width="75px;" alt="Adrian Lanzafame"/><br /><sub><b>Adrian Lanzafame</b></sub></a><br /><a href="#platform-lanzafame" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/wailsapp/wails/commits?author=lanzafame" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/polikow"><img src="https://avatars.githubusercontent.com/u/58259700?v=4?s=75" width="75px;" alt="Aleksey Polyakov"/><br /><sub><b>Aleksey Polyakov</b></sub></a><br /><a href="https://github.com/wailsapp/wails/issues?q=author%3Apolikow" title="Bug reports">🐛</a> <a href="https://github.com/wailsapp/wails/commits?author=polikow" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/alexmat"><img src="https://avatars.githubusercontent.com/u/745421?v=4?s=75" width="75px;" alt="Alexander Matviychuk"/><br /><sub><b>Alexander Matviychuk</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=alexmat" title="Code">💻</a> <a href="#platform-alexmat" title="Packaging/porting to new platform">📦</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/AlienRecall"><img src="https://avatars.githubusercontent.com/u/68950287?v=4?s=75" width="75px;" alt="AlienRecall"/><br /><sub><b>AlienRecall</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=AlienRecall" title="Code">💻</a> <a href="#platform-AlienRecall" title="Packaging/porting to new platform">📦</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://blog.checkyo.tech/"><img src="https://avatars.githubusercontent.com/u/17457975?v=4?s=75" width="75px;" alt="Aman"/><br /><sub><b>Aman</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=achhabra2" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/amaury-tobias"><img src="https://avatars.githubusercontent.com/u/37311888?v=4?s=75" width="75px;" alt="Amaury Tobias Quiroz"/><br /><sub><b>Amaury Tobias Quiroz</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=amaury-tobias" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Aamaury-tobias" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://blog.nms.de/"><img src="https://avatars.githubusercontent.com/u/51517?v=4?s=75" width="75px;" alt="Andreas Wenk"/><br /><sub><b>Andreas Wenk</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=andywenk" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/stankovic98"><img src="https://avatars.githubusercontent.com/u/29852655?v=4?s=75" width="75px;" alt="Antonio Stanković"/><br /><sub><b>Antonio Stanković</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=stankovic98" title="Code">💻</a> <a href="#platform-stankovic98" title="Packaging/porting to new platform">📦</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/antimatter96"><img src="https://avatars.githubusercontent.com/u/12068176?v=4?s=75" width="75px;" alt="Arpit Jain"/><br /><sub><b>Arpit Jain</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=antimatter96" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/aschey"><img src="https://avatars.githubusercontent.com/u/5882266?v=4?s=75" width="75px;" alt="Austin Schey"/><br /><sub><b>Austin Schey</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=aschey" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Aaschey" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/benjamin-thomas"><img src="https://avatars.githubusercontent.com/u/1557738?v=4?s=75" width="75px;" alt="Benjamin Thomas"/><br /><sub><b>Benjamin Thomas</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=benjamin-thomas" title="Code">💻</a> <a href="#platform-benjamin-thomas" title="Packaging/porting to new platform">📦</a> <a href="#ideas-benjamin-thomas" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://www.bertramtruong.com/"><img src="https://avatars.githubusercontent.com/u/1100843?v=4?s=75" width="75px;" alt="Bertram Truong"/><br /><sub><b>Bertram Truong</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=bt" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Abt" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://techwizworld.net/"><img src="https://avatars.githubusercontent.com/u/175873?v=4?s=75" width="75px;" alt="Blake Bourque"/><br /><sub><b>Blake Bourque</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=TechplexEngineer" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://vk.com/raitonoberu"><img src="https://avatars.githubusercontent.com/u/64320078?v=4?s=75" width="75px;" alt="Denis"/><br /><sub><b>Denis</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=raitonoberu" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/diogox"><img src="https://avatars.githubusercontent.com/u/13244408?v=4?s=75" width="75px;" alt="diogox"/><br /><sub><b>diogox</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=diogox" title="Code">💻</a> <a href="#platform-diogox" title="Packaging/porting to new platform">📦</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/kyoto44"><img src="https://avatars.githubusercontent.com/u/17720761?v=4?s=75" width="75px;" alt="Dmitry Gomzyakov"/><br /><sub><b>Dmitry Gomzyakov</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=kyoto44" title="Code">💻</a> <a href="#platform-kyoto44" title="Packaging/porting to new platform">📦</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/edwardbrowncross"><img src="https://avatars.githubusercontent.com/u/35063432?v=4?s=75" width="75px;" alt="Edward Browncross"/><br /><sub><b>Edward Browncross</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=edwardbrowncross" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://pr0gramming.ca/"><img src="https://avatars.githubusercontent.com/u/14944216?v=4?s=75" width="75px;" alt="Elie Grenon"/><br /><sub><b>Elie Grenon</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=elie-g" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/fdidron"><img src="https://avatars.githubusercontent.com/u/1848786?v=4?s=75" width="75px;" alt="Florian Didron"/><br /><sub><b>Florian Didron</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=fdidron" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Afdidron" title="Bug reports">🐛</a> <a href="#ideas-fdidron" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=fdidron" title="Tests">⚠️</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Afdidron" title="Reviewed Pull Requests">👀</a> <a href="#platform-fdidron" title="Packaging/porting to new platform">📦</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/GargantuaX"><img src="https://avatars.githubusercontent.com/u/14013111?v=4?s=75" width="75px;" alt="GargantuaX"/><br /><sub><b>GargantuaX</b></sub></a><br /><a href="#financial-GargantuaX" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://bednya.ga/"><img src="https://avatars.githubusercontent.com/u/12101721?v=4?s=75" width="75px;" alt="Igor Minin"/><br /><sub><b>Igor Minin</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Igogrek" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3AIgogrek" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://www.jae-sung.com/"><img src="https://avatars.githubusercontent.com/u/39658806?v=4?s=75" width="75px;" alt="Jae-Sung Lee"/><br /><sub><b>Jae-Sung Lee</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=jaesung9507" title="Code">💻</a> <a href="#ideas-jaesung9507" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Jarek-SRT"><img src="https://avatars.githubusercontent.com/u/3391365?v=4?s=75" width="75px;" alt="Jarek"/><br /><sub><b>Jarek</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Jarek-SRT" title="Code">💻</a> <a href="#platform-Jarek-SRT" title="Packaging/porting to new platform">📦</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Junkher"><img src="https://avatars.githubusercontent.com/u/85776620?v=4?s=75" width="75px;" alt="Junker"/><br /><sub><b>Junker</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Junkher" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/kraney"><img src="https://avatars.githubusercontent.com/u/5760081?v=4?s=75" width="75px;" alt="Kris Raney"/><br /><sub><b>Kris Raney</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=kraney" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Akraney" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/LukenSkyne"><img src="https://avatars.githubusercontent.com/u/29918069?v=4?s=75" width="75px;" alt="Luken"/><br /><sub><b>Luken</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=LukenSkyne" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://markstenglein.com/"><img src="https://avatars.githubusercontent.com/u/9255772?v=4?s=75" width="75px;" alt="Mark Stenglein"/><br /><sub><b>Mark Stenglein</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=ocelotsloth" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Aocelotsloth" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/buddyabaddon"><img src="https://avatars.githubusercontent.com/u/33861511?v=4?s=75" width="75px;" alt="buddyabaddon"/><br /><sub><b>buddyabaddon</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=buddyabaddon" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/MikeSchaap"><img src="https://avatars.githubusercontent.com/u/35368821?v=4?s=75" width="75px;" alt="MikeSchaap"/><br /><sub><b>MikeSchaap</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=MikeSchaap" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3AMikeSchaap" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Orijhins"><img src="https://avatars.githubusercontent.com/u/47521598?v=4?s=75" width="75px;" alt="NYSSEN Michaël"/><br /><sub><b>NYSSEN Michaël</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Orijhins" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3AOrijhins" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/NanoNik"><img src="https://avatars.githubusercontent.com/u/11991329?v=4?s=75" width="75px;" alt="Nan0"/><br /><sub><b>Nan0</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=NanoNik" title="Code">💻</a> <a href="#ideas-NanoNik" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=NanoNik" title="Tests">⚠️</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3ANanoNik" title="Reviewed Pull Requests">👀</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/marcio199226"><img src="https://avatars.githubusercontent.com/u/10244404?v=4?s=75" width="75px;" alt="oskar"/><br /><sub><b>oskar</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=marcio199226" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/pierrejoye"><img src="https://avatars.githubusercontent.com/u/282408?v=4?s=75" width="75px;" alt="Pierre Joye"/><br /><sub><b>Pierre Joye</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=pierrejoye" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Apierrejoye" title="Bug reports">🐛</a> <a href="#ideas-pierrejoye" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=pierrejoye" title="Tests">⚠️</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Rested"><img src="https://avatars.githubusercontent.com/u/2003608?v=4?s=75" width="75px;" alt="Reuben Thomas-Davis"/><br /><sub><b>Reuben Thomas-Davis</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Rested" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3ARested" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/mewmew"><img src="https://avatars.githubusercontent.com/u/1414531?v=4?s=75" width="75px;" alt="Robin"/><br /><sub><b>Robin</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=mewmew" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Amewmew" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://threema.id/YSB3TVF7"><img src="https://avatars.githubusercontent.com/u/70367451?v=4?s=75" width="75px;" alt="Sebastian Bauer"/><br /><sub><b>Sebastian Bauer</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=sebastian0x62" title="Code">💻</a> <a href="#ideas-sebastian0x62" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=sebastian0x62" title="Tests">⚠️</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Asebastian0x62" title="Reviewed Pull Requests">👀</a> <a href="#question-sebastian0x62" title="Answering Questions">💬</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/sidwebworks"><img src="https://avatars.githubusercontent.com/u/58144379?v=4?s=75" width="75px;" alt="Sidharth Rathi"/><br /><sub><b>Sidharth Rathi</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=sidwebworks" title="Documentation">📖</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Asidwebworks" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/sithembiso"><img src="https://avatars.githubusercontent.com/u/6559905?v=4?s=75" width="75px;" alt="Sithembiso Khumalo"/><br /><sub><b>Sithembiso Khumalo</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=sithembiso" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Asithembiso" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/LanguageAgnostic"><img src="https://avatars.githubusercontent.com/u/19310562?v=4?s=75" width="75px;" alt="Soheib El-Harrache"/><br /><sub><b>Soheib El-Harrache</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=LanguageAgnostic" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3ALanguageAgnostic" title="Bug reports">🐛</a> <a href="#financial-LanguageAgnostic" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://www.sophieau.com/"><img src="https://avatars.githubusercontent.com/u/11145039?v=4?s=75" width="75px;" alt="Sophie Au"/><br /><sub><b>Sophie Au</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=SophieAu" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3ASophieAu" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/stefpap"><img src="https://avatars.githubusercontent.com/u/22637722?v=4?s=75" width="75px;" alt="Stefanos Papadakis"/><br /><sub><b>Stefanos Papadakis</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=stefpap" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Astefpap" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/s12chung"><img src="https://avatars.githubusercontent.com/u/263394?v=4?s=75" width="75px;" alt="Steve Chung"/><br /><sub><b>Steve Chung</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=s12chung" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3As12chung" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://tortloff.de/"><img src="https://avatars.githubusercontent.com/u/41272726?v=4?s=75" width="75px;" alt="Timm Ortloff"/><br /><sub><b>Timm Ortloff</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=TAINCER" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tomanagle"><img src="https://avatars.githubusercontent.com/u/8683577?v=4?s=75" width="75px;" alt="Tom"/><br /><sub><b>Tom</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=tomanagle" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/valentintrinque"><img src="https://avatars.githubusercontent.com/u/4662842?v=4?s=75" width="75px;" alt="Valentin Trinqué"/><br /><sub><b>Valentin Trinqué</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=ValentinTrinque" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3AValentinTrinque" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://mattn.kaoriya.net/"><img src="https://avatars.githubusercontent.com/u/10111?v=4?s=75" width="75px;" alt="mattn"/><br /><sub><b>mattn</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=mattn" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Amattn" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/bearsh"><img src="https://avatars.githubusercontent.com/u/1089356?v=4?s=75" width="75px;" alt="bearsh"/><br /><sub><b>bearsh</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=bearsh" title="Code">💻</a> <a href="#ideas-bearsh" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=bearsh" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/chenxiao1990"><img src="https://avatars.githubusercontent.com/u/16933565?v=4?s=75" width="75px;" alt="chenxiao"/><br /><sub><b>chenxiao</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=chenxiao1990" title="Code">💻</a> <a href="#ideas-chenxiao1990" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=chenxiao1990" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/fengweiqiang"><img src="https://avatars.githubusercontent.com/u/22905300?v=4?s=75" width="75px;" alt="fengweiqiang"/><br /><sub><b>fengweiqiang</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=fengweiqiang" title="Code">💻</a> <a href="#platform-fengweiqiang" title="Packaging/porting to new platform">📦</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/flin7"><img src="https://avatars.githubusercontent.com/u/58138185?v=4?s=75" width="75px;" alt="flin7"/><br /><sub><b>flin7</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=flin7" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/fred21O4"><img src="https://avatars.githubusercontent.com/u/67189813?v=4?s=75" width="75px;" alt="fred21O4"/><br /><sub><b>fred21O4</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=fred21O4" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gardc"><img src="https://avatars.githubusercontent.com/u/41453409?v=4?s=75" width="75px;" alt="gardc"/><br /><sub><b>gardc</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=gardc" title="Documentation">📖</a> <a href="#tutorial-gardc" title="Tutorials">✅</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/rayshoo"><img src="https://avatars.githubusercontent.com/u/52561899?v=4?s=75" width="75px;" alt="rayshoo"/><br /><sub><b>rayshoo</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=rayshoo" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Yz4230"><img src="https://avatars.githubusercontent.com/u/38999742?v=4?s=75" width="75px;" alt="Ishiyama Yuzuki"/><br /><sub><b>Ishiyama Yuzuki</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Yz4230" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3AYz4230" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://baiyue.one/"><img src="https://avatars.githubusercontent.com/u/43716063?v=4?s=75" width="75px;" alt="佰阅"/><br /><sub><b>佰阅</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Baiyuetribe" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/daodao97"><img src="https://avatars.githubusercontent.com/u/15009280?v=4?s=75" width="75px;" alt="刀刀"/><br /><sub><b>刀刀</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=daodao97" title="Documentation">📖</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Adaodao97" title="Bug reports">🐛</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/jicg"><img src="https://avatars.githubusercontent.com/u/6479672?v=4?s=75" width="75px;" alt="归位"/><br /><sub><b>归位</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=jicg" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/issues?q=author%3Ajicg" title="Bug reports">🐛</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/skamensky"><img src="https://avatars.githubusercontent.com/u/19151369?v=4?s=75" width="75px;" alt="skamensky"/><br /><sub><b>skamensky</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=skamensky" title="Code">💻</a> <a href="#ideas-skamensky" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/wailsapp/wails/commits?author=skamensky" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/apps/dependabot"><img src="https://avatars.githubusercontent.com/in/29110?v=4?s=75" width="75px;" alt="dependabot[bot]"/><br /><sub><b>dependabot[bot]</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=dependabot[bot]" title="Code">💻</a> <a href="#maintenance-dependabot[bot]" title="Maintenance">🚧</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/dsieradzki/"><img src="https://avatars.githubusercontent.com/u/10297559?v=4?s=75" width="75px;" alt="Damian Sieradzki"/><br /><sub><b>Damian Sieradzki</b></sub></a><br /><a href="#financial-dsieradzki" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/boostchicken"><img src="https://avatars.githubusercontent.com/u/427295?v=4?s=75" width="75px;" alt="John Dorman"/><br /><sub><b>John Dorman</b></sub></a><br /><a href="#financial-boostchicken" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://blog.iansinnott.com/"><img src="https://avatars.githubusercontent.com/u/3154865?v=4?s=75" width="75px;" alt="Ian Sinnott"/><br /><sub><b>Ian Sinnott</b></sub></a><br /><a href="#financial-iansinnott" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Shackelford-Arden"><img src="https://avatars.githubusercontent.com/u/7362263?v=4?s=75" width="75px;" alt="Arden Shackelford"/><br /><sub><b>Arden Shackelford</b></sub></a><br /><a href="#financial-Shackelford-Arden" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Bironou"><img src="https://avatars.githubusercontent.com/u/107761511?v=4?s=75" width="75px;" alt="Bironou"/><br /><sub><b>Bironou</b></sub></a><br /><a href="#financial-Bironou" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/CharlieGo19"><img src="https://avatars.githubusercontent.com/u/62405980?v=4?s=75" width="75px;" alt="CharlieGo_"/><br /><sub><b>CharlieGo_</b></sub></a><br /><a href="#financial-CharlieGo19" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/overnet"><img src="https://avatars.githubusercontent.com/u/6376126?v=4?s=75" width="75px;" alt="overnet"/><br /><sub><b>overnet</b></sub></a><br /><a href="#financial-overnet" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://jugglingjsons.dev/"><img src="https://avatars.githubusercontent.com/u/20739064?v=4?s=75" width="75px;" alt="jugglingjsons"/><br /><sub><b>jugglingjsons</b></sub></a><br /><a href="#financial-jugglingjsons" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://selvin.dev/"><img src="https://avatars.githubusercontent.com/u/1922523?v=4?s=75" width="75px;" alt="Selvin Ortiz"/><br /><sub><b>Selvin Ortiz</b></sub></a><br /><a href="#financial-selvindev" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/zandercodes"><img src="https://avatars.githubusercontent.com/u/46308805?v=4?s=75" width="75px;" alt="ZanderCodes"/><br /><sub><b>ZanderCodes</b></sub></a><br /><a href="#financial-zandercodes" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/DonTomato"><img src="https://avatars.githubusercontent.com/u/1098084?v=4?s=75" width="75px;" alt="Michael Voronov"/><br /><sub><b>Michael Voronov</b></sub></a><br /><a href="#financial-DonTomato" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://lt.hn/"><img src="https://avatars.githubusercontent.com/u/83868036?v=4?s=75" width="75px;" alt="letheanVPN"/><br /><sub><b>letheanVPN</b></sub></a><br /><a href="#financial-letheanVPN" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://taigrr.com/"><img src="https://avatars.githubusercontent.com/u/8261498?v=4?s=75" width="75px;" alt="Tai Groot"/><br /><sub><b>Tai Groot</b></sub></a><br /><a href="#financial-taigrr" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/easy-web-it"><img src="https://avatars.githubusercontent.com/u/95484991?v=4?s=75" width="75px;" alt="easy-web-it"/><br /><sub><b>easy-web-it</b></sub></a><br /><a href="#financial-easy-web-it" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://michaelolson1996.github.io/portfolio"><img src="https://avatars.githubusercontent.com/u/45323107?v=4?s=75" width="75px;" alt="Michael Olson"/><br /><sub><b>Michael Olson</b></sub></a><br /><a href="#financial-michaelolson1996" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://eden.network/"><img src="https://avatars.githubusercontent.com/u/4912777?v=4?s=75" width="75px;" alt="EdenNetwork Italia"/><br /><sub><b>EdenNetwork Italia</b></sub></a><br /><a href="#financial-EdenNetworkItalia" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ondoki"><img src="https://avatars.githubusercontent.com/u/88536792?v=4?s=75" width="75px;" alt="ondoki"/><br /><sub><b>ondoki</b></sub></a><br /><a href="#financial-ondoki" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/questrail"><img src="https://avatars.githubusercontent.com/u/3536569?v=4?s=75" width="75px;" alt="QuEST Rail LLC"/><br /><sub><b>QuEST Rail LLC</b></sub></a><br /><a href="#financial-questrail" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Gilgames000"><img src="https://avatars.githubusercontent.com/u/22778436?v=4?s=75" width="75px;" alt="Gilgameš"/><br /><sub><b>Gilgameš</b></sub></a><br /><a href="#financial-Gilgames000" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/bbergshaven"><img src="https://avatars.githubusercontent.com/u/4091634?v=4?s=75" width="75px;" alt="Bernt-Johan Bergshaven"/><br /><sub><b>Bernt-Johan Bergshaven</b></sub></a><br /><a href="#financial-bbergshaven" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/bglw"><img src="https://avatars.githubusercontent.com/u/40188355?v=4?s=75" width="75px;" alt="Liam Bigelow"/><br /><sub><b>Liam Bigelow</b></sub></a><br /><a href="#financial-bglw" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/nickarellano"><img src="https://avatars.githubusercontent.com/u/13930605?v=4?s=75" width="75px;" alt="Nick Arellano"/><br /><sub><b>Nick Arellano</b></sub></a><br /><a href="#financial-nickarellano" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/fcjr"><img src="https://avatars.githubusercontent.com/u/2053002?v=4?s=75" width="75px;" alt="Frank Chiarulli Jr."/><br /><sub><b>Frank Chiarulli Jr.</b></sub></a><br /><a href="#financial-fcjr" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tylertravisty"><img src="https://avatars.githubusercontent.com/u/8620352?v=4?s=75" width="75px;" alt="Tyler"/><br /><sub><b>Tyler</b></sub></a><br /><a href="#financial-tylertravisty" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/trea"><img src="https://avatars.githubusercontent.com/u/1181448?v=4?s=75" width="75px;" alt="Trea Hauet"/><br /><sub><b>Trea Hauet</b></sub></a><br /><a href="#financial-trea" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://picatz.github.io/"><img src="https://avatars.githubusercontent.com/u/14850816?v=4?s=75" width="75px;" alt="Kent 'picat' Gruber"/><br /><sub><b>Kent 'picat' Gruber</b></sub></a><br /><a href="#financial-picatz" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tc-hib"><img src="https://avatars.githubusercontent.com/u/55949036?v=4?s=75" width="75px;" alt="tc-hib"/><br /><sub><b>tc-hib</b></sub></a><br /><a href="#financial-tc-hib" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/acheong08"><img src="https://avatars.githubusercontent.com/u/36258159?v=4?s=75" width="75px;" alt="Antonio"/><br /><sub><b>Antonio</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=acheong08" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/MyNameIsAres"><img src="https://avatars.githubusercontent.com/u/32432637?v=4?s=75" width="75px;" alt="MyNameIsAres"/><br /><sub><b>MyNameIsAres</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=MyNameIsAres" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://mai.car.ons"><img src="https://avatars.githubusercontent.com/u/101958587?v=4?s=75" width="75px;" alt="Maicarons J"/><br /><sub><b>Maicarons J</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Maicarons2022" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/KiddoV"><img src="https://avatars.githubusercontent.com/u/28552977?v=4?s=75" width="75px;" alt="kiddov"/><br /><sub><b>kiddov</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=KiddoV" title="Documentation">📖</a> <a href="#financial-KiddoV" title="Financial">💵</a> <a href="https://github.com/wailsapp/wails/commits?author=KiddoV" title="Tests">⚠️</a> <a href="#ideas-KiddoV" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://nicolas-coutin.com/"><img src="https://avatars.githubusercontent.com/u/6564012?v=4?s=75" width="75px;" alt="Nicolas Coutin"/><br /><sub><b>Nicolas Coutin</b></sub></a><br /><a href="#financial-Ilshidur" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ParvinEyvazov"><img src="https://avatars.githubusercontent.com/u/32189770?v=4?s=75" width="75px;" alt="Parvin Eyvazov"/><br /><sub><b>Parvin Eyvazov</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=ParvinEyvazov" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/apps/github-actions"><img src="https://avatars.githubusercontent.com/in/15368?v=4?s=75" width="75px;" alt="github-actions[bot]"/><br /><sub><b>github-actions[bot]</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=github-actions[bot]" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/OlegGulevskyy"><img src="https://avatars.githubusercontent.com/u/43781031?v=4?s=75" width="75px;" alt="Oleg Gulevskyy"/><br /><sub><b>Oleg Gulevskyy</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=OlegGulevskyy" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/commits?author=OlegGulevskyy" title="Documentation">📖</a> <a href="#maintenance-OlegGulevskyy" title="Maintenance">🚧</a> <a href="#platform-OlegGulevskyy" title="Packaging/porting to new platform">📦</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://www.customct.com/"><img src="https://avatars.githubusercontent.com/u/2487495?v=4?s=75" width="75px;" alt="Richard Guay"/><br /><sub><b>Richard Guay</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=raguay" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ATenderholt"><img src="https://avatars.githubusercontent.com/u/740623?v=4?s=75" width="75px;" alt="Adam Tenderholt"/><br /><sub><b>Adam Tenderholt</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=ATenderholt" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/JulioDRF"><img src="https://avatars.githubusercontent.com/u/15677708?v=4?s=75" width="75px;" alt="JulioDRF"/><br /><sub><b>JulioDRF</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=JulioDRF" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://scottopell.com/"><img src="https://avatars.githubusercontent.com/u/996472?v=4?s=75" width="75px;" alt="Scott Opell"/><br /><sub><b>Scott Opell</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=scottopell" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://aven.dev/"><img src="https://avatars.githubusercontent.com/u/2055581?v=4?s=75" width="75px;" alt="Vadim Shchepotev"/><br /><sub><b>Vadim Shchepotev</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=avengerweb" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://willdot.net/"><img src="https://avatars.githubusercontent.com/u/4906530?v=4?s=75" width="75px;" alt="Will Andrews"/><br /><sub><b>Will Andrews</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=willdot" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gwynforthewyn"><img src="https://avatars.githubusercontent.com/u/434656?v=4?s=75" width="75px;" alt="Gwyn"/><br /><sub><b>Gwyn</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=gwynforthewyn" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/pulls?q=is%3Apr+reviewed-by%3Agwynforthewyn" title="Reviewed Pull Requests">👀</a> <a href="#question-gwynforthewyn" title="Answering Questions">💬</a> <a href="#research-gwynforthewyn" title="Research">🔬</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/xijaja"><img src="https://avatars.githubusercontent.com/u/47017666?v=4?s=75" width="75px;" alt="希嘉嘉"/><br /><sub><b>希嘉嘉</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=xijaja" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://www.almas.cc/"><img src="https://avatars.githubusercontent.com/u/9382335?v=4?s=75" width="75px;" alt="ALMAS"/><br /><sub><b>ALMAS</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=almas1992" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://stdout.com.cn/"><img src="https://avatars.githubusercontent.com/u/20666153?v=4?s=75" width="75px;" alt="Alex"/><br /><sub><b>Alex</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=o8x" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/arifali123"><img src="https://avatars.githubusercontent.com/u/51419655?v=4?s=75" width="75px;" alt="Arif Ali"/><br /><sub><b>Arif Ali</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=arifali123" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/hotafrika"><img src="https://avatars.githubusercontent.com/u/18332839?v=4?s=75" width="75px;" alt="Artur Siarohau"/><br /><sub><b>Artur Siarohau</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=hotafrika" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://binyam.in/"><img src="https://avatars.githubusercontent.com/u/39805353?v=4?s=75" width="75px;" alt="Binyamin Aron Green"/><br /><sub><b>Binyamin Aron Green</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=binyamin" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://bdwyertech.net/"><img src="https://avatars.githubusercontent.com/u/2973273?v=4?s=75" width="75px;" alt="Brian Dwyer"/><br /><sub><b>Brian Dwyer</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=bdwyertech" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://www.cilb.de/"><img src="https://avatars.githubusercontent.com/u/7283097?v=4?s=75" width="75px;" alt="Christian Kilb"/><br /><sub><b>Christian Kilb</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=ckilb" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/edwargix"><img src="https://avatars.githubusercontent.com/u/22877007?v=4?s=75" width="75px;" alt="David Florness"/><br /><sub><b>David Florness</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=edwargix" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/BuckeyeCoder"><img src="https://avatars.githubusercontent.com/u/95933880?v=4?s=75" width="75px;" alt="David Walton"/><br /><sub><b>David Walton</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=BuckeyeCoder" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Debdut"><img src="https://avatars.githubusercontent.com/u/7561070?v=4?s=75" width="75px;" alt="Debdut Karmakar"/><br /><sub><b>Debdut Karmakar</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Debdut" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/gotid"><img src="https://avatars.githubusercontent.com/u/4010854?v=4?s=75" width="75px;" alt="Dieter Zhu"/><br /><sub><b>Dieter Zhu</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=gotid" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://fredrikholmqvist.com/"><img src="https://avatars.githubusercontent.com/u/22743750?v=4?s=75" width="75px;" alt="Fredrik Holmqvist"/><br /><sub><b>Fredrik Holmqvist</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Holmqvist1990" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/giopalma"><img src="https://avatars.githubusercontent.com/u/33783684?v=4?s=75" width="75px;" alt="Giovanni Palma"/><br /><sub><b>Giovanni Palma</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=giopalma" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Nexus26404"><img src="https://avatars.githubusercontent.com/u/83110373?v=4?s=75" width="75px;" alt="Hao"/><br /><sub><b>Hao</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Nexus26404" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/i7tsov"><img src="https://avatars.githubusercontent.com/u/44977153?v=4?s=75" width="75px;" alt="Igor Sementsov"/><br /><sub><b>Igor Sementsov</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=i7tsov" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/derhasi"><img src="https://avatars.githubusercontent.com/u/118502?v=4?s=75" width="75px;" alt="Johannes Haseitl"/><br /><sub><b>Johannes Haseitl</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=derhasi" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/joshbuddy"><img src="https://avatars.githubusercontent.com/u/8898?v=4?s=75" width="75px;" alt="Joshua Hull"/><br /><sub><b>Joshua Hull</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=joshbuddy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/joshm998"><img src="https://avatars.githubusercontent.com/u/1779737?v=4?s=75" width="75px;" alt="Joshua Mangiola"/><br /><sub><b>Joshua Mangiola</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=joshm998" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/prurigro"><img src="https://avatars.githubusercontent.com/u/1149238?v=4?s=75" width="75px;" alt="Kevin MacMartin"/><br /><sub><b>Kevin MacMartin</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=prurigro" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/liang-li-dev"><img src="https://avatars.githubusercontent.com/u/112530363?v=4?s=75" width="75px;" alt="Liang Li"/><br /><sub><b>Liang Li</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=liang-li-dev" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://appslab.co.ke/"><img src="https://avatars.githubusercontent.com/u/7722584?v=4?s=75" width="75px;" alt="Marvin Collins Hosea"/><br /><sub><b>Marvin Collins Hosea</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=marvinhosea" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://matt.life/"><img src="https://avatars.githubusercontent.com/u/1128849?v=4?s=75" width="75px;" alt="Matt Holt"/><br /><sub><b>Matt Holt</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=mholt" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Gurkengewuerz"><img src="https://avatars.githubusercontent.com/u/10966337?v=4?s=75" width="75px;" alt="Niklas"/><br /><sub><b>Niklas</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Gurkengewuerz" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Xhofe"><img src="https://avatars.githubusercontent.com/u/36558727?v=4?s=75" width="75px;" alt="Andy Hsu"/><br /><sub><b>Andy Hsu</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Xhofe" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/NullCode1337"><img src="https://avatars.githubusercontent.com/u/70959549?v=4?s=75" width="75px;" alt="NullCode"/><br /><sub><b>NullCode</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=NullCode1337" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/oSethoum"><img src="https://avatars.githubusercontent.com/u/88779394?v=4?s=75" width="75px;" alt="Oussama Sethoum"/><br /><sub><b>Oussama Sethoum</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=oSethoum" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/ParkourLiu"><img src="https://avatars.githubusercontent.com/u/33681340?v=4?s=75" width="75px;" alt="ParkourLiu"/><br /><sub><b>ParkourLiu</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=ParkourLiu" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/zllovesuki"><img src="https://avatars.githubusercontent.com/u/298453?v=4?s=75" width="75px;" alt="Rachel Chen"/><br /><sub><b>Rachel Chen</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=zllovesuki" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/rnice01"><img src="https://avatars.githubusercontent.com/u/11394384?v=4?s=75" width="75px;" alt="Rob Nice"/><br /><sub><b>Rob Nice</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=rnice01" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/RyoTagami"><img src="https://avatars.githubusercontent.com/u/9672589?v=4?s=75" width="75px;" alt="Ryo TAGAMI"/><br /><sub><b>Ryo TAGAMI</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=RyoTagami" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/SamHennessy"><img src="https://avatars.githubusercontent.com/u/119867?v=4?s=75" width="75px;" alt="Sam Hennessy"/><br /><sub><b>Sam Hennessy</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=SamHennessy" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://albinodrought.com/"><img src="https://avatars.githubusercontent.com/u/852873?v=4?s=75" width="75px;" alt="Sean"/><br /><sub><b>Sean</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=AlbinoDrought" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/sgosiaco"><img src="https://avatars.githubusercontent.com/u/212341?v=4?s=75" width="75px;" alt="Sean Gosiaco"/><br /><sub><b>Sean Gosiaco</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=sgosiaco" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://sheetjs.com/"><img src="https://avatars.githubusercontent.com/u/6070939?v=4?s=75" width="75px;" alt="Eric P Sheets"/><br /><sub><b>Eric P Sheets</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=SheetJSDev" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://www.octopy.dev/"><img src="https://avatars.githubusercontent.com/u/37969970?v=4?s=75" width="75px;" alt="Supian M"/><br /><sub><b>Supian M</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=SupianIDz" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/Watson-Sei"><img src="https://avatars.githubusercontent.com/u/55475145?v=4?s=75" width="75px;" alt="Watson-Sei"/><br /><sub><b>Watson-Sei</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=Watson-Sei" title="Code">💻</a> <a href="https://github.com/wailsapp/wails/commits?author=Watson-Sei" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://shinshin86.com/"><img src="https://avatars.githubusercontent.com/u/8216064?v=4?s=75" width="75px;" alt="Yuki Shindo"/><br /><sub><b>Yuki Shindo</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=shinshin86" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/cuigege"><img src="https://avatars.githubusercontent.com/u/26080122?v=4?s=75" width="75px;" alt="cuigege"/><br /><sub><b>cuigege</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=cuigege" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://cybertramp.net/"><img src="https://avatars.githubusercontent.com/u/30935096?v=4?s=75" width="75px;" alt="cybertramp"/><br /><sub><b>cybertramp</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=cybertramp" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/h8gi"><img src="https://avatars.githubusercontent.com/u/10811057?v=4?s=75" width="75px;" alt="hiroki yagi"/><br /><sub><b>hiroki yagi</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=h8gi" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/apps/imgbot"><img src="https://avatars.githubusercontent.com/in/4706?v=4?s=75" width="75px;" alt="imgbot[bot]"/><br /><sub><b>imgbot[bot]</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=imgbot[bot]" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tong3jie"><img src="https://avatars.githubusercontent.com/u/14191774?v=4?s=75" width="75px;" alt="juju"/><br /><sub><b>juju</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=tong3jie" title="Code">💻</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="12.5%"><a href="http://meatherly.github.io/"><img src="https://avatars.githubusercontent.com/u/1327960?v=4?s=75" width="75px;" alt="Michael Eatherly"/><br /><sub><b>Michael Eatherly</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=meatherly" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/tk103331"><img src="https://avatars.githubusercontent.com/u/4404609?v=4?s=75" width="75px;" alt="tk"/><br /><sub><b>tk</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=tk103331" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://github.com/apps/allcontributors"><img src="https://avatars.githubusercontent.com/in/23186?v=4?s=75" width="75px;" alt="allcontributors[bot]"/><br /><sub><b>allcontributors[bot]</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=allcontributors[bot]" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="12.5%"><a href="https://www.ffactory.org/"><img src="https://avatars.githubusercontent.com/u/77320953?v=4?s=75" width="75px;" alt="wander"/><br /><sub><b>wander</b></sub></a><br /><a href="https://github.com/wailsapp/wails/commits?author=wandercn" title="Documentation">📖</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<!--GAMFC_DELIMITER-END-->
|
||||
|
||||
</div>
|
||||