Compare commits
1,769 commits
master
...
vk/f208-fu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a9cdc0e73 | ||
|
|
8a658a80c0 | ||
|
|
d2951ea132 |
||
|
|
9a131a049d | ||
|
|
8d28e2d06b |
||
|
|
a0d2e03f64 | ||
|
|
8598034942 |
||
|
|
9158c49e30 |
||
|
|
d7d6720d54 | ||
|
|
37fb9b9ba5 |
||
|
|
9db2f74c44 | ||
|
|
897479d52b |
||
|
|
be0e9bab9b | ||
|
|
0abad1ffb2 |
||
|
|
1fb60abdc9 |
||
|
|
862e2e8d6c | ||
|
|
93c307b4b2 |
||
|
|
4dce80d887 |
||
|
|
23b3424415 |
||
|
|
ee7e95af52 |
||
|
|
9039051fd3 |
||
|
|
a1dd1f4d19 | ||
|
|
d0aa2a6e1f |
||
|
|
f1a4ffe72d |
||
|
|
722717a11e | ||
|
|
53c2275fea |
||
|
|
53cd30acc7 | ||
|
|
0b6dfe032c |
||
|
|
a06d55804c |
||
|
|
3256041d8b | ||
|
|
cee729dd85 |
||
|
|
0de429b8fc |
||
|
|
7bc6501a84 |
||
|
|
9ebdf229bb | ||
|
|
2604ecc0f8 |
||
|
|
ab33eb594e |
||
|
|
3b055efcae | ||
|
|
f30c888c5b |
||
|
|
e34c172f0c | ||
|
|
9174be76f2 |
||
|
|
0271c9e10c | ||
|
|
618489800c |
||
|
|
6b8c8d495f | ||
|
|
5dbb3ec09e |
||
|
|
d3f765349f | ||
|
|
a81cb18f0c |
||
|
|
a13a426bcc | ||
|
|
6eb9415d37 |
||
|
|
84b9021ea9 |
||
|
|
f3af37be72 |
||
|
|
531f9e0c5b |
||
|
|
9b03981d06 |
||
|
|
698d950add |
||
|
|
c5af373c43 | ||
|
|
35500c891e |
||
|
|
3da9b0a8de | ||
|
|
2c9d23b040 |
||
|
|
780568b030 | ||
|
|
4fbe0353f7 | ||
|
|
b1dd5a437b | ||
|
|
f0a8bcad34 |
||
|
|
bf1173c831 | ||
|
|
4607913b67 |
||
|
|
41ba4e7d11 |
||
|
|
657ca6b2c4 |
||
|
|
404b49e3f4 | ||
|
|
9ad954b8d8 | ||
|
|
2b8baf0751 | ||
|
|
17bce06c58 | ||
|
|
acae20950f |
||
|
|
e0cd24272c |
||
|
|
38c89e06b5 | ||
|
|
3d46f4867d | ||
|
|
b35ee41073 | ||
|
|
54942d4f34 |
||
|
|
e80cf28578 |
||
|
|
726c7546ce | ||
|
|
c4b614cb10 |
||
|
|
2e396bd48f | ||
|
|
a878b2c1af |
||
|
|
47d827c394 | ||
|
|
f2c90b00f2 | ||
|
|
6f4df3206d | ||
|
|
04a5e4d768 | ||
|
|
d1a7299e27 | ||
|
|
29f751931a | ||
|
|
637713fae6 | ||
|
|
c62a094b9a | ||
|
|
96dff3885d | ||
|
|
873848a077 | ||
|
|
7c8cc6c0e1 |
||
|
|
9d9d67984f |
||
|
|
89f9365c3d |
||
|
|
f4d1a5db5d | ||
|
|
7545701088 |
||
|
|
c863d2ce87 | ||
|
|
dc20ce1fd6 |
||
|
|
7d0016bbbe |
||
|
|
9336875969 |
||
|
|
f50061f7c9 | ||
|
|
e989d0d248 | ||
|
|
561473d992 |
||
|
|
d16371b119 | ||
|
|
f3ad34f475 | ||
|
|
db4385faed | ||
|
|
d813202159 | ||
|
|
efa82ec5f3 | ||
|
|
431869bf84 | ||
|
|
46176d32e4 | ||
|
|
ab42b12628 | ||
|
|
96aa27eb9b | ||
|
|
b8630ca7b5 | ||
|
|
5bac6d7d19 | ||
|
|
3594b77666 | ||
|
|
f8175363cf | ||
|
|
ea2e0ec891 | ||
|
|
4d8ec29feb | ||
|
|
3f0091aba9 | ||
|
|
55f2782559 | ||
|
|
0d02db8ce6 | ||
|
|
7e21ce614a | ||
|
|
af2f054813 | ||
|
|
3c78e45426 | ||
|
|
c42b84f2e2 | ||
|
|
11b63088fb | ||
|
|
c8c5bd15e7 | ||
|
|
fc510586df | ||
|
|
c84506a8a8 | ||
|
|
986efc7e7f | ||
|
|
b652e61e2c |
||
|
|
c36618c2ac | ||
|
|
54d5b989bb |
||
|
|
c3b169f0d3 | ||
|
|
0ed4e05946 | ||
|
|
bbd5d99667 |
||
|
|
6e4e340ade | ||
|
|
a3a5d25d90 |
||
|
|
d58d4ba758 |
||
|
|
8ac5984dfd | ||
|
|
11751beb8a |
||
|
|
57d55643bc | ||
|
|
f091eee98b |
||
|
|
8cd89fc5ef | ||
|
|
0f23972fed |
||
|
|
ca594c5919 | ||
|
|
f1037c8e22 |
||
|
|
e2c95ba292 | ||
|
|
84fcd705cc |
||
|
|
f5fa1158dc | ||
|
|
6023f8ba5b |
||
|
|
a72bc5039c | ||
|
|
6665a3a4b3 |
||
|
|
4d888a3df6 |
||
|
|
f70b9bf229 | ||
|
|
3d1dc86079 | ||
|
|
cb76ef8c60 | ||
|
|
4a9d693e93 | ||
|
|
cbf70499c3 | ||
|
|
751e4afe3f |
||
|
|
966e3d5fbc | ||
|
|
bb53fcbfac |
||
|
|
386034e1ef | ||
|
|
c6f6b0d054 | ||
|
|
91ee276115 | ||
|
|
bfd7a6279c | ||
|
|
335fa0bcc5 |
||
|
|
ff6a333621 |
||
|
|
da9fd9690d |
||
|
|
c179893911 |
||
|
|
a937780218 | ||
|
|
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: []
|
||||
4
.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.
|
||||
|
|
@ -70,7 +72,7 @@ body:
|
|||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: systemdetails
|
||||
id: systemetails
|
||||
attributes:
|
||||
label: System Details
|
||||
description: Please add the output of `wails doctor`.
|
||||
|
|
|
|||
3
.github/pull_request_template.md
vendored
|
|
@ -6,6 +6,7 @@
|
|||
* 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/
|
||||
|
|
@ -47,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
|
||||
|
|
|
|||
2
.github/workflows/auto-label-issues.yml
vendored
|
|
@ -3,7 +3,7 @@ name: Auto Label Issues
|
|||
on:
|
||||
issues:
|
||||
types: [opened, edited, reopened]
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [opened, edited, reopened, synchronize]
|
||||
|
||||
jobs:
|
||||
|
|
|
|||
373
.github/workflows/automated-releases.yml
vendored
Normal file
|
|
@ -0,0 +1,373 @@
|
|||
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
|
||||
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
|
||||
137
.github/workflows/build-and-test-v3.yml
vendored
|
|
@ -5,8 +5,6 @@ on:
|
|||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
branches:
|
||||
- v3-alpha
|
||||
paths:
|
||||
- 'v3/**'
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
branches:
|
||||
|
|
@ -29,9 +27,78 @@ jobs:
|
|||
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: Pack runtime for template tests
|
||||
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
|
||||
run: npm pack
|
||||
|
||||
- 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
|
||||
|
||||
- name: Store runtime package
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: runtime-package
|
||||
path: v3/internal/runtime/desktop/@wailsio/runtime/*.tgz
|
||||
|
||||
test_go:
|
||||
name: Run Go Tests v3
|
||||
needs: check_approval
|
||||
needs: [check_approval, test_js]
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: github.base_ref == 'v3-alpha'
|
||||
strategy:
|
||||
|
|
@ -55,6 +122,7 @@ jobs:
|
|||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
cache-dependency-path: "v3/go.sum"
|
||||
|
||||
- name: Install Task
|
||||
|
|
@ -63,9 +131,18 @@ jobs:
|
|||
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: task test:examples
|
||||
run: |
|
||||
echo "Starting example compilation tests..."
|
||||
task test:examples
|
||||
echo "Example compilation tests completed successfully"
|
||||
|
||||
- name: Run tests (mac)
|
||||
if: matrix.os == 'macos-latest'
|
||||
|
|
@ -93,35 +170,22 @@ jobs:
|
|||
working-directory: v3
|
||||
run: task generator:test:check
|
||||
|
||||
test_js:
|
||||
name: Run JS Tests
|
||||
needs: check_approval
|
||||
cleanup:
|
||||
name: Cleanup build artifacts
|
||||
if: always()
|
||||
needs: [test_js, test_go, test_templates]
|
||||
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
|
||||
- uses: geekyeggo/delete-artifact@v5
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
working-directory: v2/internal/frontend/runtime
|
||||
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
working-directory: v2/internal/frontend/runtime
|
||||
name: |
|
||||
runtime-build-artifacts
|
||||
runtime-package
|
||||
failOnError: false
|
||||
|
||||
test_templates:
|
||||
name: Test Templates
|
||||
needs: test_go
|
||||
needs: [test_js, test_go]
|
||||
runs-on: ${{ matrix.os }}
|
||||
if: github.base_ref == 'v3-alpha'
|
||||
strategy:
|
||||
|
|
@ -157,6 +221,7 @@ jobs:
|
|||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache: true
|
||||
cache-dependency-path: "v3/go.sum"
|
||||
|
||||
- name: Install Task
|
||||
|
|
@ -171,12 +236,28 @@ jobs:
|
|||
task install
|
||||
wails3 doctor
|
||||
|
||||
- name: Download runtime package
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: runtime-package
|
||||
path: wails-runtime-temp
|
||||
|
||||
- name: Generate template '${{ matrix.template }}'
|
||||
shell: bash
|
||||
run: |
|
||||
# Get absolute path - use pwd -W on Windows for native paths, pwd elsewhere
|
||||
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||
RUNTIME_TGZ="$(cd wails-runtime-temp && pwd -W)/$(ls wails-runtime-temp/*.tgz | xargs basename)"
|
||||
else
|
||||
RUNTIME_TGZ="$(cd wails-runtime-temp && pwd)/$(ls wails-runtime-temp/*.tgz | xargs basename)"
|
||||
fi
|
||||
mkdir -p ./test-${{ matrix.template }}
|
||||
cd ./test-${{ matrix.template }}
|
||||
wails3 init -n ${{ matrix.template }} -t ${{ matrix.template }}
|
||||
cd ${{ matrix.template }}
|
||||
cd ${{ matrix.template }}/frontend
|
||||
# Replace @wailsio/runtime version with local tarball
|
||||
npm pkg set dependencies.@wailsio/runtime="file://$RUNTIME_TGZ"
|
||||
cd ..
|
||||
wails3 build
|
||||
|
||||
build_results:
|
||||
|
|
|
|||
36
.github/workflows/build-and-test.yml
vendored
|
|
@ -12,8 +12,8 @@ jobs:
|
|||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-22.04, ubuntu-24.04, windows-latest, macos-latest]
|
||||
go-version: ['1.22']
|
||||
os: [ubuntu-22.04, ubuntu-24.04, windows-latest, macos-latest, macos-11]
|
||||
go-version: ['1.21']
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
|
|
@ -28,7 +28,7 @@ jobs:
|
|||
- uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
if: matrix.os == 'ubuntu-24.04'
|
||||
with:
|
||||
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config libegl1
|
||||
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
|
||||
version: 1.0
|
||||
|
||||
- name: Setup Go
|
||||
|
|
@ -38,14 +38,14 @@ jobs:
|
|||
cache-dependency-path: ./v2/go.sum
|
||||
|
||||
- name: Run tests (mac)
|
||||
if: matrix.os == 'macos-latest'
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'macos-11'
|
||||
env:
|
||||
CGO_LDFLAGS: -framework UniformTypeIdentifiers -mmacosx-version-min=10.13
|
||||
working-directory: ./v2
|
||||
run: go test -v ./...
|
||||
|
||||
- name: Run tests (!mac)
|
||||
if: matrix.os != 'macos-latest' && matrix.os != 'ubuntu-24.04'
|
||||
if: matrix.os != 'macos-latest' && matrix.os != 'macos-11' && matrix.os != 'ubuntu-24.04'
|
||||
working-directory: ./v2
|
||||
run: go test -v ./...
|
||||
|
||||
|
|
@ -86,7 +86,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04]
|
||||
os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04, macos-11]
|
||||
template:
|
||||
[
|
||||
svelte,
|
||||
|
|
@ -103,13 +103,13 @@ jobs:
|
|||
vanilla-ts,
|
||||
plain,
|
||||
]
|
||||
go-version: ['1.22']
|
||||
go-version: ['1.21']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
cache-dependency-path: ./v2/go.sum
|
||||
|
|
@ -120,25 +120,13 @@ jobs:
|
|||
go install
|
||||
wails -help
|
||||
|
||||
- uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
- name: Install linux dependencies ( 22.04 )
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
with:
|
||||
packages: libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config
|
||||
version: 1.0
|
||||
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 ( 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
|
||||
|
||||
- uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
- name: Install linux dependencies ( 24.04 )
|
||||
if: matrix.os == 'ubuntu-24.04'
|
||||
with:
|
||||
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config libegl1
|
||||
version: 1.0
|
||||
|
||||
# - 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
|
||||
run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
|
||||
|
||||
- name: Generate & Build template '${{ matrix.template }}'
|
||||
if: matrix.os != 'ubuntu-24.04'
|
||||
|
|
|
|||
423
.github/workflows/build-cross-image.yml
vendored
|
|
@ -1,423 +0,0 @@
|
|||
name: Build Cross-Compiler Image
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: 'Branch containing Dockerfile'
|
||||
required: true
|
||||
default: 'v3-alpha'
|
||||
sdk_version:
|
||||
description: 'macOS SDK version'
|
||||
required: true
|
||||
default: '14.5'
|
||||
zig_version:
|
||||
description: 'Zig version'
|
||||
required: true
|
||||
default: '0.14.0'
|
||||
image_version:
|
||||
description: 'Image version tag'
|
||||
required: true
|
||||
default: 'latest'
|
||||
skip_tests:
|
||||
description: 'Skip cross-compilation tests'
|
||||
required: false
|
||||
default: 'false'
|
||||
type: boolean
|
||||
push:
|
||||
branches:
|
||||
- v3-alpha
|
||||
paths:
|
||||
- 'v3/internal/commands/build_assets/docker/Dockerfile.cross'
|
||||
|
||||
env:
|
||||
REGISTRY: ghcr.io
|
||||
IMAGE_NAME: wailsapp/wails-cross
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
outputs:
|
||||
image_tag: ${{ steps.vars.outputs.image_version }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.branch || github.ref }}
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set build variables
|
||||
id: vars
|
||||
run: |
|
||||
echo "sdk_version=${{ inputs.sdk_version || '14.5' }}" >> $GITHUB_OUTPUT
|
||||
echo "zig_version=${{ inputs.zig_version || '0.14.0' }}" >> $GITHUB_OUTPUT
|
||||
echo "image_version=${{ inputs.image_version || 'latest' }}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Extract metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
type=raw,value=latest
|
||||
type=raw,value=${{ steps.vars.outputs.image_version }}
|
||||
type=raw,value=sdk-${{ steps.vars.outputs.sdk_version }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: v3/internal/commands/build_assets/docker
|
||||
file: v3/internal/commands/build_assets/docker/Dockerfile.cross
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: |
|
||||
${{ steps.meta.outputs.labels }}
|
||||
io.wails.zig.version=${{ steps.vars.outputs.zig_version }}
|
||||
io.wails.sdk.version=${{ steps.vars.outputs.sdk_version }}
|
||||
build-args: |
|
||||
ZIG_VERSION=${{ steps.vars.outputs.zig_version }}
|
||||
MACOS_SDK_VERSION=${{ steps.vars.outputs.sdk_version }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
# Test cross-compilation for all platforms
|
||||
test-cross-compile:
|
||||
needs: build
|
||||
if: ${{ inputs.skip_tests != 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
# Darwin targets (Zig + macOS SDK) - no platform emulation needed
|
||||
- os: darwin
|
||||
arch: arm64
|
||||
platform: ""
|
||||
expected_file: "Mach-O 64-bit.*arm64"
|
||||
- os: darwin
|
||||
arch: amd64
|
||||
platform: ""
|
||||
expected_file: "Mach-O 64-bit.*x86_64"
|
||||
# Linux targets (GCC) - need platform to match architecture
|
||||
- os: linux
|
||||
arch: amd64
|
||||
platform: "linux/amd64"
|
||||
expected_file: "ELF 64-bit LSB.*x86-64"
|
||||
- os: linux
|
||||
arch: arm64
|
||||
platform: "linux/arm64"
|
||||
expected_file: "ELF 64-bit LSB.*ARM aarch64"
|
||||
# Windows targets (Zig + mingw) - no platform emulation needed
|
||||
- os: windows
|
||||
arch: amd64
|
||||
platform: ""
|
||||
expected_file: "PE32\\+ executable.*x86-64"
|
||||
- os: windows
|
||||
arch: arm64
|
||||
platform: ""
|
||||
expected_file: "PE32\\+ executable.*Aarch64"
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.branch || github.ref }}
|
||||
|
||||
- name: Set up QEMU
|
||||
if: matrix.platform != ''
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Log in to Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Create test CGO project
|
||||
run: |
|
||||
mkdir -p test-project
|
||||
cd test-project
|
||||
|
||||
# Create a minimal CGO test program
|
||||
cat > main.go << 'EOF'
|
||||
package main
|
||||
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
|
||||
int add(int a, int b) {
|
||||
return a + b;
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
result := C.add(1, 2)
|
||||
fmt.Printf("CGO test: 1 + 2 = %d\n", result)
|
||||
}
|
||||
EOF
|
||||
|
||||
cat > go.mod << 'EOF'
|
||||
module test-cgo
|
||||
|
||||
go 1.21
|
||||
EOF
|
||||
|
||||
- name: Build ${{ matrix.os }}/${{ matrix.arch }} (CGO)
|
||||
run: |
|
||||
cd test-project
|
||||
PLATFORM_FLAG=""
|
||||
if [ -n "${{ matrix.platform }}" ]; then
|
||||
PLATFORM_FLAG="--platform ${{ matrix.platform }}"
|
||||
fi
|
||||
|
||||
docker run --rm $PLATFORM_FLAG \
|
||||
-v "$(pwd):/app" \
|
||||
-e APP_NAME="test-cgo" \
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.build.outputs.image_tag || 'latest' }} \
|
||||
${{ matrix.os }} ${{ matrix.arch }}
|
||||
|
||||
- name: Verify binary format
|
||||
run: |
|
||||
cd test-project/bin
|
||||
ls -la
|
||||
|
||||
# Find the built binary
|
||||
if [ "${{ matrix.os }}" = "windows" ]; then
|
||||
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }}.exe 2>/dev/null || ls *.exe | head -1)
|
||||
else
|
||||
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }} 2>/dev/null || ls test-cgo* | grep -v '.exe' | head -1)
|
||||
fi
|
||||
|
||||
echo "Binary: $BINARY"
|
||||
FILE_OUTPUT=$(file "$BINARY")
|
||||
echo "File output: $FILE_OUTPUT"
|
||||
|
||||
# Verify the binary format matches expected
|
||||
if echo "$FILE_OUTPUT" | grep -qE "${{ matrix.expected_file }}"; then
|
||||
echo "✅ Binary format verified: ${{ matrix.os }}/${{ matrix.arch }}"
|
||||
else
|
||||
echo "❌ Binary format mismatch!"
|
||||
echo "Expected pattern: ${{ matrix.expected_file }}"
|
||||
echo "Got: $FILE_OUTPUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Check library dependencies (Linux only)
|
||||
if: matrix.os == 'linux'
|
||||
run: |
|
||||
cd test-project/bin
|
||||
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }} 2>/dev/null || ls test-cgo* | grep -v '.exe' | head -1)
|
||||
|
||||
echo "## Library Dependencies for $BINARY"
|
||||
echo ""
|
||||
|
||||
# Use readelf to show dynamic dependencies
|
||||
echo "### NEEDED libraries:"
|
||||
readelf -d "$BINARY" | grep NEEDED || echo "No dynamic dependencies (statically linked)"
|
||||
|
||||
# Verify expected libraries are linked
|
||||
echo ""
|
||||
echo "### Verifying required libraries..."
|
||||
NEEDED=$(readelf -d "$BINARY" | grep NEEDED)
|
||||
|
||||
MISSING=""
|
||||
for lib in libwebkit2gtk-4.1.so libgtk-3.so libglib-2.0.so libc.so; do
|
||||
if echo "$NEEDED" | grep -q "$lib"; then
|
||||
echo "✅ $lib"
|
||||
else
|
||||
echo "❌ $lib MISSING"
|
||||
MISSING="$MISSING $lib"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$MISSING" ]; then
|
||||
echo ""
|
||||
echo "ERROR: Missing required libraries:$MISSING"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test non-CGO builds (pure Go cross-compilation)
|
||||
test-non-cgo:
|
||||
needs: build
|
||||
if: ${{ inputs.skip_tests != 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: darwin
|
||||
arch: arm64
|
||||
expected_file: "Mach-O 64-bit.*arm64"
|
||||
- os: darwin
|
||||
arch: amd64
|
||||
expected_file: "Mach-O 64-bit.*x86_64"
|
||||
- os: linux
|
||||
arch: amd64
|
||||
expected_file: "ELF 64-bit LSB"
|
||||
- os: linux
|
||||
arch: arm64
|
||||
expected_file: "ELF 64-bit LSB.*ARM aarch64"
|
||||
- os: windows
|
||||
arch: amd64
|
||||
expected_file: "PE32\\+ executable.*x86-64"
|
||||
- os: windows
|
||||
arch: arm64
|
||||
expected_file: "PE32\\+ executable.*Aarch64"
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.branch || github.ref }}
|
||||
|
||||
- name: Log in to Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Create test non-CGO project
|
||||
run: |
|
||||
mkdir -p test-project
|
||||
cd test-project
|
||||
|
||||
# Create a pure Go test program (no CGO)
|
||||
cat > main.go << 'EOF'
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("Pure Go cross-compilation test")
|
||||
}
|
||||
EOF
|
||||
|
||||
cat > go.mod << 'EOF'
|
||||
module test-pure-go
|
||||
|
||||
go 1.21
|
||||
EOF
|
||||
|
||||
- name: Build ${{ matrix.os }}/${{ matrix.arch }} (non-CGO)
|
||||
run: |
|
||||
cd test-project
|
||||
|
||||
# For non-CGO, we can use any platform since Go handles cross-compilation
|
||||
# We set CGO_ENABLED=0 to ensure pure Go build
|
||||
docker run --rm \
|
||||
-v "$(pwd):/app" \
|
||||
-e APP_NAME="test-pure-go" \
|
||||
-e CGO_ENABLED=0 \
|
||||
--entrypoint /bin/sh \
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.build.outputs.image_tag || 'latest' }} \
|
||||
-c "GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} go build -o bin/test-pure-go-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.os == 'windows' && '.exe' || '' }} ."
|
||||
|
||||
- name: Verify binary format
|
||||
run: |
|
||||
cd test-project/bin
|
||||
ls -la
|
||||
|
||||
# Find the built binary
|
||||
if [ "${{ matrix.os }}" = "windows" ]; then
|
||||
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}.exe"
|
||||
else
|
||||
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}"
|
||||
fi
|
||||
|
||||
echo "Binary: $BINARY"
|
||||
FILE_OUTPUT=$(file "$BINARY")
|
||||
echo "File output: $FILE_OUTPUT"
|
||||
|
||||
# Verify the binary format matches expected
|
||||
if echo "$FILE_OUTPUT" | grep -qE "${{ matrix.expected_file }}"; then
|
||||
echo "✅ Binary format verified: ${{ matrix.os }}/${{ matrix.arch }} (non-CGO)"
|
||||
else
|
||||
echo "❌ Binary format mismatch!"
|
||||
echo "Expected pattern: ${{ matrix.expected_file }}"
|
||||
echo "Got: $FILE_OUTPUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Check library dependencies (Linux only)
|
||||
if: matrix.os == 'linux'
|
||||
run: |
|
||||
cd test-project/bin
|
||||
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}"
|
||||
|
||||
echo "## Library Dependencies for $BINARY (non-CGO)"
|
||||
echo ""
|
||||
|
||||
# Non-CGO builds should have minimal dependencies (just libc or statically linked)
|
||||
echo "### NEEDED libraries:"
|
||||
readelf -d "$BINARY" | grep NEEDED || echo "No dynamic dependencies (statically linked)"
|
||||
|
||||
# Verify NO GTK/WebKit libraries (since CGO is disabled)
|
||||
NEEDED=$(readelf -d "$BINARY" | grep NEEDED || true)
|
||||
if echo "$NEEDED" | grep -q "libwebkit\|libgtk"; then
|
||||
echo "❌ ERROR: Non-CGO binary should not link to GTK/WebKit!"
|
||||
exit 1
|
||||
else
|
||||
echo "✅ Confirmed: No GTK/WebKit dependencies (expected for non-CGO)"
|
||||
fi
|
||||
|
||||
# Summary job
|
||||
test-summary:
|
||||
needs: [build, test-cross-compile, test-non-cgo]
|
||||
if: always() && inputs.skip_tests != 'true'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check test results
|
||||
run: |
|
||||
echo "## Cross-Compilation Test Results" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
if [ "${{ needs.test-cross-compile.result }}" = "success" ]; then
|
||||
echo "✅ **CGO Tests**: All passed" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **CGO Tests**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
if [ "${{ needs.test-non-cgo.result }}" = "success" ]; then
|
||||
echo "✅ **Non-CGO Tests**: All passed" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo "❌ **Non-CGO Tests**: Failed" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### Tested Platforms" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Platform | Architecture | CGO | Non-CGO |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|----------|-------------|-----|---------|" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Darwin | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Darwin | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Linux | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Linux | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Windows | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Windows | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# Fail if any test failed
|
||||
if [ "${{ needs.test-cross-compile.result }}" != "success" ] || [ "${{ needs.test-non-cgo.result }}" != "success" ]; then
|
||||
echo ""
|
||||
echo "❌ Some tests failed. Check the individual job logs for details."
|
||||
exit 1
|
||||
fi
|
||||
216
.github/workflows/changelog-v3.yml
vendored
|
|
@ -1,216 +0,0 @@
|
|||
name: Changelog Validation (v3)
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ v3-alpha ]
|
||||
paths:
|
||||
- 'docs/src/content/docs/changelog.mdx'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: 'PR number to validate'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
actions: write
|
||||
|
||||
steps:
|
||||
- name: Checkout PR 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 || github.token }}
|
||||
|
||||
- name: Get REAL validation script from v3-alpha
|
||||
run: |
|
||||
echo "Fetching the REAL validation script from v3-alpha branch..."
|
||||
git fetch origin v3-alpha
|
||||
git checkout origin/v3-alpha -- v3/scripts/validate-changelog.go
|
||||
|
||||
echo "Validation script fetched successfully:"
|
||||
ls -la v3/scripts/
|
||||
|
||||
- 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 changelog modifications
|
||||
id: changelog_check
|
||||
run: |
|
||||
echo "Checking PR #${{ steps.pr_info.outputs.pr_number }} for changelog changes"
|
||||
git fetch origin ${{ steps.pr_info.outputs.base_ref }}
|
||||
|
||||
if git diff --name-only origin/${{ steps.pr_info.outputs.base_ref }}..HEAD | grep -q "docs/src/content/docs/changelog.mdx"; then
|
||||
echo "changelog_modified=true" >> $GITHUB_OUTPUT
|
||||
echo "✅ Changelog was modified in this PR"
|
||||
else
|
||||
echo "changelog_modified=false" >> $GITHUB_OUTPUT
|
||||
echo "ℹ️ Changelog was not modified - skipping validation"
|
||||
fi
|
||||
|
||||
- name: Get changelog diff
|
||||
id: get_diff
|
||||
if: steps.changelog_check.outputs.changelog_modified == 'true'
|
||||
run: |
|
||||
echo "Getting diff for changelog changes..."
|
||||
git diff origin/${{ steps.pr_info.outputs.base_ref }}..HEAD docs/src/content/docs/changelog.mdx | grep "^+" | grep -v "^+++" | sed 's/^+//' > /tmp/pr_added_lines.txt
|
||||
|
||||
echo "Lines added in this PR:"
|
||||
cat /tmp/pr_added_lines.txt
|
||||
echo "Total lines added: $(wc -l < /tmp/pr_added_lines.txt)"
|
||||
|
||||
- name: Validate changelog
|
||||
id: validate
|
||||
if: steps.changelog_check.outputs.changelog_modified == 'true'
|
||||
run: |
|
||||
echo "Running changelog validation..."
|
||||
cd v3/scripts
|
||||
OUTPUT=$(go run validate-changelog.go ../../docs/src/content/docs/changelog.mdx /tmp/pr_added_lines.txt 2>&1)
|
||||
echo "$OUTPUT"
|
||||
|
||||
RESULT=$(echo "$OUTPUT" | grep "VALIDATION_RESULT=" | cut -d'=' -f2)
|
||||
echo "result=$RESULT" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Commit fixes
|
||||
id: commit_fixes
|
||||
if: steps.validate.outputs.result == 'fixed'
|
||||
run: |
|
||||
echo "Committing automatic fixes..."
|
||||
git config --local user.email "action@github.com"
|
||||
git config --local user.name "GitHub Action"
|
||||
|
||||
# Check only the changelog file for changes
|
||||
if git diff --quiet docs/src/content/docs/changelog.mdx; then
|
||||
echo "No changes to commit"
|
||||
echo "committed=false" >> $GITHUB_OUTPUT
|
||||
else
|
||||
# Ensure validation script doesn't get committed
|
||||
echo "v3/scripts/validate-changelog.go" >> .git/info/exclude
|
||||
# Get the correct branch name to push to
|
||||
REPO_OWNER="wailsapp" # Always wailsapp for this repo
|
||||
|
||||
if [ "${{ github.event_name }}" = "pull_request" ]; then
|
||||
BRANCH_NAME="${{ github.event.pull_request.head.ref }}"
|
||||
else
|
||||
# For manual workflow dispatch, get PR info
|
||||
PR_INFO=$(gh pr view ${{ steps.pr_info.outputs.pr_number }} --json headRefName,headRepository)
|
||||
BRANCH_NAME=$(echo "$PR_INFO" | jq -r '.headRefName')
|
||||
HEAD_REPO=$(echo "$PR_INFO" | jq -r '.headRepository.name')
|
||||
|
||||
echo "🔍 PR source branch: $BRANCH_NAME"
|
||||
echo "🔍 Head repository: $HEAD_REPO"
|
||||
|
||||
# Don't push if this is from a fork or if branch is v3-alpha (main branch)
|
||||
if [ "$HEAD_REPO" != "wails" ] || [ "$BRANCH_NAME" = "v3-alpha" ]; then
|
||||
echo "⚠️ Cannot push - either fork or direct v3-alpha branch. Manual fix required."
|
||||
echo "committed=false" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Pushing to branch: $BRANCH_NAME in repo: $REPO_OWNER"
|
||||
|
||||
# Only commit the changelog changes, not the validation script
|
||||
git add docs/src/content/docs/changelog.mdx
|
||||
git commit -m "🤖 Fix changelog: move entries to Unreleased section"
|
||||
|
||||
# Only push if running on the main wailsapp repository
|
||||
if [ "${{ github.repository }}" = "wailsapp/wails" ]; then
|
||||
# Pull latest changes and rebase our commit
|
||||
git fetch origin $BRANCH_NAME
|
||||
git rebase origin/$BRANCH_NAME
|
||||
git push origin HEAD:$BRANCH_NAME
|
||||
else
|
||||
echo "⚠️ Running on fork (${{ github.repository }}). Skipping push - manual fix required."
|
||||
echo "committed=false" >> $GITHUB_OUTPUT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "committed=true" >> $GITHUB_OUTPUT
|
||||
echo "✅ Changes committed and pushed"
|
||||
fi
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Get PR author for tagging
|
||||
id: pr_author
|
||||
if: steps.validate.outputs.result && github.event.inputs.pr_number
|
||||
run: |
|
||||
PR_AUTHOR=$(gh pr view ${{ steps.pr_info.outputs.pr_number }} --json author --jq '.author.login')
|
||||
echo "author=$PR_AUTHOR" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Comment on PR
|
||||
if: steps.validate.outputs.result && github.event.inputs.pr_number
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const result = '${{ steps.validate.outputs.result }}';
|
||||
const committed = '${{ steps.commit_fixes.outputs.committed }}';
|
||||
const author = '${{ steps.pr_author.outputs.author }}';
|
||||
|
||||
let message;
|
||||
if (result === 'success') {
|
||||
message = '## ✅ Changelog Validation Passed\n\nNo misplaced changelog entries detected.';
|
||||
} else if (result === 'fixed' && committed === 'true') {
|
||||
message = '## 🔧 Changelog Updated\n\nMisplaced entries were automatically moved to the `[Unreleased]` section. The changes have been committed to this PR.';
|
||||
} else if (result === 'fixed' || result === 'cannot_fix' || result === 'error') {
|
||||
// Read the fixed changelog content
|
||||
const fs = require('fs');
|
||||
let fixedContent = '';
|
||||
try {
|
||||
fixedContent = fs.readFileSync('docs/src/content/docs/changelog.mdx', 'utf8');
|
||||
} catch (error) {
|
||||
fixedContent = 'Error reading fixed changelog content';
|
||||
}
|
||||
|
||||
message = '## ⚠️ Changelog Validation Issue\\n\\n' +
|
||||
'@' + author + ' Your PR contains changelog entries that were added to already-released versions. These need to be moved to the `[Unreleased]` section.\\n\\n' +
|
||||
(committed === 'true' ?
|
||||
'✅ **Auto-fix applied**: The changes have been automatically committed to this PR.' :
|
||||
'❌ **Manual fix required**: Please apply the changes shown below manually.') + '\\n\\n' +
|
||||
'<details>\\n' +
|
||||
'<summary>📝 Click to see the corrected changelog content</summary>\\n\\n' +
|
||||
'```mdx\\n' +
|
||||
fixedContent +
|
||||
'\\n```\\n\\n' +
|
||||
'</details>\\n\\n' +
|
||||
'**What happened?** \\n' +
|
||||
'The validation script detected that you added changelog entries to a version section that has already been released (like `v3.0.0-alpha.10`). All new entries should go in the `[Unreleased]` section under the appropriate category (`### Added`, `### Fixed`, etc.).\\n\\n' +
|
||||
(committed !== 'true' ? '**Action needed:** Please copy the corrected content from above and replace your changelog file.' : '');
|
||||
}
|
||||
|
||||
if (message) {
|
||||
await github.rest.issues.createComment({
|
||||
issue_number: ${{ steps.pr_info.outputs.pr_number }},
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: message
|
||||
});
|
||||
}
|
||||
|
||||
- name: Fail if validation failed
|
||||
if: steps.validate.outputs.result == 'cannot_fix' || steps.validate.outputs.result == 'error'
|
||||
run: |
|
||||
echo "❌ Changelog validation failed"
|
||||
exit 1
|
||||
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
|
||||
});
|
||||
|
||||
44
.github/workflows/claude-code-review.yml
vendored
|
|
@ -1,44 +0,0 @@
|
|||
name: Claude Code Review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, ready_for_review, reopened]
|
||||
# Optional: Only run on specific file changes
|
||||
# paths:
|
||||
# - "src/**/*.ts"
|
||||
# - "src/**/*.tsx"
|
||||
# - "src/**/*.js"
|
||||
# - "src/**/*.jsx"
|
||||
|
||||
jobs:
|
||||
claude-review:
|
||||
# Optional: Filter by PR author
|
||||
# if: |
|
||||
# github.event.pull_request.user.login == 'external-contributor' ||
|
||||
# github.event.pull_request.user.login == 'new-developer' ||
|
||||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code Review
|
||||
id: claude-review
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
|
||||
plugins: 'code-review@claude-code-plugins'
|
||||
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
|
||||
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
||||
# or https://code.claude.com/docs/en/cli-reference for available options
|
||||
|
||||
50
.github/workflows/claude.yml
vendored
|
|
@ -1,50 +0,0 @@
|
|||
name: Claude Code
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
issues:
|
||||
types: [opened, assigned]
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
|
||||
jobs:
|
||||
claude:
|
||||
if: |
|
||||
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
||||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
issues: read
|
||||
id-token: write
|
||||
actions: read # Required for Claude to read CI results on PRs
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code
|
||||
id: claude
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
|
||||
# This is an optional setting that allows Claude to read CI results on PRs
|
||||
additional_permissions: |
|
||||
actions: read
|
||||
|
||||
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
|
||||
# prompt: 'Update the pull request description to include a summary of changes.'
|
||||
|
||||
# Optional: Add claude_args to customize behavior and configuration
|
||||
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
||||
# or https://code.claude.com/docs/en/cli-reference for available options
|
||||
# claude_args: '--allowed-tools Bash(gh pr:*)'
|
||||
|
||||
2
.github/workflows/generate-sponsor-image.yml
vendored
|
|
@ -25,7 +25,7 @@ jobs:
|
|||
SPONSORKIT_GITHUB_LOGIN: wailsapp
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
commit-message: "chore: update sponsors.svg"
|
||||
add-paths: "website/static/img/sponsors.svg"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ name: Issue Triage Automation
|
|||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
types: [opened, reopened, labeled, unlabeled]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
|
|
|
|||
41
.github/workflows/pr-master.yml
vendored
|
|
@ -1,26 +1,17 @@
|
|||
# Updated to ensure "Run Go Tests" runs for pull requests as expected.
|
||||
# Key fix: the test_go job previously required github.event.review.state == 'approved'
|
||||
# which only exists on pull_request_review events. That prevented the job from
|
||||
# running for regular pull_request events (opened / synchronize / reopened).
|
||||
# New logic: run tests for pull_request events, and also allow running when a
|
||||
# pull_request_review is submitted with state == 'approved'.
|
||||
name: PR Checks (master)
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
branches:
|
||||
- master
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch: {}
|
||||
|
||||
name: PR Checks (master)
|
||||
|
||||
jobs:
|
||||
check_docs:
|
||||
name: Check Docs
|
||||
if: ${{ github.repository == 'wailsapp/wails' && github.base_ref == 'master' }}
|
||||
if: ${{github.repository == 'wailsapp/wails' && github.base_ref == 'master'}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
|
@ -32,6 +23,7 @@ jobs:
|
|||
files: |
|
||||
website/**/*.mdx
|
||||
website/**/*.md
|
||||
|
||||
- name: Run step only when files change.
|
||||
if: steps.verify-changed-files.outputs.files_changed != 'true'
|
||||
run: |
|
||||
|
|
@ -40,18 +32,11 @@ jobs:
|
|||
test_go:
|
||||
name: Run Go Tests
|
||||
runs-on: ${{ matrix.os }}
|
||||
# Run when:
|
||||
# - the event is a pull_request (opened/synchronize/reopened) OR
|
||||
# - the event is a pull_request_review AND the review state is 'approved'
|
||||
# plus other existing filters (not the update-sponsors branch, repo and base_ref)
|
||||
if: >
|
||||
github.repository == 'wailsapp/wails' &&
|
||||
github.event.review.state == 'approved' &&
|
||||
github.repository == 'wailsapp/wails' &&
|
||||
github.base_ref == 'master' &&
|
||||
github.event.pull_request.head.ref != 'update-sponsors' &&
|
||||
(
|
||||
github.event_name == 'pull_request' ||
|
||||
(github.event_name == 'pull_request_review' && github.event.review.state == 'approved')
|
||||
)
|
||||
github.event.pull_request.head.ref != 'update-sponsors'
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04]
|
||||
|
|
@ -90,15 +75,3 @@ jobs:
|
|||
if: matrix.os == 'ubuntu-24.04'
|
||||
working-directory: ./v2
|
||||
run: go test -v -tags webkit2_41 ./...
|
||||
|
||||
# This job will run instead of test_go for the update-sponsors branch
|
||||
skip_tests:
|
||||
name: Skip Tests (Sponsor Update)
|
||||
if: github.event.pull_request.head.ref == 'update-sponsors'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Skip tests for sponsor updates
|
||||
run: |
|
||||
echo "Skipping tests for sponsor update branch"
|
||||
echo "This is an automated update of the sponsors image."
|
||||
continue-on-error: true
|
||||
|
|
|
|||
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 }}
|
||||
2
.github/workflows/test-nightly-releases.yml
vendored
|
|
@ -1,4 +1,6 @@
|
|||
name: Test Nightly Releases (Dry Run)
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
|
|
|||
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"
|
||||
|
|
@ -39,7 +39,6 @@ jobs:
|
|||
name: Trigger v3-alpha Release
|
||||
permissions:
|
||||
contents: read
|
||||
actions: write
|
||||
runs-on: ubuntu-latest
|
||||
needs: check-permissions
|
||||
if: needs.check-permissions.outputs.authorized == 'true'
|
||||
|
|
|
|||
51
.github/workflows/v3-docs.yml
vendored
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
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]
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- '.github/workflows/v3-docs.yml'
|
||||
# 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 D2
|
||||
run: |
|
||||
curl -fsSL https://d2lang.com/install.sh > install.sh
|
||||
chmod +x install.sh
|
||||
./install.sh
|
||||
sudo cp ~/.local/bin/d2 /usr/local/bin/d2
|
||||
d2 --version
|
||||
rm install.sh
|
||||
- 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
|
||||
58
.gitignore
vendored
|
|
@ -37,5 +37,61 @@ 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*
|
||||
.aider*
|
||||
.cache
|
||||
.local
|
||||
|
||||
# Ignore local iOS test app
|
||||
/v3/testiosapp/
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
overrides:
|
||||
- files:
|
||||
- "**/*.md"
|
||||
- "**/*.mdx"
|
||||
options:
|
||||
printWidth: 80
|
||||
proseWrap: always
|
||||
|
|
|
|||
8
.replit
|
|
@ -1,8 +0,0 @@
|
|||
modules = ["go-1.21", "web", "nodejs-20"]
|
||||
run = "go run v2/cmd/wails/main.go"
|
||||
|
||||
[nix]
|
||||
channel = "stable-24_05"
|
||||
|
||||
[deployment]
|
||||
run = ["sh", "-c", "go run v2/cmd/wails/main.go"]
|
||||
144
AGENTS.md
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
# AI Agent Instructions for Wails v3
|
||||
|
||||
## Issue Tracking with bd (beads)
|
||||
|
||||
**IMPORTANT**: This project uses **bd (beads)** for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods.
|
||||
|
||||
### Why bd?
|
||||
|
||||
- Dependency-aware: Track blockers and relationships between issues
|
||||
- Git-friendly: Auto-syncs to JSONL for version control
|
||||
- Agent-optimized: JSON output, ready work detection, discovered-from links
|
||||
- Prevents duplicate tracking systems and confusion
|
||||
|
||||
### Quick Start
|
||||
|
||||
**Check for ready work:**
|
||||
```bash
|
||||
bd ready --json
|
||||
```
|
||||
|
||||
**Create new issues:**
|
||||
```bash
|
||||
bd create "Issue title" -t bug|feature|task -p 0-4 --json
|
||||
bd create "Issue title" -p 1 --deps discovered-from:bd-123 --json
|
||||
bd create "Subtask" --parent <epic-id> --json # Hierarchical subtask (gets ID like epic-id.1)
|
||||
```
|
||||
|
||||
**Claim and update:**
|
||||
```bash
|
||||
bd update bd-42 --status in_progress --json
|
||||
bd update bd-42 --priority 1 --json
|
||||
```
|
||||
|
||||
**Complete work:**
|
||||
```bash
|
||||
bd close bd-42 --reason "Completed" --json
|
||||
```
|
||||
|
||||
### Issue Types
|
||||
|
||||
- `bug` - Something broken
|
||||
- `feature` - New functionality
|
||||
- `task` - Work item (tests, docs, refactoring)
|
||||
- `epic` - Large feature with subtasks
|
||||
- `chore` - Maintenance (dependencies, tooling)
|
||||
|
||||
### Priorities
|
||||
|
||||
- `0` - Critical (security, data loss, broken builds)
|
||||
- `1` - High (major features, important bugs)
|
||||
- `2` - Medium (default, nice-to-have)
|
||||
- `3` - Low (polish, optimization)
|
||||
- `4` - Backlog (future ideas)
|
||||
|
||||
### Workflow for AI Agents
|
||||
|
||||
1. **Check ready work**: `bd ready` shows unblocked issues
|
||||
2. **Claim your task**: `bd update <id> --status in_progress`
|
||||
3. **Work on it**: Implement, test, document
|
||||
4. **Discover new work?** Create linked issue:
|
||||
- `bd create "Found bug" -p 1 --deps discovered-from:<parent-id>`
|
||||
5. **Complete**: `bd close <id> --reason "Done"`
|
||||
6. **Commit together**: Always commit the `.beads/issues.jsonl` file together with the code changes so issue state stays in sync with code state
|
||||
|
||||
### Auto-Sync
|
||||
|
||||
bd automatically syncs with git:
|
||||
- Exports to `.beads/issues.jsonl` after changes (5s debounce)
|
||||
- Imports from JSONL when newer (e.g., after `git pull`)
|
||||
- No manual export/import needed!
|
||||
|
||||
### GitHub Copilot Integration
|
||||
|
||||
If using GitHub Copilot, also create `.github/copilot-instructions.md` for automatic instruction loading.
|
||||
Run `bd onboard` to get the content, or see step 2 of the onboard instructions.
|
||||
|
||||
### MCP Server (Recommended)
|
||||
|
||||
If using Claude or MCP-compatible clients, install the beads MCP server:
|
||||
|
||||
```bash
|
||||
pip install beads-mcp
|
||||
```
|
||||
|
||||
Add to MCP config (e.g., `~/.config/claude/config.json`):
|
||||
```json
|
||||
{
|
||||
"beads": {
|
||||
"command": "beads-mcp",
|
||||
"args": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Then use `mcp__beads__*` functions instead of CLI commands.
|
||||
|
||||
### Managing AI-Generated Planning Documents
|
||||
|
||||
AI assistants often create planning and design documents during development:
|
||||
- PLAN.md, IMPLEMENTATION.md, ARCHITECTURE.md
|
||||
- DESIGN.md, CODEBASE_SUMMARY.md, INTEGRATION_PLAN.md
|
||||
- TESTING_GUIDE.md, TECHNICAL_DESIGN.md, and similar files
|
||||
|
||||
**Best Practice: Use a dedicated directory for these ephemeral files**
|
||||
|
||||
**Recommended approach:**
|
||||
- Create a `history/` directory in the project root
|
||||
- Store ALL AI-generated planning/design docs in `history/`
|
||||
- Keep the repository root clean and focused on permanent project files
|
||||
- Only access `history/` when explicitly asked to review past planning
|
||||
|
||||
**Example .gitignore entry (optional):**
|
||||
```
|
||||
# AI planning documents (ephemeral)
|
||||
history/
|
||||
```
|
||||
|
||||
**Benefits:**
|
||||
- Clean repository root
|
||||
- Clear separation between ephemeral and permanent documentation
|
||||
- Easy to exclude from version control if desired
|
||||
- Preserves planning history for archeological research
|
||||
- Reduces noise when browsing the project
|
||||
|
||||
### CLI Help
|
||||
|
||||
Run `bd <command> --help` to see all available flags for any command.
|
||||
For example: `bd create --help` shows `--parent`, `--deps`, `--assignee`, etc.
|
||||
|
||||
### Important Rules
|
||||
|
||||
- Use bd for ALL task tracking
|
||||
- Always use `--json` flag for programmatic use
|
||||
- Link discovered work with `discovered-from` dependencies
|
||||
- Check `bd ready` before asking "what should I work on?"
|
||||
- Store AI planning docs in `history/` directory
|
||||
- Run `bd <cmd> --help` to discover available flags
|
||||
- **ALWAYS run `coderabbit --plain` before committing** to get code analysis and catch issues early
|
||||
- Do NOT create markdown TODO lists
|
||||
- Do NOT use external issue trackers
|
||||
- Do NOT duplicate tracking systems
|
||||
- Do NOT clutter repo root with planning documents
|
||||
|
||||
For more details, see README.md and QUICKSTART.md.
|
||||
1
CNAME
Normal file
|
|
@ -0,0 +1 @@
|
|||
v3alpha.wails.io
|
||||
419
IOS_ARCHITECTURE.md
Normal file
|
|
@ -0,0 +1,419 @@
|
|||
# Wails v3 iOS Architecture
|
||||
|
||||
## Executive Summary
|
||||
|
||||
This document provides a comprehensive technical architecture for iOS support in Wails v3. The implementation enables Go applications to run natively on iOS with a WKWebView frontend, maintaining the Wails philosophy of using web technologies for UI while leveraging Go for business logic.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Architecture Overview](#architecture-overview)
|
||||
2. [Core Components](#core-components)
|
||||
3. [Layer Architecture](#layer-architecture)
|
||||
4. [Implementation Details](#implementation-details)
|
||||
5. [Battery Optimization](#battery-optimization)
|
||||
6. [Build System](#build-system)
|
||||
7. [Security Considerations](#security-considerations)
|
||||
8. [API Reference](#api-reference)
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
### Design Principles
|
||||
|
||||
1. **Battery Efficiency First**: All architectural decisions prioritize battery life
|
||||
2. **No Network Ports**: Asset serving happens in-process via native APIs
|
||||
3. **Minimal WebView Instances**: Maximum 2 concurrent WebViews (1 primary, 1 for transitions)
|
||||
4. **Native Integration**: Deep iOS integration using Objective-C runtime
|
||||
5. **Wails v3 Compatibility**: Maintain API compatibility with existing Wails v3 applications
|
||||
|
||||
### High-Level Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ iOS Application │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ UIKit Framework │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ WailsViewController │ │
|
||||
│ │ ┌───────────────────────────────────────────────┐ │ │
|
||||
│ │ │ WKWebView Instance │ │ │
|
||||
│ │ │ ┌─────────────────────────────────────────┐ │ │ │
|
||||
│ │ │ │ Web Application (HTML/JS) │ │ │ │
|
||||
│ │ │ └─────────────────────────────────────────┘ │ │ │
|
||||
│ │ └───────────────────────────────────────────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Bridge Layer (CGO) │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │URL Handler │ │JS Bridge │ │Message Handler│ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ Go Runtime │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ Wails Application │ │
|
||||
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │
|
||||
│ │ │App Logic │ │Services │ │Asset Server │ │ │
|
||||
│ │ └──────────┘ └──────────┘ └──────────────────┘ │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Core Components
|
||||
|
||||
### 1. Platform Layer (`application_ios.go`)
|
||||
|
||||
**Purpose**: Go interface for iOS platform operations
|
||||
|
||||
**Key Functions**:
|
||||
- `platformRun()`: Initialize and run the iOS application
|
||||
- `platformQuit()`: Gracefully shutdown the application
|
||||
- `isDarkMode()`: Detect iOS dark mode state
|
||||
- `ExecuteJavaScript(windowID uint, js string)`: Execute JS in WebView
|
||||
|
||||
**Exported Go Functions (Called from Objective-C)**:
|
||||
- `ServeAssetRequest(windowID C.uint, urlStr *C.char, callbackID C.uint)`
|
||||
- `HandleJSMessage(windowID C.uint, message *C.char)`
|
||||
|
||||
### 2. Native iOS Layer (`application_ios.m`)
|
||||
|
||||
**Components**:
|
||||
|
||||
#### WailsSchemeHandler
|
||||
```objc
|
||||
@interface WailsSchemeHandler : NSObject <WKURLSchemeHandler>
|
||||
```
|
||||
- Implements `WKURLSchemeHandler` protocol
|
||||
- Intercepts `wails://` URL requests
|
||||
- Bridges to Go for asset serving
|
||||
- Manages pending requests with callback IDs
|
||||
|
||||
**Methods**:
|
||||
- `startURLSchemeTask:`: Intercept request, call Go handler
|
||||
- `stopURLSchemeTask:`: Cancel pending request
|
||||
- `completeRequest:withData:mimeType:`: Complete request with data from Go
|
||||
|
||||
#### WailsMessageHandler
|
||||
```objc
|
||||
@interface WailsMessageHandler : NSObject <WKScriptMessageHandler>
|
||||
```
|
||||
- Implements JavaScript to Go communication
|
||||
- Handles `window.webkit.messageHandlers.external.postMessage()`
|
||||
- Serializes messages to JSON for Go processing
|
||||
|
||||
**Methods**:
|
||||
- `userContentController:didReceiveScriptMessage:`: Process JS messages
|
||||
|
||||
#### WailsViewController
|
||||
```objc
|
||||
@interface WailsViewController : UIViewController
|
||||
```
|
||||
- Main view controller containing WKWebView
|
||||
- Manages WebView lifecycle
|
||||
- Handles JavaScript execution requests
|
||||
|
||||
**Properties**:
|
||||
- `webView`: WKWebView instance
|
||||
- `schemeHandler`: Custom URL scheme handler
|
||||
- `messageHandler`: JS message handler
|
||||
- `windowID`: Unique window identifier
|
||||
|
||||
**Methods**:
|
||||
- `viewDidLoad`: Initialize WebView with configuration
|
||||
- `executeJavaScript:`: Run JS code in WebView
|
||||
|
||||
### 3. Bridge Layer (CGO)
|
||||
|
||||
**C Interface Functions**:
|
||||
```c
|
||||
void ios_app_init(void); // Initialize iOS app
|
||||
void ios_app_run(void); // Run main loop
|
||||
void ios_app_quit(void); // Quit application
|
||||
bool ios_is_dark_mode(void); // Check dark mode
|
||||
unsigned int ios_create_webview(void); // Create WebView
|
||||
void ios_execute_javascript(unsigned int windowID, const char* js);
|
||||
void ios_complete_request(unsigned int callbackID, const char* data, const char* mimeType);
|
||||
```
|
||||
|
||||
## Layer Architecture
|
||||
|
||||
### Layer 1: Presentation Layer (WebView)
|
||||
|
||||
**Responsibilities**:
|
||||
- Render HTML/CSS/JavaScript UI
|
||||
- Handle user interactions
|
||||
- Communicate with native layer
|
||||
|
||||
**Key Features**:
|
||||
- WKWebView for modern web standards
|
||||
- Hardware-accelerated rendering
|
||||
- Efficient memory management
|
||||
|
||||
### Layer 2: Communication Layer
|
||||
|
||||
**Request Interception**:
|
||||
```
|
||||
WebView Request → WKURLSchemeHandler → Go ServeAssetRequest → AssetServer → Response
|
||||
```
|
||||
|
||||
**JavaScript Bridge**:
|
||||
```
|
||||
JS postMessage → WKScriptMessageHandler → Go HandleJSMessage → Process → ExecuteJavaScript
|
||||
```
|
||||
|
||||
### Layer 3: Application Layer (Go)
|
||||
|
||||
**Components**:
|
||||
- Application lifecycle management
|
||||
- Service binding and method calls
|
||||
- Asset serving from embedded fs.FS
|
||||
- Business logic execution
|
||||
|
||||
### Layer 4: Platform Integration Layer
|
||||
|
||||
**iOS-Specific Features**:
|
||||
- Dark mode detection
|
||||
- System appearance integration
|
||||
- iOS-specific optimizations
|
||||
|
||||
## Implementation Details
|
||||
|
||||
### Request Handling Flow
|
||||
|
||||
1. **WebView makes request** to `wails://localhost/path`
|
||||
2. **WKURLSchemeHandler intercepts** request
|
||||
3. **Creates callback ID** and stores `WKURLSchemeTask`
|
||||
4. **Calls Go function** `ServeAssetRequest` with URL and callback ID
|
||||
5. **Go processes request** through AssetServer
|
||||
6. **Go calls** `ios_complete_request` with response data
|
||||
7. **Objective-C completes** the `WKURLSchemeTask` with response
|
||||
|
||||
### JavaScript Execution Flow
|
||||
|
||||
1. **Go calls** `ios_execute_javascript` with JS code
|
||||
2. **Bridge dispatches** to main thread
|
||||
3. **WKWebView evaluates** JavaScript
|
||||
4. **Completion handler** logs any errors
|
||||
|
||||
### Message Passing Flow
|
||||
|
||||
1. **JavaScript calls** `window.webkit.messageHandlers.wails.postMessage(data)`
|
||||
2. **WKScriptMessageHandler receives** message
|
||||
3. **Serializes to JSON** and passes to Go
|
||||
4. **Go processes** message in `HandleJSMessage`
|
||||
5. **Go can respond** via `ExecuteJavaScript`
|
||||
|
||||
## Battery Optimization
|
||||
|
||||
### WebView Configuration
|
||||
|
||||
```objc
|
||||
// Disable unnecessary features
|
||||
config.suppressesIncrementalRendering = NO;
|
||||
config.allowsInlineMediaPlayback = YES;
|
||||
config.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
|
||||
```
|
||||
|
||||
### Memory Management
|
||||
|
||||
1. **Single WebView Instance**: Reuse instead of creating new instances
|
||||
2. **Automatic Reference Counting**: Use ARC for Objective-C objects
|
||||
3. **Lazy Loading**: Initialize components only when needed
|
||||
4. **Resource Cleanup**: Properly release resources when done
|
||||
|
||||
### Request Optimization
|
||||
|
||||
1. **In-Process Serving**: No network overhead
|
||||
2. **Direct Memory Transfer**: Pass data directly without serialization
|
||||
3. **Efficient Caching**: Leverage WKWebView's built-in cache
|
||||
4. **Minimal Wake Locks**: No background network activity
|
||||
|
||||
## Build System
|
||||
|
||||
### Build Tags
|
||||
|
||||
```go
|
||||
//go:build ios
|
||||
```
|
||||
|
||||
### CGO Configuration
|
||||
|
||||
```go
|
||||
#cgo CFLAGS: -x objective-c -fobjc-arc
|
||||
#cgo LDFLAGS: -framework Foundation -framework UIKit -framework WebKit
|
||||
```
|
||||
|
||||
### Build Script (`build_ios.sh`)
|
||||
|
||||
**Steps**:
|
||||
1. Check dependencies (go, xcodebuild, xcrun)
|
||||
2. Set up iOS cross-compilation environment
|
||||
3. Build Go binary with iOS tags
|
||||
4. Create app bundle structure
|
||||
5. Generate Info.plist
|
||||
6. Sign for simulator
|
||||
7. Create launch script
|
||||
|
||||
**Environment Variables**:
|
||||
```bash
|
||||
export CGO_ENABLED=1
|
||||
export GOOS=ios
|
||||
export GOARCH=arm64
|
||||
export SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-path)
|
||||
```
|
||||
|
||||
### Simulator Deployment
|
||||
|
||||
```bash
|
||||
xcrun simctl install "$DEVICE_ID" "WailsIOSDemo.app"
|
||||
xcrun simctl launch "$DEVICE_ID" "com.wails.iosdemo"
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
### URL Scheme Security
|
||||
|
||||
1. **Custom Scheme**: Use `wails://` to avoid conflicts
|
||||
2. **Origin Validation**: Only serve to authorized WebViews
|
||||
3. **No External Access**: Scheme handler only responds to app's WebView
|
||||
|
||||
### JavaScript Execution
|
||||
|
||||
1. **Input Validation**: Sanitize JS code before execution
|
||||
2. **Sandboxed Execution**: WKWebView provides isolation
|
||||
3. **No eval()**: Avoid dynamic code evaluation
|
||||
|
||||
### Data Protection
|
||||
|
||||
1. **In-Memory Only**: No temporary files on disk
|
||||
2. **ATS Compliance**: App Transport Security enabled
|
||||
3. **Secure Communication**: All data stays within app process
|
||||
|
||||
## API Reference
|
||||
|
||||
### Go API
|
||||
|
||||
#### Application Functions
|
||||
|
||||
```go
|
||||
// Create new iOS application
|
||||
app := application.New(application.Options{
|
||||
Name: "App Name",
|
||||
Description: "App Description",
|
||||
})
|
||||
|
||||
// Run the application
|
||||
app.Run()
|
||||
|
||||
// Execute JavaScript
|
||||
app.ExecuteJavaScript(windowID, "console.log('Hello')")
|
||||
```
|
||||
|
||||
#### Service Binding
|
||||
|
||||
```go
|
||||
type MyService struct{}
|
||||
|
||||
func (s *MyService) Greet(name string) string {
|
||||
return fmt.Sprintf("Hello, %s!", name)
|
||||
}
|
||||
|
||||
app := application.New(application.Options{
|
||||
Services: []application.Service{
|
||||
application.NewService(&MyService{}),
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
### JavaScript API
|
||||
|
||||
#### Send Message to Go
|
||||
|
||||
```javascript
|
||||
window.webkit.messageHandlers.wails.postMessage({
|
||||
type: 'methodCall',
|
||||
service: 'MyService',
|
||||
method: 'Greet',
|
||||
args: ['World']
|
||||
});
|
||||
```
|
||||
|
||||
#### Receive from Go
|
||||
|
||||
```javascript
|
||||
window.wailsCallback = function(data) {
|
||||
console.log('Received:', data);
|
||||
};
|
||||
```
|
||||
|
||||
### Objective-C Bridge API
|
||||
|
||||
#### From Go to Objective-C
|
||||
|
||||
```c
|
||||
// Execute JavaScript
|
||||
ios_execute_javascript(windowID, "alert('Hello')");
|
||||
|
||||
// Complete asset request
|
||||
ios_complete_request(callbackID, htmlData, "text/html");
|
||||
```
|
||||
|
||||
#### From Objective-C to Go
|
||||
|
||||
```c
|
||||
// Serve asset request
|
||||
ServeAssetRequest(windowID, urlString, callbackID);
|
||||
|
||||
// Handle JavaScript message
|
||||
HandleJSMessage(windowID, jsonMessage);
|
||||
```
|
||||
|
||||
## Performance Metrics
|
||||
|
||||
### Target Metrics
|
||||
|
||||
- **WebView Creation**: < 100ms
|
||||
- **Asset Request**: < 10ms for cached, < 50ms for first load
|
||||
- **JS Execution**: < 5ms for simple scripts
|
||||
- **Message Passing**: < 2ms round trip
|
||||
- **Memory Usage**: < 50MB baseline
|
||||
- **Battery Impact**: < 2% per hour active use
|
||||
|
||||
### Monitoring
|
||||
|
||||
1. **Xcode Instruments**: CPU, Memory, Energy profiling
|
||||
2. **WebView Inspector**: JavaScript performance
|
||||
3. **Go Profiling**: pprof for Go code analysis
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
### Phase 1: Core Stability
|
||||
- [ ] Production-ready error handling
|
||||
- [ ] Comprehensive test suite
|
||||
- [ ] Performance optimization
|
||||
|
||||
### Phase 2: Feature Parity
|
||||
- [ ] Multiple window support
|
||||
- [ ] System tray integration
|
||||
- [ ] Native menu implementation
|
||||
|
||||
### Phase 3: iOS-Specific Features
|
||||
- [ ] Widget extension support
|
||||
- [ ] App Clip support
|
||||
- [ ] ShareSheet integration
|
||||
- [ ] Siri Shortcuts
|
||||
|
||||
### Phase 4: Advanced Features
|
||||
- [ ] Background task support
|
||||
- [ ] Push notifications
|
||||
- [ ] CloudKit integration
|
||||
- [ ] Apple Watch companion app
|
||||
|
||||
## Conclusion
|
||||
|
||||
This architecture provides a solid foundation for iOS support in Wails v3. The design prioritizes battery efficiency, native performance, and seamless integration with the existing Wails ecosystem. The proof of concept demonstrates all four required capabilities:
|
||||
|
||||
1. ✅ **WebView Creation**: Native WKWebView with optimized configuration
|
||||
2. ✅ **Request Interception**: Custom scheme handler without network ports
|
||||
3. ✅ **JavaScript Execution**: Bidirectional communication bridge
|
||||
4. ✅ **iOS Simulator Support**: Complete build and deployment pipeline
|
||||
|
||||
The architecture is designed to scale from this proof of concept to a full production implementation while maintaining the simplicity and elegance that Wails developers expect.
|
||||
|
|
@ -25,7 +25,7 @@ Erschaffe Desktop Anwendungen mit Go & Web Technologien.
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
@ -98,9 +98,9 @@ The installation instructions are on the [official website](https://wails.io/doc
|
|||
This project is supported by these kind people / companies:
|
||||
<img src="website/static/img/sponsors.svg" style="width:100%;max-width:800px;"/>
|
||||
|
||||
## Powered By
|
||||
|
||||
[](https://jb.gg/OpenSource)
|
||||
<p align="center">
|
||||
<img src="https://wails.io/img/sponsor/jetbrains-grayscale.webp" style="width: 100px"/>
|
||||
</p>
|
||||
|
||||
## FAQ
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
|
||||
</a>
|
||||
<a href="https://discord.gg/BrRSWTaxVK">
|
||||
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
|
||||
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
|
||||
|
|
|
|||
|
|
@ -16,6 +16,11 @@ includes:
|
|||
dir: v3
|
||||
optional: true
|
||||
|
||||
docs:
|
||||
taskfile: docs
|
||||
dir: docs
|
||||
optional: true
|
||||
|
||||
tasks:
|
||||
contributors:check:
|
||||
cmds:
|
||||
|
|
|
|||
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).
|
||||
36
docs/Taskfile.yml
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# https://taskfile.dev
|
||||
|
||||
version: '3'
|
||||
|
||||
vars:
|
||||
# Change this to switch package managers: bun, npm, pnpm, yarn
|
||||
PKG_MANAGER: npm
|
||||
|
||||
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
|
||||
deps: [setup]
|
||||
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'
|
||||
|
||||
348
docs/astro.config.mjs
Normal file
|
|
@ -0,0 +1,348 @@
|
|||
// @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';
|
||||
import react from '@astrojs/react';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: "https://wails.io",
|
||||
trailingSlash: "ignore",
|
||||
compressHTML: true,
|
||||
output: "static",
|
||||
build: { format: "directory" },
|
||||
devToolbar: { enabled: true },
|
||||
integrations: [
|
||||
react(),
|
||||
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: [
|
||||
{ icon: 'github', label: 'GitHub', href: 'https://github.com/wailsapp/wails' },
|
||||
{ icon: 'discord', label: 'Discord', href: 'https://discord.gg/JDdSxwjhGf' },
|
||||
{ icon: 'x.com', label: 'X', href: '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",
|
||||
collapsed: true,
|
||||
autogenerate: { directory: "features/drag-and-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" },
|
||||
],
|
||||
}),
|
||||
],
|
||||
});
|
||||
9082
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.36.2",
|
||||
"@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.25.1",
|
||||
"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 |
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 |
|
Before Width: | Height: | Size: 166 KiB 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 |