Compare commits
3323 Commits
1.0.0-a.32
...
1.11.5b
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fb1575d875 | ||
![]() |
004b946716 | ||
![]() |
6400722712 | ||
![]() |
d9ec28459e | ||
![]() |
407c1d24af | ||
![]() |
de6d8d1153 | ||
![]() |
3eb10fc05b | ||
![]() |
1ab6f77f95 | ||
![]() |
c1b15b59db | ||
![]() |
3dae5a6d47 | ||
![]() |
dab2646054 | ||
![]() |
ad0485d651 | ||
![]() |
46bbbccdc9 | ||
![]() |
ee28417a4c | ||
![]() |
746ac1eec7 | ||
![]() |
8b67c4fdd1 | ||
![]() |
c3e658d46a | ||
![]() |
ebded1a73b | ||
![]() |
cf879a5c23 | ||
![]() |
4aa3e5b34d | ||
![]() |
303e6066e2 | ||
![]() |
861cd15240 | ||
![]() |
d695ddb91a | ||
![]() |
7abb2edb2f | ||
![]() |
dfe8abd496 | ||
![]() |
61b384ee56 | ||
![]() |
d71a890430 | ||
![]() |
2c85a85fff | ||
![]() |
ce6074530f | ||
![]() |
e20228153c | ||
![]() |
e431170435 | ||
![]() |
c671d1e389 | ||
![]() |
31a5e70b26 | ||
![]() |
0c68c72b29 | ||
![]() |
2b158fdf57 | ||
![]() |
dd005b31a4 | ||
![]() |
0b467cc149 | ||
![]() |
46e2fdca00 | ||
![]() |
983b06266b | ||
![]() |
cb8708d2d9 | ||
![]() |
adbec11c04 | ||
![]() |
404f00c02b | ||
![]() |
5d346205fc | ||
![]() |
db3f1a7c09 | ||
![]() |
d2599f1f9a | ||
![]() |
ed88aafdc1 | ||
![]() |
d94deed341 | ||
![]() |
4b49d87a81 | ||
![]() |
4a6281ebf6 | ||
![]() |
332443fe81 | ||
![]() |
96c784704a | ||
![]() |
b0d10919d7 | ||
![]() |
b0e4681b5f | ||
![]() |
2958f6ea7f | ||
![]() |
4d46f94975 | ||
![]() |
4cc7e9ca98 | ||
![]() |
7688a11ef9 | ||
![]() |
80b182cc54 | ||
![]() |
b6936e7ca4 | ||
![]() |
1590326fc1 | ||
![]() |
1a1eb3264f | ||
![]() |
3d80a8aa39 | ||
![]() |
6cca084e05 | ||
![]() |
1c2c496f7e | ||
![]() |
8ab60be68b | ||
![]() |
f1fe363083 | ||
![]() |
db619790be | ||
![]() |
608749ce1a | ||
![]() |
1135744520 | ||
![]() |
c8d616e657 | ||
![]() |
3f8a6e04c8 | ||
![]() |
851cd8e037 | ||
![]() |
7b3dae8bea | ||
![]() |
e04ec0a00b | ||
![]() |
0a61c26cc1 | ||
![]() |
ff35c58787 | ||
![]() |
0a464fa93a | ||
![]() |
a9958e88d0 | ||
![]() |
d3eb5907a4 | ||
![]() |
a2017cc4c7 | ||
![]() |
87124fdaf4 | ||
![]() |
394c2b54ce | ||
![]() |
7117f1ad62 | ||
![]() |
713e267c16 | ||
![]() |
3932ec21f5 | ||
![]() |
76dc50b052 | ||
![]() |
73749aa34c | ||
![]() |
897932f954 | ||
![]() |
5a2b469e8a | ||
![]() |
ad38e6c15e | ||
![]() |
f5c6fc13a8 | ||
![]() |
7c8625821a | ||
![]() |
8a696ad088 | ||
![]() |
3c1ca8b70f | ||
![]() |
87b0cee53a | ||
![]() |
a56aa7e308 | ||
![]() |
98220c5e74 | ||
![]() |
964c886fb6 | ||
![]() |
f6536aa1d2 | ||
![]() |
ec1c861b13 | ||
![]() |
ae07ed9445 | ||
![]() |
82b94db408 | ||
![]() |
54d716e4b6 | ||
![]() |
a0330465dd | ||
![]() |
af026cfe66 | ||
![]() |
b7d5f6655d | ||
![]() |
964dedba0f | ||
![]() |
f13537e812 | ||
![]() |
037f1bf09f | ||
![]() |
9ee4212060 | ||
![]() |
e3c60cb4d8 | ||
![]() |
6fa325065e | ||
![]() |
cc88c99c45 | ||
![]() |
9d36ed6b1b | ||
![]() |
a6b8843c5c | ||
![]() |
9cf4dbd710 | ||
![]() |
589335f665 | ||
![]() |
1a04cac47c | ||
![]() |
417c6d09bf | ||
![]() |
c36cb4a76a | ||
![]() |
e65b786b46 | ||
![]() |
713f1486c3 | ||
![]() |
a0d3447202 | ||
![]() |
286999599a | ||
![]() |
9b6fae2523 | ||
![]() |
c250279b46 | ||
![]() |
f687df335e | ||
![]() |
aeec7866b4 | ||
![]() |
b49c47516e | ||
![]() |
3bf854c6c3 | ||
![]() |
b55edb8ae9 | ||
![]() |
78bc66668c | ||
![]() |
f965abe7f1 | ||
![]() |
509cb2471d | ||
![]() |
3c273d817b | ||
![]() |
21817ca97a | ||
![]() |
b31e712d2c | ||
![]() |
8f1ee11ff2 | ||
![]() |
0cb80ace3f | ||
![]() |
295a2bb8b8 | ||
![]() |
dd6757be5b | ||
![]() |
e90e4b27a3 | ||
![]() |
2932ca6c2b | ||
![]() |
06a685fc31 | ||
![]() |
e06c20d2f6 | ||
![]() |
e5527cf825 | ||
![]() |
6864af1b2f | ||
![]() |
87ff59bfa7 | ||
![]() |
ecd407d924 | ||
![]() |
ce55e7eed5 | ||
![]() |
f9b3fed403 | ||
![]() |
484f77bffc | ||
![]() |
814e697675 | ||
![]() |
e469c04125 | ||
![]() |
a33e2cbd88 | ||
![]() |
4ecccd67bd | ||
![]() |
8af25b4c67 | ||
![]() |
d6c30caf1b | ||
![]() |
7025efa6f8 | ||
![]() |
d0877eb6bc | ||
![]() |
87c62b4319 | ||
![]() |
9d3382d773 | ||
![]() |
5333e92c42 | ||
![]() |
f2c6d0a6b9 | ||
![]() |
a7e217152b | ||
![]() |
91c993da13 | ||
![]() |
5e7423bdce | ||
![]() |
ba48e15f5f | ||
![]() |
4e407fb0b9 | ||
![]() |
5d1963e0ec | ||
![]() |
c9bb6b25e9 | ||
![]() |
3bf433992e | ||
![]() |
a3a82b9fe7 | ||
![]() |
513f04d41b | ||
![]() |
5b318a8aaf | ||
![]() |
c75de7a096 | ||
![]() |
2cd5140600 | ||
![]() |
eaca3d6cc8 | ||
![]() |
2ce89bf24b | ||
![]() |
97cbd76e8e | ||
![]() |
683bb7eb41 | ||
![]() |
8b0fd0af85 | ||
![]() |
80d177aa92 | ||
![]() |
dea4ccbe58 | ||
![]() |
d156d53307 | ||
![]() |
e1c6b720a4 | ||
![]() |
4033e5d966 | ||
![]() |
b677b9d46d | ||
![]() |
91494aaf1c | ||
![]() |
f1fd0521a3 | ||
![]() |
21e96c32ce | ||
![]() |
96db1ed6db | ||
![]() |
c996f4aab5 | ||
![]() |
eaf803fcc0 | ||
![]() |
b7e1e26c14 | ||
![]() |
f84e994b50 | ||
![]() |
5473afac23 | ||
![]() |
9762d74256 | ||
![]() |
abedfedac6 | ||
![]() |
cca5e22680 | ||
![]() |
69c406c3d6 | ||
![]() |
209428bdc7 | ||
![]() |
853811d387 | ||
![]() |
bb9711639c | ||
![]() |
8f571d5800 | ||
![]() |
f61bd68ad2 | ||
![]() |
a0f5101ac5 | ||
![]() |
6a14f85d22 | ||
![]() |
1e678008a2 | ||
![]() |
2bb183d675 | ||
![]() |
2a5c5e5d69 | ||
![]() |
0a51ad3725 | ||
![]() |
031926efb7 | ||
![]() |
ce8013124b | ||
![]() |
b40ab8a551 | ||
![]() |
b6d1ad3418 | ||
![]() |
3556c66435 | ||
![]() |
40813820da | ||
![]() |
aa673cc361 | ||
![]() |
b4269b9001 | ||
![]() |
dfc9119bbc | ||
![]() |
fea803d4ce | ||
![]() |
7507f72ac0 | ||
![]() |
2eb131fb0b | ||
![]() |
a9f9e0263e | ||
![]() |
200a721a61 | ||
![]() |
45284a3845 | ||
![]() |
32c56d718c | ||
![]() |
1f709f9350 | ||
![]() |
656f046efe | ||
![]() |
ddf4afdd78 | ||
![]() |
e699756093 | ||
![]() |
e180074022 | ||
![]() |
2010c3a5c7 | ||
![]() |
c10c8ac7a7 | ||
![]() |
40b80a21dd | ||
![]() |
5ef7690578 | ||
![]() |
7abae9d69e | ||
![]() |
16d125aa20 | ||
![]() |
006eb1b1e7 | ||
![]() |
12bdf7541f | ||
![]() |
b5abda5054 | ||
![]() |
baf2bc9527 | ||
![]() |
62db2aea7a | ||
![]() |
3e8402b686 | ||
![]() |
a3850551c5 | ||
![]() |
9147e46856 | ||
![]() |
e200b6080b | ||
![]() |
8391e6fc2f | ||
![]() |
fbaea7e419 | ||
![]() |
2d8687a853 | ||
![]() |
f8b6b05a25 | ||
![]() |
3f2334a3ad | ||
![]() |
d7cdfb2b5e | ||
![]() |
9bd7b5a900 | ||
![]() |
e6fad72a2a | ||
![]() |
eb8f8ee1da | ||
![]() |
7bec1c2025 | ||
![]() |
2408524660 | ||
![]() |
fd99c13ee7 | ||
![]() |
7dc45bb438 | ||
![]() |
a8ea2e6085 | ||
![]() |
7b18c40781 | ||
![]() |
923b049b85 | ||
![]() |
59b36847f6 | ||
![]() |
a78f8586f4 | ||
![]() |
14395263aa | ||
![]() |
60e96a73eb | ||
![]() |
35107c20cb | ||
![]() |
00d9b0ad55 | ||
![]() |
00d8f60a02 | ||
![]() |
0c6fe6f77c | ||
![]() |
2656f9e641 | ||
![]() |
da609c1747 | ||
![]() |
41752dcac5 | ||
![]() |
6a52500bd3 | ||
![]() |
ebd9419a94 | ||
![]() |
dac08aa448 | ||
![]() |
c60c9fbd30 | ||
![]() |
6f5671e41f | ||
![]() |
ad79b576a5 | ||
![]() |
e2b6884d46 | ||
![]() |
3e91ecb8d5 | ||
![]() |
f7678338bc | ||
![]() |
5462f035f8 | ||
![]() |
12edc9279c | ||
![]() |
b1ef2d237d | ||
![]() |
01b8628504 | ||
![]() |
3bb11e11c3 | ||
![]() |
bfae6d975c | ||
![]() |
aa4721428f | ||
![]() |
20cb086c76 | ||
![]() |
92de61442a | ||
![]() |
173242e2bb | ||
![]() |
1c1d4697e5 | ||
![]() |
d011bb9497 | ||
![]() |
e43f9729a7 | ||
![]() |
baafa12967 | ||
![]() |
c3e33fa7f3 | ||
![]() |
daf6d6aea8 | ||
![]() |
02c9ec67c0 | ||
![]() |
63d25a11ae | ||
![]() |
a4e703f2fd | ||
![]() |
360079d15e | ||
![]() |
1473675094 | ||
![]() |
a6e03680eb | ||
![]() |
c99d3d37db | ||
![]() |
b2fa05fa22 | ||
![]() |
77070be769 | ||
![]() |
3467e5070f | ||
![]() |
5fb8fe86de | ||
![]() |
afea93d327 | ||
![]() |
53ec2f15b6 | ||
![]() |
342186584e | ||
![]() |
bd5d3c00f1 | ||
![]() |
53eeb4e921 | ||
![]() |
f2909fb3bd | ||
![]() |
1039f1db38 | ||
![]() |
741ae9eb1e | ||
![]() |
76ff984b9c | ||
![]() |
f89478bf67 | ||
![]() |
f530c389a4 | ||
![]() |
a1ab0512b7 | ||
![]() |
3dad9896eb | ||
![]() |
ff9b0c79c0 | ||
![]() |
19ed3fb303 | ||
![]() |
09dd3c94c1 | ||
![]() |
e79afc87ca | ||
![]() |
f3ff74b0df | ||
![]() |
569ee488f5 | ||
![]() |
68ebe2d503 | ||
![]() |
8939e889f0 | ||
![]() |
796a52625e | ||
![]() |
0fbc5178f6 | ||
![]() |
d1505287b2 | ||
![]() |
8959adf9e0 | ||
![]() |
5961462cd7 | ||
![]() |
af0eeb710e | ||
![]() |
75a75d78ec | ||
![]() |
ddd8eb6da4 | ||
![]() |
d9d8437b6d | ||
![]() |
c2f2a589ed | ||
![]() |
c3d09c486c | ||
![]() |
897e817f3c | ||
![]() |
491234b310 | ||
![]() |
408206ace3 | ||
![]() |
4ec493950c | ||
![]() |
4f140893c9 | ||
![]() |
9c7c44cb49 | ||
![]() |
ba89f392d6 | ||
![]() |
04308fbaea | ||
![]() |
5d1021350d | ||
![]() |
800dae11e8 | ||
![]() |
ba5f816772 | ||
![]() |
1651956cbd | ||
![]() |
4a9967b8d0 | ||
![]() |
109eb96c08 | ||
![]() |
5d0807de4c | ||
![]() |
2d7832b132 | ||
![]() |
a7e2a05d80 | ||
![]() |
d36ce36235 | ||
![]() |
34c78dff52 | ||
![]() |
bd8a2fb287 | ||
![]() |
38770d9393 | ||
![]() |
c65e747dd2 | ||
![]() |
53f2baf52b | ||
![]() |
5b9be518b8 | ||
![]() |
e0de3b410b | ||
![]() |
2b1f2fe019 | ||
![]() |
37b5ab916c | ||
![]() |
af261e126a | ||
![]() |
2cbec90c96 | ||
![]() |
01c5bd61ef | ||
![]() |
e01291afd6 | ||
![]() |
a53b3130c8 | ||
![]() |
dea4818128 | ||
![]() |
2609248564 | ||
![]() |
5749879c1c | ||
![]() |
1f3b3f15ab | ||
![]() |
09c0f5143d | ||
![]() |
025f994c62 | ||
![]() |
ad04961d19 | ||
![]() |
b5c5bd5980 | ||
![]() |
bfe83dd653 | ||
![]() |
5e32c09d9f | ||
![]() |
b0f7a06749 | ||
![]() |
9533671285 | ||
![]() |
072bc0269c | ||
![]() |
dcb3e79f64 | ||
![]() |
d58101592b | ||
![]() |
630152b91e | ||
![]() |
b8ae7401a4 | ||
![]() |
0d96889018 | ||
![]() |
9cd2cf5cc3 | ||
![]() |
658e7eac1c | ||
![]() |
7c387db3e8 | ||
![]() |
401085f231 | ||
![]() |
fe9eb8884e | ||
![]() |
bab0df47f0 | ||
![]() |
b34fa5fb07 | ||
![]() |
d88e3ec982 | ||
![]() |
36cf513431 | ||
![]() |
2530740066 | ||
![]() |
0af85f8c03 | ||
![]() |
31e67a84ec | ||
![]() |
364ad230fd | ||
![]() |
a69876325a | ||
![]() |
ac85bdfd3e | ||
![]() |
b6477b17d8 | ||
![]() |
9406515f91 | ||
![]() |
ce2e68ee32 | ||
![]() |
8b04d2d202 | ||
![]() |
963fb3ca3c | ||
![]() |
f40f9c4803 | ||
![]() |
ee275bf950 | ||
![]() |
9e4f1f4c5b | ||
![]() |
d234e6a701 | ||
![]() |
48281e0158 | ||
![]() |
e8592a6690 | ||
![]() |
e780eee207 | ||
![]() |
de14e8e935 | ||
![]() |
8ea7b497ff | ||
![]() |
d1098af7f0 | ||
![]() |
daa34e5ed4 | ||
![]() |
89243d03cd | ||
![]() |
597dfb173d | ||
![]() |
e1228844c7 | ||
![]() |
481976a353 | ||
![]() |
b1ef5770d7 | ||
![]() |
f6f561841c | ||
![]() |
0da5653fef | ||
![]() |
8afb8ee204 | ||
![]() |
d808e72d2a | ||
![]() |
02a860ba19 | ||
![]() |
2e1354cdb9 | ||
![]() |
7640e05619 | ||
![]() |
cb42d46131 | ||
![]() |
f055b61e8e | ||
![]() |
23f99999de | ||
![]() |
39c956829a | ||
![]() |
e281a18ec7 | ||
![]() |
4476c802d5 | ||
![]() |
c728bae55a | ||
![]() |
20ff1dc446 | ||
![]() |
3c40758c6a | ||
![]() |
b0a432ce78 | ||
![]() |
1891d36677 | ||
![]() |
2bf5c98b5f | ||
![]() |
d7cf35126b | ||
![]() |
d765c7c655 | ||
![]() |
0dc05978ce | ||
![]() |
001427822c | ||
![]() |
4c74517e9e | ||
![]() |
e315ff24e1 | ||
![]() |
fff8b3f532 | ||
![]() |
8ee527a3d0 | ||
![]() |
f14f87b54e | ||
![]() |
505e192b66 | ||
![]() |
5ed1ca6aa1 | ||
![]() |
7b5a778bd8 | ||
![]() |
39d090297e | ||
![]() |
e36ed36a6e | ||
![]() |
b5f32f1001 | ||
![]() |
777b215c15 | ||
![]() |
7bd5c1b41c | ||
![]() |
fa70e8bd37 | ||
![]() |
ec2badc74b | ||
![]() |
500e62cbce | ||
![]() |
4fa3f6736b | ||
![]() |
1d03c01420 | ||
![]() |
759061ffdb | ||
![]() |
76180a43a8 | ||
![]() |
5867ae2f93 | ||
![]() |
e6552c8dda | ||
![]() |
110d4e10bb | ||
![]() |
6d458d3b16 | ||
![]() |
40ce0b714e | ||
![]() |
8a5b0928c5 | ||
![]() |
7e55497e20 | ||
![]() |
2d333a23a4 | ||
![]() |
0a32810f36 | ||
![]() |
c6cbf7941c | ||
![]() |
33d8103335 | ||
![]() |
3df1973ac9 | ||
![]() |
d51391bb9b | ||
![]() |
94714e4f39 | ||
![]() |
12266179d6 | ||
![]() |
a9f2bf2d54 | ||
![]() |
3972a181e6 | ||
![]() |
986661b6e8 | ||
![]() |
99faa45d94 | ||
![]() |
daad62d939 | ||
![]() |
f775a12de9 | ||
![]() |
ebc33723b0 | ||
![]() |
2c8d2babdc | ||
![]() |
7771b5af2d | ||
![]() |
1729b553a4 | ||
![]() |
4f10a12869 | ||
![]() |
a0b372e7d9 | ||
![]() |
daded49ce8 | ||
![]() |
d5d101d3f8 | ||
![]() |
e83b698df4 | ||
![]() |
712cba1398 | ||
![]() |
b954efe624 | ||
![]() |
163d2c8d8f | ||
![]() |
cf807ea93e | ||
![]() |
0a9942d01f | ||
![]() |
6d164511b4 | ||
![]() |
441ea2000b | ||
![]() |
64281776f4 | ||
![]() |
a93fdf5a17 | ||
![]() |
050ed71c00 | ||
![]() |
7b029cc7bc | ||
![]() |
07afc4810a | ||
![]() |
ff339c3fb0 | ||
![]() |
2e21bcc542 | ||
![]() |
9a27b66661 | ||
![]() |
ee91ea86ff | ||
![]() |
5484aea042 | ||
![]() |
4c7955b099 | ||
![]() |
00654c168f | ||
![]() |
8e789732f9 | ||
![]() |
b69e8aebab | ||
![]() |
d8265d4513 | ||
![]() |
1b0c3a5d9a | ||
![]() |
124d5e0cdb | ||
![]() |
3b86f317d1 | ||
![]() |
39fdda8958 | ||
![]() |
0575373167 | ||
![]() |
9466f6ee86 | ||
![]() |
ad491edee3 | ||
![]() |
4557d87ed9 | ||
![]() |
ea245cd213 | ||
![]() |
f9f126a842 | ||
![]() |
65433172f3 | ||
![]() |
3325dc0d9f | ||
![]() |
00533fb956 | ||
![]() |
0d499b3c25 | ||
![]() |
eda9b1f20b | ||
![]() |
b9eb13f033 | ||
![]() |
391cb84117 | ||
![]() |
8ed5b50c3d | ||
![]() |
b93faff771 | ||
![]() |
671a76bf86 | ||
![]() |
d698c51ce0 | ||
![]() |
ddb0a65957 | ||
![]() |
10b6551ea3 | ||
![]() |
713ceab89f | ||
![]() |
ba864200ee | ||
![]() |
98084457ff | ||
![]() |
ba1411b9cd | ||
![]() |
ff4fe92c9f | ||
![]() |
8d3b9098c0 | ||
![]() |
43da147d44 | ||
![]() |
148c9661c2 | ||
![]() |
f0e2a68abf | ||
![]() |
d16a263480 | ||
![]() |
d50f6001d8 | ||
![]() |
bb5b0895a8 | ||
![]() |
162e6abcc1 | ||
![]() |
ce2e492632 | ||
![]() |
03f6e61935 | ||
![]() |
996f042961 | ||
![]() |
55275b23aa | ||
![]() |
188a6ea801 | ||
![]() |
ab127daa35 | ||
![]() |
c61112bc6d | ||
![]() |
9b07fd528b | ||
![]() |
1ba809825d | ||
![]() |
09119f9d18 | ||
![]() |
c78cafe605 | ||
![]() |
1c49cffc66 | ||
![]() |
452c19a7ea | ||
![]() |
cc8a5cf367 | ||
![]() |
5bbd881f01 | ||
![]() |
1c2ddea3d4 | ||
![]() |
096a28002f | ||
![]() |
23a60e79c1 | ||
![]() |
473698c744 | ||
![]() |
b955be65f4 | ||
![]() |
98668d5380 | ||
![]() |
e057e952b6 | ||
![]() |
e04cb679f9 | ||
![]() |
fd1f2fa0c4 | ||
![]() |
f1f80f3d57 | ||
![]() |
7440f12117 | ||
![]() |
2f8847b8fe | ||
![]() |
8aaccf06b2 | ||
![]() |
b83ec80e7c | ||
![]() |
7ca57da6fe | ||
![]() |
0cb7b0af95 | ||
![]() |
7646c43f45 | ||
![]() |
7cb1ae6d3c | ||
![]() |
9454ab9d6c | ||
![]() |
780b514cc0 | ||
![]() |
7b124f1dc2 | ||
![]() |
a500407dc3 | ||
![]() |
d415bde66c | ||
![]() |
8902f3202e | ||
![]() |
314bdf61ef | ||
![]() |
43c98b7ddd | ||
![]() |
e065ccb7b7 | ||
![]() |
eea9e060c8 | ||
![]() |
3377885587 | ||
![]() |
39f4f4f0ea | ||
![]() |
85c54eda7d | ||
![]() |
fc6d9ba67a | ||
![]() |
ff25a5b432 | ||
![]() |
fd8a56762d | ||
![]() |
7e4c3c0df0 | ||
![]() |
fae2187394 | ||
![]() |
c17779b6d4 | ||
![]() |
7f6c5f7211 | ||
![]() |
45f49738f3 | ||
![]() |
86390bde02 | ||
![]() |
595aa9b062 | ||
![]() |
3eed6de797 | ||
![]() |
8655aa8c37 | ||
![]() |
47c64661ec | ||
![]() |
aa4646692e | ||
![]() |
67ee00c3f8 | ||
![]() |
52e18e5125 | ||
![]() |
30a7bd49a9 | ||
![]() |
654d35bc89 | ||
![]() |
1ae11fef58 | ||
![]() |
6023462bbd | ||
![]() |
163cc6b6bd | ||
![]() |
891e9bacaa | ||
![]() |
c8796d9a54 | ||
![]() |
0c918caed2 | ||
![]() |
46f6d28fca | ||
![]() |
7d4641c5ec | ||
![]() |
fc1ec9123d | ||
![]() |
220415f698 | ||
![]() |
82389925bc | ||
![]() |
7714ef83aa | ||
![]() |
09ce9f3107 | ||
![]() |
a409016f7a | ||
![]() |
7585514868 | ||
![]() |
99ab59f3a3 | ||
![]() |
cf0662d0a4 | ||
![]() |
7d20a9ed84 | ||
![]() |
3878dcd27f | ||
![]() |
9fb2e9d30d | ||
![]() |
d6a1889e9f | ||
![]() |
34b0c8e774 | ||
![]() |
f11ae35b07 | ||
![]() |
18d62429bf | ||
![]() |
65d56afc02 | ||
![]() |
71dde4d0dd | ||
![]() |
576632fbbf | ||
![]() |
f7995f6da7 | ||
![]() |
6115bbabc8 | ||
![]() |
dc1c166ac2 | ||
![]() |
279849debe | ||
![]() |
07c5474cf2 | ||
![]() |
bd5fc861df | ||
![]() |
6988060269 | ||
![]() |
cf6ed8c382 | ||
![]() |
d536f3e93c | ||
![]() |
cc2262dbaf | ||
![]() |
f3fa0eb849 | ||
![]() |
7c9bca1325 | ||
![]() |
493f299cce | ||
![]() |
5d7248d4c7 | ||
![]() |
d9e8fb3469 | ||
![]() |
a5051e116a | ||
![]() |
3358d0e3d7 | ||
![]() |
ca183c7de6 | ||
![]() |
b39961e43e | ||
![]() |
59e8c120e2 | ||
![]() |
382dcc8d0c | ||
![]() |
beab1632b3 | ||
![]() |
e84cb34b8d | ||
![]() |
457c2131e4 | ||
![]() |
35f38a116a | ||
![]() |
054f628192 | ||
![]() |
b844859799 | ||
![]() |
ddaeec85d4 | ||
![]() |
a84d62f307 | ||
![]() |
b4724cff18 | ||
![]() |
1e72461806 | ||
![]() |
41617183ab | ||
![]() |
9aa48b2645 | ||
![]() |
20ab35fbf9 | ||
![]() |
de0884d654 | ||
![]() |
c285427fe2 | ||
![]() |
61bbcbda37 | ||
![]() |
7468f6304c | ||
![]() |
ac915b0373 | ||
![]() |
60e2cab249 | ||
![]() |
12891ab238 | ||
![]() |
c4480f208f | ||
![]() |
4352051c6e | ||
![]() |
39325539a2 | ||
![]() |
1d909c661e | ||
![]() |
1a94159bc9 | ||
![]() |
951cdc2d51 | ||
![]() |
74728b4544 | ||
![]() |
7819b561ad | ||
![]() |
cc0e18012d | ||
![]() |
f7c0b04884 | ||
![]() |
3de1673929 | ||
![]() |
6bcaab91ef | ||
![]() |
e246a6cd67 | ||
![]() |
a16f311be7 | ||
![]() |
8e316068ba | ||
![]() |
87fc6c8a73 | ||
![]() |
faf136756c | ||
![]() |
8e64623592 | ||
![]() |
5e256b9beb | ||
![]() |
ec30e4c100 | ||
![]() |
32ab4a660f | ||
![]() |
079ec27a21 | ||
![]() |
7a4afd947d | ||
![]() |
bb7c400855 | ||
![]() |
81fed8a1d8 | ||
![]() |
023096477c | ||
![]() |
df597e6452 | ||
![]() |
68cf549df3 | ||
![]() |
22060f90bf | ||
![]() |
16f242da13 | ||
![]() |
12cc944728 | ||
![]() |
f9656c16bf | ||
![]() |
62ee67ce80 | ||
![]() |
1b97e5bc97 | ||
![]() |
a97ff24035 | ||
![]() |
dee0016836 | ||
![]() |
6b306daf21 | ||
![]() |
2593d2137b | ||
![]() |
679c764403 | ||
![]() |
6771b137ea | ||
![]() |
a7e51408c2 | ||
![]() |
eab83659ca | ||
![]() |
a90c6c445c | ||
![]() |
aae4f0520c | ||
![]() |
e74cdc6ca0 | ||
![]() |
df666813f3 | ||
![]() |
4a8790e07f | ||
![]() |
7bbe5a6f06 | ||
![]() |
9f8dfddfa8 | ||
![]() |
fbe81666bf | ||
![]() |
9712ced2bf | ||
![]() |
9dc0ce4b13 | ||
![]() |
b71903e04b | ||
![]() |
48ab77ef52 | ||
![]() |
35b3ea2047 | ||
![]() |
620f63e1f3 | ||
![]() |
35243167b3 | ||
![]() |
93d844b950 | ||
![]() |
bc863f3f2c | ||
![]() |
cc9b2cdaed | ||
![]() |
1b091bb07f | ||
![]() |
99b6ef9374 | ||
![]() |
c1870fee32 | ||
![]() |
61311bd3e6 | ||
![]() |
9238244ea2 | ||
![]() |
21cdc29f27 | ||
![]() |
e4a567c63a | ||
![]() |
adfa094153 | ||
![]() |
f94d35519e | ||
![]() |
69e12f40d7 | ||
![]() |
a17966b8d4 | ||
![]() |
053a8194a2 | ||
![]() |
bdf7c84a35 | ||
![]() |
b84f1e229b | ||
![]() |
41938191c7 | ||
![]() |
37a985c936 | ||
![]() |
ebdc9368da | ||
![]() |
e75e8d170d | ||
![]() |
ec7a30141b | ||
![]() |
5e3385e9f3 | ||
![]() |
76e47e5356 | ||
![]() |
8e9d885708 | ||
![]() |
d93a7c0e91 | ||
![]() |
93df13ff78 | ||
![]() |
58d83d8f92 | ||
![]() |
cc52ec2b71 | ||
![]() |
0f442ae743 | ||
![]() |
dcd6f0085b | ||
![]() |
fab823b957 | ||
![]() |
dccee58476 | ||
![]() |
a3af69c978 | ||
![]() |
b92c098ef1 | ||
![]() |
1cc5cd1b1d | ||
![]() |
2345e144cf | ||
![]() |
ceb0e97610 | ||
![]() |
c3585ed714 | ||
![]() |
bd5f52b4e2 | ||
![]() |
e6c7c30bdd | ||
![]() |
1026350cbd | ||
![]() |
7e897c2a72 | ||
![]() |
940500c992 | ||
![]() |
9ff353cbcf | ||
![]() |
1db5acdf7b | ||
![]() |
cb100e5bb6 | ||
![]() |
4d6893dc49 | ||
![]() |
40b5866806 | ||
![]() |
59e64499fb | ||
![]() |
a024c509c6 | ||
![]() |
1b72cc2114 | ||
![]() |
c0d732da7c | ||
![]() |
1b8891a59b | ||
![]() |
6f9e489ba5 | ||
![]() |
2c82d44b64 | ||
![]() |
7364062e8c | ||
![]() |
0044b0206a | ||
![]() |
82a98b8dd3 | ||
![]() |
435484482f | ||
![]() |
1ad71ab5ae | ||
![]() |
a4cdfc34ea | ||
![]() |
bf31cc24d6 | ||
![]() |
baa4402a62 | ||
![]() |
638c7c7420 | ||
![]() |
08bd479cf9 | ||
![]() |
18d0900b32 | ||
![]() |
e24fd97370 | ||
![]() |
a64adb6b16 | ||
![]() |
cf431e1e4b | ||
![]() |
57071d21a7 | ||
![]() |
13694d711d | ||
![]() |
973d6f64e2 | ||
![]() |
48a7e81906 | ||
![]() |
ba81ad5bce | ||
![]() |
bf34c9a9c3 | ||
![]() |
10ae6491c9 | ||
![]() |
1609569dc9 | ||
![]() |
63c52cc40a | ||
![]() |
ebaa39e17e | ||
![]() |
327c8f5a57 | ||
![]() |
492556a424 | ||
![]() |
8c0e4a09d1 | ||
![]() |
ee16ce65ec | ||
![]() |
2affdf680f | ||
![]() |
84bbb4ba63 | ||
![]() |
b8baca2100 | ||
![]() |
15a056b466 | ||
![]() |
205803c1be | ||
![]() |
a66afafe31 | ||
![]() |
657cb4c4cd | ||
![]() |
7df6378872 | ||
![]() |
c81cf324b8 | ||
![]() |
57a33beb81 | ||
![]() |
a6e446e5cf | ||
![]() |
19bb1a1ce1 | ||
![]() |
68a3096683 | ||
![]() |
c857541666 | ||
![]() |
4abca2f9b5 | ||
![]() |
cbbae1e26a | ||
![]() |
c855ea5838 | ||
![]() |
6df2c97cc5 | ||
![]() |
a6a7f1ab4c | ||
![]() |
690ae8641e | ||
![]() |
950df83558 | ||
![]() |
08baf5ae87 | ||
![]() |
2835104029 | ||
![]() |
cf3de23515 | ||
![]() |
664daf4f84 | ||
![]() |
baff7cb947 | ||
![]() |
e2775c17de | ||
![]() |
dba5771f3f | ||
![]() |
948abc60d4 | ||
![]() |
febeeb96f0 | ||
![]() |
e38edc1be0 | ||
![]() |
0f6bd9c806 | ||
![]() |
415031230c | ||
![]() |
dfac1c1b98 | ||
![]() |
0579c7affa | ||
![]() |
06e9a93d5e | ||
![]() |
c708d0ccf2 | ||
![]() |
76071aeda0 | ||
![]() |
bbe385dfa0 | ||
![]() |
5034dd3f02 | ||
![]() |
b31475c913 | ||
![]() |
d67b0d3f57 | ||
![]() |
9bf97e78e5 | ||
![]() |
fdc8fd1b01 | ||
![]() |
fdb26de664 | ||
![]() |
668e30aebe | ||
![]() |
a8c39f9db8 | ||
![]() |
eddc804a92 | ||
![]() |
4bc5e41c35 | ||
![]() |
9d9d2d7d50 | ||
![]() |
c322051ddd | ||
![]() |
7b6b69356c | ||
![]() |
2140029a4a | ||
![]() |
944e7cb60a | ||
![]() |
8783c469be | ||
![]() |
3c323519a8 | ||
![]() |
c71cea87cc | ||
![]() |
a0d2770d70 | ||
![]() |
ff14d2b32e | ||
![]() |
05a97971b1 | ||
![]() |
3986fa875d | ||
![]() |
06a29292cc | ||
![]() |
b068e9729a | ||
![]() |
e6166c7512 | ||
![]() |
ceefc07609 | ||
![]() |
fceb1e85a6 | ||
![]() |
cad5703185 | ||
![]() |
beb7873c5d | ||
![]() |
91e97143c9 | ||
![]() |
6ffe5fd249 | ||
![]() |
3da54549ea | ||
![]() |
a6ec05da49 | ||
![]() |
47cb4e488f | ||
![]() |
3649d7f111 | ||
![]() |
8372671b70 | ||
![]() |
945eec6931 | ||
![]() |
2c92c61015 | ||
![]() |
d56f4962bf | ||
![]() |
34355d8e00 | ||
![]() |
27dc41dd9e | ||
![]() |
8080e2fe47 | ||
![]() |
a716c99152 | ||
![]() |
df30fcf37b | ||
![]() |
71d2bfab38 | ||
![]() |
62a7e70ebe | ||
![]() |
c7bd7d0bf6 | ||
![]() |
6b3e0c4ac4 | ||
![]() |
8e6b4515ed | ||
![]() |
4d364acc1d | ||
![]() |
894d237841 | ||
![]() |
123128bfc7 | ||
![]() |
59c559de14 | ||
![]() |
852d928860 | ||
![]() |
6abd7ea690 | ||
![]() |
6bbf42c000 | ||
![]() |
73d1ccb257 | ||
![]() |
3c3efde2e6 | ||
![]() |
f6de1520e2 | ||
![]() |
a0da6da320 | ||
![]() |
d5516fae89 | ||
![]() |
0917cc82e0 | ||
![]() |
cabd426801 | ||
![]() |
534627fd11 | ||
![]() |
60be486095 | ||
![]() |
be6cd98cec | ||
![]() |
3b3d5292e5 | ||
![]() |
06ac821c52 | ||
![]() |
a5e34fc9a5 | ||
![]() |
af663d3656 | ||
![]() |
25b41f8bb6 | ||
![]() |
e1b57df990 | ||
![]() |
1eb04862fc | ||
![]() |
e3bcffdd6b | ||
![]() |
1aea93a57b | ||
![]() |
697db429f6 | ||
![]() |
ca11631531 | ||
![]() |
7a6398db45 | ||
![]() |
d9960e8a5e | ||
![]() |
93e267cb95 | ||
![]() |
206e395f13 | ||
![]() |
7537a13640 | ||
![]() |
6a92bbcb52 | ||
![]() |
5bfb7c63ac | ||
![]() |
e13b78833d | ||
![]() |
5884fee7ac | ||
![]() |
aec9c9d34b | ||
![]() |
89bb3a7f2c | ||
![]() |
8813c5174e | ||
![]() |
47824d8bca | ||
![]() |
bf91ffddf3 | ||
![]() |
1a293fc5ff | ||
![]() |
786a377ada | ||
![]() |
12e2781668 | ||
![]() |
5ace391a61 | ||
![]() |
03cd059a6f | ||
![]() |
1298c67d1b | ||
![]() |
31f5762efd | ||
![]() |
b393979d53 | ||
![]() |
fae7eaed93 | ||
![]() |
c27a26eee4 | ||
![]() |
46ff0020bb | ||
![]() |
869c2eb8b2 | ||
![]() |
422bc5baf3 | ||
![]() |
76d872cbe5 | ||
![]() |
d003a31353 | ||
![]() |
425d0ea951 | ||
![]() |
721e121ebe | ||
![]() |
07ede1b96b | ||
![]() |
48879fb6a0 | ||
![]() |
855c36280b | ||
![]() |
31ef8d2ec9 | ||
![]() |
a5ae4077cf | ||
![]() |
d6acd4deb8 | ||
![]() |
5f7283531f | ||
![]() |
ab836eb762 | ||
![]() |
22cc24e9f8 | ||
![]() |
4f41aab3fa | ||
![]() |
539535e66f | ||
![]() |
320fd57d8a | ||
![]() |
8b98469936 | ||
![]() |
d16992f5b2 | ||
![]() |
9f6fbc5e57 | ||
![]() |
aebc2c9660 | ||
![]() |
23d9487ca7 | ||
![]() |
bd4f9788cc | ||
![]() |
40a843200f | ||
![]() |
22cad83c8f | ||
![]() |
3319420c31 | ||
![]() |
580e3596b2 | ||
![]() |
42c93a7fc4 | ||
![]() |
c4b4aa6287 | ||
![]() |
2c9358ca07 | ||
![]() |
d35fcabf92 | ||
![]() |
e387652c8b | ||
![]() |
4ce9385fd5 | ||
![]() |
6f612d62cf | ||
![]() |
ee0bcfc413 | ||
![]() |
17b72bc8fd | ||
![]() |
908c8114bb | ||
![]() |
48badb83cf | ||
![]() |
6600e60498 | ||
![]() |
c058950119 | ||
![]() |
7cf0e05f70 | ||
![]() |
f2460549e0 | ||
![]() |
290aa09f89 | ||
![]() |
f37e80535a | ||
![]() |
be2a44dab9 | ||
![]() |
b5c889ab01 | ||
![]() |
84bf229944 | ||
![]() |
2dbd80f539 | ||
![]() |
7990bfefad | ||
![]() |
d457e6fc76 | ||
![]() |
871a16cb5b | ||
![]() |
d2ee1507d9 | ||
![]() |
c76066c99b | ||
![]() |
1961969a82 | ||
![]() |
0e8646d592 | ||
![]() |
3708b86e58 | ||
![]() |
1475d3daee | ||
![]() |
508812914f | ||
![]() |
988056e59c | ||
![]() |
b79d6a7347 | ||
![]() |
1c83609b8c | ||
![]() |
4605b4f3ca | ||
![]() |
dd9c57a1d2 | ||
![]() |
2898dc497a | ||
![]() |
06a03cd4ca | ||
![]() |
bf6f0b19fd | ||
![]() |
da04a7a629 | ||
![]() |
523066598e | ||
![]() |
d16ae38b28 | ||
![]() |
f0976bc582 | ||
![]() |
527b8a39f8 | ||
![]() |
64cadfe37a | ||
![]() |
5527aaebe9 | ||
![]() |
8dfffc6ac0 | ||
![]() |
302331bc7d | ||
![]() |
d2477b5f8a | ||
![]() |
8f1b7723c8 | ||
![]() |
e353d48af8 | ||
![]() |
3a5a0be013 | ||
![]() |
1f6233c1e1 | ||
![]() |
19b7eacfc4 | ||
![]() |
4824404636 | ||
![]() |
23697a8930 | ||
![]() |
1e624ae580 | ||
![]() |
8eaceb49cf | ||
![]() |
459a37fc59 | ||
![]() |
02342e2806 | ||
![]() |
48a5891c91 | ||
![]() |
5620e8d1ac | ||
![]() |
0545b4b24e | ||
![]() |
5937338348 | ||
![]() |
5e25b0ade9 | ||
![]() |
26a59ee1c1 | ||
![]() |
16e0b5f319 | ||
![]() |
6d63d56fdd | ||
![]() |
5e0b684b53 | ||
![]() |
7b67a08dd6 | ||
![]() |
23fb79c9a3 | ||
![]() |
071b7d2857 | ||
![]() |
0666d18f06 | ||
![]() |
b65fbb53c8 | ||
![]() |
c401dfabdc | ||
![]() |
25407369de | ||
![]() |
63109b4337 | ||
![]() |
365214d7f9 | ||
![]() |
d9fc1e81cd | ||
![]() |
f5a2206004 | ||
![]() |
ff0c707061 | ||
![]() |
ece702ec86 | ||
![]() |
5fba4cf081 | ||
![]() |
9d2192def1 | ||
![]() |
f0f58844b8 | ||
![]() |
feda757c81 | ||
![]() |
8ca765cce0 | ||
![]() |
7758b14f26 | ||
![]() |
846b24603e | ||
![]() |
42dbff273f | ||
![]() |
b1b83ae32a | ||
![]() |
24d8e7a5d7 | ||
![]() |
ff1c57c5a3 | ||
![]() |
01d9fc31c1 | ||
![]() |
88fbae4bec | ||
![]() |
ffbe58b808 | ||
![]() |
eea432418e | ||
![]() |
d9c8609d43 | ||
![]() |
aa70c1bd54 | ||
![]() |
20b04937c9 | ||
![]() |
5fa7d9cc6e | ||
![]() |
7b21cf5971 | ||
![]() |
5a367fdad0 | ||
![]() |
f0eeec83ee | ||
![]() |
9c47e2a35b | ||
![]() |
ba3eca5629 | ||
![]() |
792c562a35 | ||
![]() |
0cdc7351df | ||
![]() |
093074a9fc | ||
![]() |
61190233fc | ||
![]() |
b55e0eb1d3 | ||
![]() |
275f8d1531 | ||
![]() |
da1a032c96 | ||
![]() |
d5cea8bb0e | ||
![]() |
07b70efd19 | ||
![]() |
9bad51b94e | ||
![]() |
b8aa560d52 | ||
![]() |
e39419af25 | ||
![]() |
3e89b1dae6 | ||
![]() |
c47c140489 | ||
![]() |
2b17b5bd72 | ||
![]() |
faff428afb | ||
![]() |
031043f2f2 | ||
![]() |
e7175149d0 | ||
![]() |
4975ff6fdc | ||
![]() |
d81745eef2 | ||
![]() |
20ede93eb1 | ||
![]() |
7b41eb753d | ||
![]() |
00de303335 | ||
![]() |
7129e9d73b | ||
![]() |
384e268516 | ||
![]() |
1ad8a9b7f1 | ||
![]() |
4cbf5740e7 | ||
![]() |
ab33aae127 | ||
![]() |
307becf086 | ||
![]() |
9c11e19db8 | ||
![]() |
4bca6a8306 | ||
![]() |
d3a04d043b | ||
![]() |
89d1f7a731 | ||
![]() |
773a65a87e | ||
![]() |
3f22bd4e79 | ||
![]() |
5259fa7cbd | ||
![]() |
9dd58ce0a4 | ||
![]() |
877d2d1d16 | ||
![]() |
097b7fb262 | ||
![]() |
7975494bd6 | ||
![]() |
fd9a754209 | ||
![]() |
c2f4d7cd86 | ||
![]() |
5ff6d80dc8 | ||
![]() |
cd8a8b6a97 | ||
![]() |
3413399dfa | ||
![]() |
93ab8babbc | ||
![]() |
8d8c9e8a01 | ||
![]() |
aec9ef390c | ||
![]() |
6e5a56bed5 | ||
![]() |
175d12cf42 | ||
![]() |
6d9fd13fbe | ||
![]() |
9870047d05 | ||
![]() |
010f9acb54 | ||
![]() |
a1a9f645f5 | ||
![]() |
db5dd9ba7f | ||
![]() |
30f1def143 | ||
![]() |
b9dd0c6bf1 | ||
![]() |
d158472709 | ||
![]() |
cb9c7d5c48 | ||
![]() |
f580e53fc2 | ||
![]() |
c68456310c | ||
![]() |
8d156192d5 | ||
![]() |
0ab41a84bd | ||
![]() |
a3e1033c11 | ||
![]() |
ebcd656e70 | ||
![]() |
68ea69bad6 | ||
![]() |
4f9feeb953 | ||
![]() |
7f99691e92 | ||
![]() |
4f37352afe | ||
![]() |
32c001d06d | ||
![]() |
b81e1a3c70 | ||
![]() |
d32950a1b9 | ||
![]() |
da13e238ac | ||
![]() |
3c58f91d28 | ||
![]() |
c004cd47f0 | ||
![]() |
6db11763f6 | ||
![]() |
1e99b8cf36 | ||
![]() |
fea9987b02 | ||
![]() |
67a6d9c844 | ||
![]() |
b2d476659e | ||
![]() |
8381fba596 | ||
![]() |
5342837f0a | ||
![]() |
2787546f89 | ||
![]() |
34c9d808f8 | ||
![]() |
02f1f52c2f | ||
![]() |
8d2e0b0a89 | ||
![]() |
a408449e2c | ||
![]() |
c19748bbbe | ||
![]() |
b6063c0831 | ||
![]() |
00682ed150 | ||
![]() |
af24ff6049 | ||
![]() |
e0376b88f5 | ||
![]() |
188fea025d | ||
![]() |
d69cc7edf4 | ||
![]() |
f9ec71ba58 | ||
![]() |
1c59a6d461 | ||
![]() |
29a0707bcd | ||
![]() |
d4a9f9058d | ||
![]() |
5c2274f429 | ||
![]() |
ca57fa391d | ||
![]() |
9c7c8fc227 | ||
![]() |
d1471d197f | ||
![]() |
add4576f0a | ||
![]() |
acacf0885c | ||
![]() |
7deaecc123 | ||
![]() |
b82b0322a1 | ||
![]() |
c6a92c2670 | ||
![]() |
1d9c2f878e | ||
![]() |
dd7233c81e | ||
![]() |
d4dd298ef8 | ||
![]() |
53e015a7aa | ||
![]() |
9203918788 | ||
![]() |
b9ae18a0ca | ||
![]() |
d548b8cb6d | ||
![]() |
3931f8195b | ||
![]() |
7077a01dad | ||
![]() |
26b3195bdd | ||
![]() |
9b79e3c1ac | ||
![]() |
405b2180cf | ||
![]() |
462f354a9d | ||
![]() |
d3f14bd9c3 | ||
![]() |
d9939ea9be | ||
![]() |
9c5ae70562 | ||
![]() |
cfa03fe1f9 | ||
![]() |
d96655d6b7 | ||
![]() |
df745e1b43 | ||
![]() |
b863045a8f | ||
![]() |
ac53d731e9 | ||
![]() |
fa62827717 | ||
![]() |
5423aee3d5 | ||
![]() |
74a4d982a5 | ||
![]() |
a7184adc4d | ||
![]() |
3fba559323 | ||
![]() |
d41f0d7cf4 | ||
![]() |
9ebfc973f3 | ||
![]() |
9850c977be | ||
![]() |
7fc4c03659 | ||
![]() |
9c9627573b | ||
![]() |
abedcd8896 | ||
![]() |
63fcbc73a5 | ||
![]() |
a724f9c6f2 | ||
![]() |
c67440a940 | ||
![]() |
d996db31d6 | ||
![]() |
504faad077 | ||
![]() |
c0eeab939b | ||
![]() |
ca4952c02c | ||
![]() |
952385f362 | ||
![]() |
343bfe12fd | ||
![]() |
ac600ad91b | ||
![]() |
acfdb5b191 | ||
![]() |
ca1e0ffdea | ||
![]() |
a3bebadff8 | ||
![]() |
22a042d35d | ||
![]() |
0def2c24c8 | ||
![]() |
a09f3ab32c | ||
![]() |
5f7fcd57d2 | ||
![]() |
952c02d3d6 | ||
![]() |
355d98eb53 | ||
![]() |
3972f3e2a7 | ||
![]() |
c3f22ec7eb | ||
![]() |
8330b31a6d | ||
![]() |
c89e953b6e | ||
![]() |
1536f5805e | ||
![]() |
a640509e04 | ||
![]() |
ea0a808e15 | ||
![]() |
20f3a4128c | ||
![]() |
f6bad14087 | ||
![]() |
83f8975a50 | ||
![]() |
ce7c1f797f | ||
![]() |
bb9a97496d | ||
![]() |
b94b5b2d90 | ||
![]() |
b523f3d24e | ||
![]() |
79966cb5ed | ||
![]() |
c9f97665be | ||
![]() |
d618181dc7 | ||
![]() |
e2b6054b17 | ||
![]() |
0f6bdcd88d | ||
![]() |
74c9923f0b | ||
![]() |
a86bb5197d | ||
![]() |
6c7b15eeca | ||
![]() |
4c44f874b9 | ||
![]() |
4efc2cd05f | ||
![]() |
839d5ce1f9 | ||
![]() |
7c2d35d746 | ||
![]() |
eff0b040a2 | ||
![]() |
eede41fb18 | ||
![]() |
a66abd037e | ||
![]() |
7edce1967f | ||
![]() |
6c028d8511 | ||
![]() |
ef32e5f990 | ||
![]() |
ba435d9c14 | ||
![]() |
f6db693407 | ||
![]() |
0f446a5435 | ||
![]() |
0b17ceda90 | ||
![]() |
f000af56e7 | ||
![]() |
d06d684c96 | ||
![]() |
24063ad883 | ||
![]() |
3aa2109986 | ||
![]() |
5c3c9f3dfa | ||
![]() |
07a9aabe20 | ||
![]() |
4702b8ffed | ||
![]() |
b071c7ff11 | ||
![]() |
9d8b8458bf | ||
![]() |
73bc2382bb | ||
![]() |
4a4c8a7b2b | ||
![]() |
0a9f88a2fb | ||
![]() |
8bed8e2cf7 | ||
![]() |
c8b396b99d | ||
![]() |
afc636a20f | ||
![]() |
bd0b012bce | ||
![]() |
86b0a9dac2 | ||
![]() |
f344c0d41d | ||
![]() |
f70c599afd | ||
![]() |
08cf77eb23 | ||
![]() |
25910c5189 | ||
![]() |
09d17f2cfe | ||
![]() |
c9cf757964 | ||
![]() |
98b64e2fad | ||
![]() |
fbfab42e8b | ||
![]() |
c44c63d5ce | ||
![]() |
1e3b1a6605 | ||
![]() |
ef2a2a5efc | ||
![]() |
ccfe709789 | ||
![]() |
43563ccff7 | ||
![]() |
db2673cf27 | ||
![]() |
351cc884ec | ||
![]() |
d6823beb95 | ||
![]() |
dfede695a7 | ||
![]() |
b0354fa8b9 | ||
![]() |
41cecd4947 | ||
![]() |
dd5a59a1cb | ||
![]() |
ee86bff81c | ||
![]() |
9fb04e4f7c | ||
![]() |
74a4efddf1 | ||
![]() |
10906f91f5 | ||
![]() |
816d6887ad | ||
![]() |
e950e012ed | ||
![]() |
4fdd0993d7 | ||
![]() |
8e783f948f | ||
![]() |
e6313c4d5f | ||
![]() |
7de3843cd9 | ||
![]() |
425d334f8b | ||
![]() |
609854c28d | ||
![]() |
fd09bd2092 | ||
![]() |
1aa00bfa2a | ||
![]() |
d757c36569 | ||
![]() |
899567b305 | ||
![]() |
59bf54001e | ||
![]() |
c50b9cd555 | ||
![]() |
92fc0f4044 | ||
![]() |
7b90548f88 | ||
![]() |
c0d64f91c0 | ||
![]() |
cd86c556a9 | ||
![]() |
c909421090 | ||
![]() |
b66b46b8a0 | ||
![]() |
d94aff97ea | ||
![]() |
191597e333 | ||
![]() |
270af0ff00 | ||
![]() |
2f1e292e06 | ||
![]() |
dd5461273c | ||
![]() |
818100e3d8 | ||
![]() |
1dbc492aac | ||
![]() |
5c0e99008b | ||
![]() |
60553b996c | ||
![]() |
5886241e8d | ||
![]() |
bdcc36c321 | ||
![]() |
9fd989106d | ||
![]() |
f99f6f4ea7 | ||
![]() |
62df1fbc59 | ||
![]() |
a512948eb0 | ||
![]() |
2aaf3f82e6 | ||
![]() |
af79354d46 | ||
![]() |
f6d3b4d868 | ||
![]() |
20882f65cc | ||
![]() |
922e909a7f | ||
![]() |
98c5f0efb7 | ||
![]() |
509ede1f98 | ||
![]() |
e0ea3b5866 | ||
![]() |
aa67693b8d | ||
![]() |
f70f27fc94 | ||
![]() |
1b2eb4a92d | ||
![]() |
661916eac6 | ||
![]() |
e9c662cbf7 | ||
![]() |
f123e0534b | ||
![]() |
9160111e20 | ||
![]() |
1318341451 | ||
![]() |
e9456ac073 | ||
![]() |
5865b9fd2d | ||
![]() |
e1c3bac43a | ||
![]() |
7e5be9f0b8 | ||
![]() |
e3e7eec78a | ||
![]() |
f5bffa4b24 | ||
![]() |
0978259d2e | ||
![]() |
d6a140ea7d | ||
![]() |
33744a4a73 | ||
![]() |
3bb64df473 | ||
![]() |
9775e1c75d | ||
![]() |
225ab67a50 | ||
![]() |
838569e386 | ||
![]() |
040a8fad5b | ||
![]() |
143218913d | ||
![]() |
2b7580f186 | ||
![]() |
babdc9568f | ||
![]() |
e4103c9d4a | ||
![]() |
dff60ee6ef | ||
![]() |
14664bd38f | ||
![]() |
f61feb54d4 | ||
![]() |
bbeb8aa884 | ||
![]() |
864879eabe | ||
![]() |
d10ce64f2d | ||
![]() |
c93263ccea | ||
![]() |
37092f0359 | ||
![]() |
e26ff172c8 | ||
![]() |
619f979232 | ||
![]() |
1710ebae19 | ||
![]() |
50a48cdf24 | ||
![]() |
997384e832 | ||
![]() |
1f43997088 | ||
![]() |
097404b3d1 | ||
![]() |
8562cfb813 | ||
![]() |
70cd0f90c7 | ||
![]() |
8981160627 | ||
![]() |
e01af2fe97 | ||
![]() |
a5d1537b75 | ||
![]() |
a035b6f1c6 | ||
![]() |
18f84476ef | ||
![]() |
ed7735e3b8 | ||
![]() |
859ff6c088 | ||
![]() |
a3c78e2387 | ||
![]() |
87153390c8 | ||
![]() |
a679bcc669 | ||
![]() |
2d3727670c | ||
![]() |
be4e05f1e5 | ||
![]() |
81b1ee1bf6 | ||
![]() |
eb330dc484 | ||
![]() |
2b0c6c6f73 | ||
![]() |
88c0d896a5 | ||
![]() |
c41f4392ca | ||
![]() |
a40a91c0a7 | ||
![]() |
c613abc5fc | ||
![]() |
66c8d003d9 | ||
![]() |
d294ebb872 | ||
![]() |
6d6f3751e3 | ||
![]() |
62e165b9ac | ||
![]() |
ec5b4abab9 | ||
![]() |
2309e1085f | ||
![]() |
0e5107181c | ||
![]() |
62f4172258 | ||
![]() |
981ac1f23a | ||
![]() |
335fb757ab | ||
![]() |
5ea8fd169c | ||
![]() |
f55c534659 | ||
![]() |
6c9fb9b3bb | ||
![]() |
46c8d6d3e4 | ||
![]() |
301490a341 | ||
![]() |
e9936865d9 | ||
![]() |
c003a2594b | ||
![]() |
a14220c12d | ||
![]() |
b94e4dcff1 | ||
![]() |
604d0da2d5 | ||
![]() |
d7c8bc246b | ||
![]() |
e6b6f0fc7a | ||
![]() |
f7f87131cd | ||
![]() |
59f9b9967e | ||
![]() |
c7a80d5c6e | ||
![]() |
73f932fade | ||
![]() |
2d4f9d4d7b | ||
![]() |
203163de43 | ||
![]() |
98fa56eed5 | ||
![]() |
3ecd929125 | ||
![]() |
5c00c8f1ab | ||
![]() |
5fcb120811 | ||
![]() |
2fc67fae18 | ||
![]() |
591460d2d7 | ||
![]() |
697532d5b4 | ||
![]() |
dce081ce62 | ||
![]() |
6207d5ebf5 | ||
![]() |
dd33e152fc | ||
![]() |
18b64c3999 | ||
![]() |
fbd81f431e | ||
![]() |
a962533301 | ||
![]() |
379ccdf33d | ||
![]() |
70cbc6033b | ||
![]() |
4c5279e5eb | ||
![]() |
3d61e4ed68 | ||
![]() |
0191bf4279 | ||
![]() |
2473c38e57 | ||
![]() |
e868d8a67f | ||
![]() |
cfe3ea22dd | ||
![]() |
34e5e6c151 | ||
![]() |
3aaed105cc | ||
![]() |
d9813e2b03 | ||
![]() |
049a0f8729 | ||
![]() |
e84e774fcf | ||
![]() |
57b16da239 | ||
![]() |
795e71a27a | ||
![]() |
c915fe63b6 | ||
![]() |
a0481737aa | ||
![]() |
16c76723fe | ||
![]() |
d26e51c434 | ||
![]() |
8e953abe94 | ||
![]() |
3b3db4c1d2 | ||
![]() |
81de13e251 | ||
![]() |
8770178c9b | ||
![]() |
1152699be6 | ||
![]() |
3359d3969c | ||
![]() |
99f774a2f8 | ||
![]() |
8da63bc3c6 | ||
![]() |
c2b77d96fb | ||
![]() |
e27f558146 | ||
![]() |
dcfe4464b6 | ||
![]() |
9bfd96a9dd | ||
![]() |
c51b2f3267 | ||
![]() |
344cf8379c | ||
![]() |
cbc342ce1a | ||
![]() |
9b8b9f5e14 | ||
![]() |
cd34782bd5 | ||
![]() |
6c4af27ec6 | ||
![]() |
0333413505 | ||
![]() |
4124a3c8fe | ||
![]() |
6db088328b | ||
![]() |
57b2adb81f | ||
![]() |
f33df61860 | ||
![]() |
ee965e4b74 | ||
![]() |
d0911cd0c7 | ||
![]() |
0b91608bbe | ||
![]() |
e0a5070cdc | ||
![]() |
49ce111c33 | ||
![]() |
fa3d3420f6 | ||
![]() |
b0c2416efb | ||
![]() |
88548eda88 | ||
![]() |
0d3058783e | ||
![]() |
3e34d123c0 | ||
![]() |
c06e51641e | ||
![]() |
89a682fc14 | ||
![]() |
edb6dc9248 | ||
![]() |
501fd5943e | ||
![]() |
8a695bc1e2 | ||
![]() |
d840f0ed94 | ||
![]() |
859fe6cfe5 | ||
![]() |
b9f0d39d1c | ||
![]() |
bb96eb1a8d | ||
![]() |
4e720eb4d2 | ||
![]() |
136a0ecbf7 | ||
![]() |
f20b70c35d | ||
![]() |
75cbb0eeb2 | ||
![]() |
21dde671de | ||
![]() |
22a0884203 | ||
![]() |
76cc2fdb25 | ||
![]() |
b67ff738cb | ||
![]() |
6291e65165 | ||
![]() |
6b2239212c | ||
![]() |
9aa0ac9396 | ||
![]() |
a16040073f | ||
![]() |
f1a16f2eb2 | ||
![]() |
5a9f29bd9d | ||
![]() |
d9417a9aa9 | ||
![]() |
3a2d168c0c | ||
![]() |
4abe2cdb6d | ||
![]() |
83cb4553ad | ||
![]() |
aac415d1fa | ||
![]() |
1e51804b74 | ||
![]() |
d5573be1e9 | ||
![]() |
728cd96cfa | ||
![]() |
bc6c6ce66d | ||
![]() |
20b5ef02b9 | ||
![]() |
a37b6d46e8 | ||
![]() |
4c6b802cb9 | ||
![]() |
6ced8bd137 | ||
![]() |
374eb82d40 | ||
![]() |
9581020e33 | ||
![]() |
476b400315 | ||
![]() |
0e45e0a843 | ||
![]() |
f93f4985b3 | ||
![]() |
67f3da6be2 | ||
![]() |
9ff2cf35c6 | ||
![]() |
86a3a06bb1 | ||
![]() |
f81835cc60 | ||
![]() |
8ab4f8bd93 | ||
![]() |
ae5526c928 | ||
![]() |
335cd41eca | ||
![]() |
4c1fa34f2c | ||
![]() |
f94d3f91cf | ||
![]() |
2b1224b3df | ||
![]() |
5e77f44e05 | ||
![]() |
6e4bd83a69 | ||
![]() |
5de241c2c6 | ||
![]() |
729f61b84c | ||
![]() |
100f7f4147 | ||
![]() |
7dfa6d55ba | ||
![]() |
22515592f0 | ||
![]() |
0a5db20cb8 | ||
![]() |
d91c9dc41f | ||
![]() |
711f189e0e | ||
![]() |
1d579d12d2 | ||
![]() |
624fde5b46 | ||
![]() |
87a3c923a6 | ||
![]() |
c38c82bf6a | ||
![]() |
cd03077b77 | ||
![]() |
871f320de7 | ||
![]() |
3ab089c264 | ||
![]() |
d993ab7b48 | ||
![]() |
b1103ab227 | ||
![]() |
2217959242 | ||
![]() |
d38274acae | ||
![]() |
08e4b07364 | ||
![]() |
8c129ab512 | ||
![]() |
32e9d6fe72 | ||
![]() |
dd8ba803d4 | ||
![]() |
6f90cd5b04 | ||
![]() |
59e6d18c68 | ||
![]() |
81099e6141 | ||
![]() |
9bf6b6ec4a | ||
![]() |
abdbec2523 | ||
![]() |
be62ec31d8 | ||
![]() |
a62bbd1aed | ||
![]() |
d916d8f8df | ||
![]() |
4ce8ae67bc | ||
![]() |
225a18c2ab | ||
![]() |
b23ba4f66d | ||
![]() |
d30b713c74 | ||
![]() |
2dba594954 | ||
![]() |
c419189ffa | ||
![]() |
aa2a2bf9fe | ||
![]() |
1fd231b96c | ||
![]() |
21cd1c4e40 | ||
![]() |
bdf46c5d96 | ||
![]() |
13726e1e8a | ||
![]() |
766c16dc3c | ||
![]() |
cd2df06a10 | ||
![]() |
9a7f2fadf3 | ||
![]() |
2a68f479ed | ||
![]() |
a486bd262b | ||
![]() |
a7247f16f7 | ||
![]() |
39a5483c96 | ||
![]() |
fc12649028 | ||
![]() |
b4b26979de | ||
![]() |
73e9b64926 | ||
![]() |
2307c68ab2 | ||
![]() |
2ce0eae82e | ||
![]() |
45b0e0a7ab | ||
![]() |
317dd69db3 | ||
![]() |
3435f06696 | ||
![]() |
dcfebe6595 | ||
![]() |
b9a759de53 | ||
![]() |
5135d1167c | ||
![]() |
51e30c6a13 | ||
![]() |
b464c0abc5 | ||
![]() |
7469230d59 | ||
![]() |
7ba7e7a319 | ||
![]() |
0dc41eedb0 | ||
![]() |
72a7a6b3c8 | ||
![]() |
533533b639 | ||
![]() |
0cd26250b9 | ||
![]() |
1d545c10c4 | ||
![]() |
d352fab5cd | ||
![]() |
1bb95040ff | ||
![]() |
c0d83be019 | ||
![]() |
1c3f55568b | ||
![]() |
15850f4302 | ||
![]() |
c328eaed0e | ||
![]() |
d42e647d50 | ||
![]() |
0e8f7e6fe3 | ||
![]() |
380f322eda | ||
![]() |
017462c4c1 | ||
![]() |
3e83ebc680 | ||
![]() |
989eca40ec | ||
![]() |
51bd1445a5 | ||
![]() |
0c8378e22a | ||
![]() |
5b219deae2 | ||
![]() |
a311328b38 | ||
![]() |
03fbfc8f7a | ||
![]() |
4bb43cb9b5 | ||
![]() |
e7ee77ad62 | ||
![]() |
d2d8d3d8c2 | ||
![]() |
d3875f5e36 | ||
![]() |
24fec75821 | ||
![]() |
dc4d1c6497 | ||
![]() |
d0fed20d28 | ||
![]() |
1e26314776 | ||
![]() |
448a072e8e | ||
![]() |
0f89478df6 | ||
![]() |
0b96093ae5 | ||
![]() |
52f85f9452 | ||
![]() |
c88dbd3f02 | ||
![]() |
b6b45165ca | ||
![]() |
f53843f9b0 | ||
![]() |
41f94f2be5 | ||
![]() |
23a1bc2595 | ||
![]() |
2afb9b1456 | ||
![]() |
a389621cf1 | ||
![]() |
aa72ea805f | ||
![]() |
a943b4ef6d | ||
![]() |
3642893618 | ||
![]() |
9e5758c905 | ||
![]() |
4f13432df4 | ||
![]() |
8f5d9f2d18 | ||
![]() |
9b2d1f853d | ||
![]() |
f484cb393a | ||
![]() |
a2f29cc817 | ||
![]() |
87976fc845 | ||
![]() |
819c818976 | ||
![]() |
87d6b55022 | ||
![]() |
f086bf9284 | ||
![]() |
144d7276ef | ||
![]() |
c5abd39116 | ||
![]() |
b42adebc39 | ||
![]() |
35c1ee5a79 | ||
![]() |
89c9823b5d | ||
![]() |
da2f87660f | ||
![]() |
19be833058 | ||
![]() |
3c08e16ef2 | ||
![]() |
d2b17fbc6d | ||
![]() |
e526cb462f | ||
![]() |
1237bbebcd | ||
![]() |
65e7a71dff | ||
![]() |
ef28b60bfc | ||
![]() |
f6c9ca0202 | ||
![]() |
403ca48661 | ||
![]() |
3d96420db7 | ||
![]() |
afc011c5c8 | ||
![]() |
681c4a0a0a | ||
![]() |
faac26138a | ||
![]() |
8a799e0971 | ||
![]() |
ec14d1f0fe | ||
![]() |
a6e289c21f | ||
![]() |
7ea0630973 | ||
![]() |
e86a8cee10 | ||
![]() |
1fa90eb865 | ||
![]() |
2cb16a8ad8 | ||
![]() |
f241bfb7b8 | ||
![]() |
075482b417 | ||
![]() |
2a76a50400 | ||
![]() |
9c3c64eb1d | ||
![]() |
bd2c676c31 | ||
![]() |
f6ef53b565 | ||
![]() |
3c496b5694 | ||
![]() |
50320d9d9c | ||
![]() |
d9748cb69b | ||
![]() |
842451c747 | ||
![]() |
cbcb5cfdd6 | ||
![]() |
433df89238 | ||
![]() |
598ede6b37 | ||
![]() |
78b32002d7 | ||
![]() |
579ef3db36 | ||
![]() |
255f8f8fbd | ||
![]() |
e9f03a5455 | ||
![]() |
f2423edb66 | ||
![]() |
44824761f8 | ||
![]() |
93f38ced01 | ||
![]() |
b08c58e6d2 | ||
![]() |
3bd356019f | ||
![]() |
70c0fff557 | ||
![]() |
59a84c3b98 | ||
![]() |
48fdde5640 | ||
![]() |
42175496be | ||
![]() |
dabbd693b6 | ||
![]() |
67556eba74 | ||
![]() |
d6411dc480 | ||
![]() |
86840ee0f5 | ||
![]() |
182de8ef6d | ||
![]() |
c52bffc619 | ||
![]() |
50a432b176 | ||
![]() |
c5a0ec3919 | ||
![]() |
9f18e58c69 | ||
![]() |
20c16af6d3 | ||
![]() |
a1debe45cf | ||
![]() |
80b2079c19 | ||
![]() |
9dfe3dcf79 | ||
![]() |
ea05cf02b4 | ||
![]() |
1b25275333 | ||
![]() |
f90bc04b1a | ||
![]() |
2a06601e3a | ||
![]() |
bcb5e3950b | ||
![]() |
a2478e68c6 | ||
![]() |
dd88086cc7 | ||
![]() |
40af655c39 | ||
![]() |
055decf0cc | ||
![]() |
1f1630dc65 | ||
![]() |
e9cf610299 | ||
![]() |
0f1101bf06 | ||
![]() |
2df51f8b73 | ||
![]() |
e003fa2a66 | ||
![]() |
4470dc1fc9 | ||
![]() |
234346e1d4 | ||
![]() |
65e4586f33 | ||
![]() |
ae4f9a2eb7 | ||
![]() |
a8eff76dd0 | ||
![]() |
afddadbab3 | ||
![]() |
5eb2349a04 | ||
![]() |
e4b7133ec2 | ||
![]() |
a83bfa7a45 | ||
![]() |
5b1d59e38d | ||
![]() |
31ce093a4a | ||
![]() |
e1cc55ff79 | ||
![]() |
076586ded7 | ||
![]() |
c3e30d4d05 | ||
![]() |
dd87882e0f | ||
![]() |
fce8d134a3 | ||
![]() |
7f9fd7ef06 | ||
![]() |
e5c554f947 | ||
![]() |
47922537b7 | ||
![]() |
c5ff01d528 | ||
![]() |
a5830ca15b | ||
![]() |
6d8673724d | ||
![]() |
4e1737c2f5 | ||
![]() |
a7b486de56 | ||
![]() |
1e927834b3 | ||
![]() |
1f2b08f870 | ||
![]() |
067a9a2ade | ||
![]() |
07dbc45d3f | ||
![]() |
482279d7ec | ||
![]() |
7d2a0e6d4e | ||
![]() |
c338a96d8f | ||
![]() |
d2ead4ccbe | ||
![]() |
23c5a0d8eb | ||
![]() |
b555b60b75 | ||
![]() |
3a04b465b1 | ||
![]() |
4ce646facc | ||
![]() |
c33deb446e | ||
![]() |
3f5ee4c6fb | ||
![]() |
7a0fcc3f35 | ||
![]() |
ae5c164179 | ||
![]() |
8f2429e61c | ||
![]() |
c0515c961e | ||
![]() |
47f66049d7 | ||
![]() |
929e7cbaab | ||
![]() |
461043a985 | ||
![]() |
c489a0b7cc | ||
![]() |
e0b125d762 | ||
![]() |
36dad75750 | ||
![]() |
237acbd9c0 | ||
![]() |
a0c017a4dc | ||
![]() |
e18e0dccc6 | ||
![]() |
9bb1ef14be | ||
![]() |
4e9e2db90c | ||
![]() |
4fe98931af | ||
![]() |
431de0dc25 | ||
![]() |
16d32c073d | ||
![]() |
7446f0f809 | ||
![]() |
b8bacef844 | ||
![]() |
09dbc30ace | ||
![]() |
77f26aafda | ||
![]() |
1ab4af5e9d | ||
![]() |
29e7df3575 | ||
![]() |
78edbd3830 | ||
![]() |
9f963a2360 | ||
![]() |
7bb91088f1 | ||
![]() |
df727b774c | ||
![]() |
1f99e2547a | ||
![]() |
bb8bab1a3a | ||
![]() |
3d0a4c9137 | ||
![]() |
108e4a603e | ||
![]() |
a84ec393dd | ||
![]() |
c5adf540a6 | ||
![]() |
947251534f | ||
![]() |
05a2a5d8cc | ||
![]() |
9f2fb18473 | ||
![]() |
0bd34061b9 | ||
![]() |
e1b43e71bb | ||
![]() |
f06ae08a10 | ||
![]() |
dc2cb4d91c | ||
![]() |
848091097e | ||
![]() |
a1cef01c22 | ||
![]() |
d43bbbd5ba | ||
![]() |
6c67aee8a4 | ||
![]() |
653875c02e | ||
![]() |
58b2ac9987 | ||
![]() |
c111d32934 | ||
![]() |
c5ed682c70 | ||
![]() |
c5ed5baf97 | ||
![]() |
c683b60571 | ||
![]() |
6a20805772 | ||
![]() |
de24cbd70b | ||
![]() |
dbdf154e42 | ||
![]() |
a5b67a4207 | ||
![]() |
8c983e1849 | ||
![]() |
d83f41eaf2 | ||
![]() |
584cf7fa57 | ||
![]() |
c5cbfb1a3c | ||
![]() |
0e09b2b12a | ||
![]() |
d3421270b1 | ||
![]() |
6c330fe4d2 | ||
![]() |
e31e18b3f3 | ||
![]() |
2a41e8c8b0 | ||
![]() |
7428568279 | ||
![]() |
df4ea8794f | ||
![]() |
a84af82740 | ||
![]() |
82b1dbb01b | ||
![]() |
8f9d2df8db | ||
![]() |
73c7ecf716 | ||
![]() |
8842f099ed | ||
![]() |
6ea43b65d3 | ||
![]() |
c077834553 | ||
![]() |
a35c0fc1a7 | ||
![]() |
37f5756ddb | ||
![]() |
701094596f | ||
![]() |
aa8165d81a | ||
![]() |
a9fb598134 | ||
![]() |
c67fc71069 | ||
![]() |
85028b060c | ||
![]() |
b652840090 | ||
![]() |
52a607d0fb | ||
![]() |
e5904584e7 | ||
![]() |
c45d415579 | ||
![]() |
92790287e1 | ||
![]() |
28e8caea54 | ||
![]() |
735d6bf85c | ||
![]() |
3a9a8d4e5b | ||
![]() |
37ff909c37 | ||
![]() |
009528255e | ||
![]() |
474af8b29b | ||
![]() |
1ea268df71 | ||
![]() |
30183d11dc | ||
![]() |
be16260c3c | ||
![]() |
f44544be0e | ||
![]() |
13ccd086b4 | ||
![]() |
7371d42e97 | ||
![]() |
3ea13893dd | ||
![]() |
188bb85fe8 | ||
![]() |
e7aab960ff | ||
![]() |
466b130ca5 | ||
![]() |
df352ec926 | ||
![]() |
37b0a87aae | ||
![]() |
f13a9a260e | ||
![]() |
0fc4914500 | ||
![]() |
657cfb6512 | ||
![]() |
15ff4f12ac | ||
![]() |
702e8543b8 | ||
![]() |
58ec0d0cdd | ||
![]() |
b9f7e592ab | ||
![]() |
900313bbef | ||
![]() |
20fa1de3ef | ||
![]() |
ada3aa410a | ||
![]() |
416472e515 | ||
![]() |
cb88b3355b | ||
![]() |
4bbc20e24b | ||
![]() |
34d93ac968 | ||
![]() |
ba984572c8 | ||
![]() |
eb1e00ef7b | ||
![]() |
5aecff2f1a | ||
![]() |
35f9d6f72a | ||
![]() |
6bc6b3e772 | ||
![]() |
74532116ab | ||
![]() |
5b1521672f | ||
![]() |
c676ed980d | ||
![]() |
0168f549d4 | ||
![]() |
703903faf4 | ||
![]() |
220f96ecb4 | ||
![]() |
8ebe7e74e8 | ||
![]() |
7e9153171a | ||
![]() |
6e930aeaa9 | ||
![]() |
f91e12d593 | ||
![]() |
484b828f9d | ||
![]() |
2169a930d2 | ||
![]() |
45b3898683 | ||
![]() |
0a58aff795 | ||
![]() |
7f1a817749 | ||
![]() |
5f512db55f | ||
![]() |
acdca8320b | ||
![]() |
857db43428 | ||
![]() |
12aa51c551 | ||
![]() |
f755ed9710 | ||
![]() |
53a6b8178a | ||
![]() |
359474e1ca | ||
![]() |
e7ed402b64 | ||
![]() |
13e431a6ac | ||
![]() |
4266cfdad6 | ||
![]() |
8128565367 | ||
![]() |
14f5c79229 | ||
![]() |
1bc17b1cb1 | ||
![]() |
42f8744594 | ||
![]() |
8d3e33e343 | ||
![]() |
f5fd5a22e9 | ||
![]() |
f6cbe1c4bc | ||
![]() |
3811d7739d | ||
![]() |
6902d5fb02 | ||
![]() |
df801995ff | ||
![]() |
c1a9034f3f | ||
![]() |
1a95a6c028 | ||
![]() |
54cb67b316 | ||
![]() |
802a82f335 | ||
![]() |
7112f77b7c | ||
![]() |
fad68a1bf0 | ||
![]() |
3b3dc28d42 | ||
![]() |
f06317f3d0 | ||
![]() |
97c18ef67c | ||
![]() |
92e1e08e1c | ||
![]() |
139ab630e0 | ||
![]() |
1440534513 | ||
![]() |
c993563185 | ||
![]() |
f029d50029 | ||
![]() |
067afaceda | ||
![]() |
52b1176464 | ||
![]() |
4f8cd7fe88 | ||
![]() |
eb781c54f8 | ||
![]() |
b988241b8b | ||
![]() |
b4d69de796 | ||
![]() |
0fde081db5 | ||
![]() |
c8e44703d5 | ||
![]() |
4b6f5282b4 | ||
![]() |
c66899741a | ||
![]() |
8b6cdd8ab8 | ||
![]() |
2836484d12 | ||
![]() |
a869e7a3bd | ||
![]() |
90fe7d8e03 | ||
![]() |
0fbd579cbb | ||
![]() |
0b42ee83bb | ||
![]() |
be92638cf2 | ||
![]() |
3e560ce43d | ||
![]() |
273d477938 | ||
![]() |
12afbcd03d | ||
![]() |
6d41232a3e | ||
![]() |
4561112fe1 | ||
![]() |
cbcac452c0 | ||
![]() |
c0da03cfe8 | ||
![]() |
98456b8dca | ||
![]() |
a02ae261cf | ||
![]() |
6ee110b88d | ||
![]() |
0d2a95190c | ||
![]() |
ca9b14696c | ||
![]() |
2bf6ff5604 | ||
![]() |
f35cc90ea4 | ||
![]() |
63a2ccf3da | ||
![]() |
eb72f81bf7 | ||
![]() |
66254e79d3 | ||
![]() |
a8831bfa73 | ||
![]() |
ec4e44fcf2 | ||
![]() |
583d55298e | ||
![]() |
83859c1925 | ||
![]() |
5664b6a271 | ||
![]() |
53c3deda16 | ||
![]() |
d28fe8730d | ||
![]() |
92de4022cb | ||
![]() |
c3ae2467ae | ||
![]() |
94445283ac | ||
![]() |
5a5440813e | ||
![]() |
32d89fe611 | ||
![]() |
26ccdf21f9 | ||
![]() |
fb2241339d | ||
![]() |
99b2babad4 | ||
![]() |
735f392663 | ||
![]() |
4fddfe4f6b | ||
![]() |
16080cf46d | ||
![]() |
59aa071095 | ||
![]() |
5c7e23252b | ||
![]() |
240b70ad4b | ||
![]() |
1422b3393f | ||
![]() |
c0df38c23d | ||
![]() |
c146fea519 | ||
![]() |
6f8a6e33fc | ||
![]() |
7b976c39e6 | ||
![]() |
d9b28a79f1 | ||
![]() |
78d10b4c1b | ||
![]() |
5497016015 | ||
![]() |
302a580847 | ||
![]() |
62ca724415 | ||
![]() |
a70dfce490 | ||
![]() |
cb6f3f9195 | ||
![]() |
a666e6c39b | ||
![]() |
5606dc505e | ||
![]() |
3bf7a477a6 | ||
![]() |
2a45071501 | ||
![]() |
15617953ab | ||
![]() |
99cf659742 | ||
![]() |
ab17f50339 | ||
![]() |
d06b0c0b69 | ||
![]() |
351b942860 | ||
![]() |
272ac594a8 | ||
![]() |
365c3a27e8 | ||
![]() |
cc5f813f5e | ||
![]() |
87cf878860 | ||
![]() |
ba1ac3434e | ||
![]() |
f3a78ec059 | ||
![]() |
95884e1215 | ||
![]() |
d427d8df2d | ||
![]() |
a98565285b | ||
![]() |
01be9b0132 | ||
![]() |
49059236cd | ||
![]() |
529f6f94a3 | ||
![]() |
eacac9f071 | ||
![]() |
f13c15365f | ||
![]() |
ca035e419a | ||
![]() |
699641977e | ||
![]() |
aea3734ca8 | ||
![]() |
5ca286db5b | ||
![]() |
f4b9d16497 | ||
![]() |
0578196839 | ||
![]() |
f49fdbe886 | ||
![]() |
0d460e32de | ||
![]() |
2ee8b3c111 | ||
![]() |
e1379e5cf3 | ||
![]() |
b14b84f58b | ||
![]() |
444c9138e0 | ||
![]() |
83e40daec1 | ||
![]() |
dd612bbc91 | ||
![]() |
3f58521db2 | ||
![]() |
065834567a | ||
![]() |
f23b4fbf59 | ||
![]() |
426a8e5b61 | ||
![]() |
6fcb95b9e1 | ||
![]() |
50c95b4291 | ||
![]() |
f24adec51f | ||
![]() |
cfe354a35b | ||
![]() |
20743f2b51 | ||
![]() |
4c3d6a72a1 | ||
![]() |
1cd3f5c615 | ||
![]() |
9abae121fc | ||
![]() |
0d582fde46 | ||
![]() |
ecdd92f08e | ||
![]() |
e56cd8f3bd | ||
![]() |
14c8079353 | ||
![]() |
878df5afe4 | ||
![]() |
7e4b49634f | ||
![]() |
61cb8cb0b2 | ||
![]() |
04fbca7fe5 | ||
![]() |
54a2c660ae | ||
![]() |
113a349b56 | ||
![]() |
55d5859382 | ||
![]() |
791f74286d | ||
![]() |
aba6cf50e1 | ||
![]() |
02ba1f7230 | ||
![]() |
e04486564d | ||
![]() |
b140f6dc9a | ||
![]() |
ea66bc7f40 | ||
![]() |
0554dceed7 | ||
![]() |
86c4ce6d9f | ||
![]() |
0fba5dc75c | ||
![]() |
c39253454a | ||
![]() |
bc54087161 | ||
![]() |
2393ff7c4c | ||
![]() |
6582e9c718 | ||
![]() |
10b9f03410 | ||
![]() |
6987d75bb3 | ||
![]() |
4640525785 | ||
![]() |
7c7c6c349c | ||
![]() |
a2d013cd51 | ||
![]() |
6de89958ad | ||
![]() |
01c8032f20 | ||
![]() |
245f477760 | ||
![]() |
47a8e8e9fd | ||
![]() |
30b14a619d | ||
![]() |
f3cf51f7ac | ||
![]() |
2f79e110c4 | ||
![]() |
38e09d84fd | ||
![]() |
bc49f3813f | ||
![]() |
37848357b3 | ||
![]() |
de81eeb2b2 | ||
![]() |
9b15886310 | ||
![]() |
aac1b25a2e | ||
![]() |
abb338fea3 | ||
![]() |
b094d8322a | ||
![]() |
721a8cf6e3 | ||
![]() |
1049277e17 | ||
![]() |
44a4ce44d4 | ||
![]() |
7e9f900f35 | ||
![]() |
ec681b841e | ||
![]() |
a4002a49cc | ||
![]() |
032954be2b | ||
![]() |
2e7840bfcd | ||
![]() |
b0afe6c828 | ||
![]() |
bf281c2e36 | ||
![]() |
95ff7afa98 | ||
![]() |
da30d196da | ||
![]() |
dd10987e3b | ||
![]() |
1b9ada13a2 | ||
![]() |
66b215b44b | ||
![]() |
88b1ea9d3b | ||
![]() |
597f7dbeb8 | ||
![]() |
62d5684435 | ||
![]() |
499781baf1 | ||
![]() |
1da6210617 | ||
![]() |
057d258660 | ||
![]() |
ec433fa852 | ||
![]() |
6185f421b8 | ||
![]() |
ab7ae3f89a | ||
![]() |
7048b94cc2 | ||
![]() |
c8c11b31c8 | ||
![]() |
6dd732e1c2 | ||
![]() |
693963b072 | ||
![]() |
bc7d0c7d71 | ||
![]() |
07ee4d5915 | ||
![]() |
bc45092e03 | ||
![]() |
4b6068e13b | ||
![]() |
a7db756c76 | ||
![]() |
9d328b3aff | ||
![]() |
14211536d8 | ||
![]() |
9a7351b1f9 | ||
![]() |
b323333bd1 | ||
![]() |
8724d6f836 | ||
![]() |
18ddbf986c | ||
![]() |
dc55574100 | ||
![]() |
98cce77e1d | ||
![]() |
38898ab45e | ||
![]() |
40267f32e5 | ||
![]() |
3277e06740 | ||
![]() |
c557a2daf0 | ||
![]() |
2798076bb1 | ||
![]() |
0e02cb14ec | ||
![]() |
9443169283 | ||
![]() |
259b25ab68 | ||
![]() |
c8e363d4f3 | ||
![]() |
8ecc8b2e74 | ||
![]() |
62d763e65a | ||
![]() |
d54a56e11b | ||
![]() |
73b24aa5ae | ||
![]() |
110279cf4c | ||
![]() |
ddc4341707 | ||
![]() |
47fdeada01 | ||
![]() |
c3fc7d792e | ||
![]() |
33ac29f269 | ||
![]() |
1c7c6b2a0f | ||
![]() |
5ab9ee7c34 | ||
![]() |
056de6fc13 | ||
![]() |
ded9ee3251 | ||
![]() |
dc4f8c6c98 | ||
![]() |
282c3fab8c | ||
![]() |
63a808b306 | ||
![]() |
ca7622027d | ||
![]() |
f923078445 | ||
![]() |
f81150ea31 | ||
![]() |
0d057ab60b | ||
![]() |
c5a7879c55 | ||
![]() |
d24a9a2583 | ||
![]() |
6a7ce1639a | ||
![]() |
e75f6f85e7 | ||
![]() |
9d4a8702cb | ||
![]() |
7a91ea7107 | ||
![]() |
0e818dfdc8 | ||
![]() |
2228f00c0a | ||
![]() |
e2e46d675e | ||
![]() |
14b8a1d8a2 | ||
![]() |
7ab07c69aa | ||
![]() |
e9e2e9a711 | ||
![]() |
84de31e85b | ||
![]() |
31cc0ce7a8 | ||
![]() |
5c7dc3097a | ||
![]() |
3a09999cca | ||
![]() |
cf1e468395 | ||
![]() |
871e529bf2 | ||
![]() |
5e9ccd440e | ||
![]() |
657bc32e9b | ||
![]() |
d7a48bd855 | ||
![]() |
d2746689f9 | ||
![]() |
f093228f71 | ||
![]() |
f3e054d15e | ||
![]() |
86a3ad4b1f | ||
![]() |
aa5a768ef0 | ||
![]() |
b6cb37db43 | ||
![]() |
3ca25590c7 | ||
![]() |
c3b902ae65 | ||
![]() |
014602266b | ||
![]() |
696a2148f0 | ||
![]() |
e086cf56fc | ||
![]() |
6d5dcbe89f | ||
![]() |
54f5042c3c | ||
![]() |
927f38e999 | ||
![]() |
638ec9c2ea | ||
![]() |
27c5119664 | ||
![]() |
8542000540 | ||
![]() |
9c5c53f4ae | ||
![]() |
a2ca9361e1 | ||
![]() |
9042baf13d | ||
![]() |
957cff3447 | ||
![]() |
fbd6d11a5c | ||
![]() |
6ccb766b2e | ||
![]() |
df7be136f8 | ||
![]() |
3abbb08e31 | ||
![]() |
715b6df2fb | ||
![]() |
a64fe45175 | ||
![]() |
f0690d0ac5 | ||
![]() |
3049bc8215 | ||
![]() |
4f9b59ed6d | ||
![]() |
d05e849299 | ||
![]() |
76f06e120c | ||
![]() |
fdf83eaef8 | ||
![]() |
b214364ee9 | ||
![]() |
adfcaa2f09 | ||
![]() |
bd3c8d19fa | ||
![]() |
7ae2d6d5bb | ||
![]() |
44e5a98188 | ||
![]() |
093722c7d6 | ||
![]() |
ca2dd38f9b | ||
![]() |
bf0342eb06 | ||
![]() |
cf7af8e3aa | ||
![]() |
19f8f58618 | ||
![]() |
649d82425a | ||
![]() |
1f45db0fac | ||
![]() |
49ceb6f6e5 | ||
![]() |
9d0eb9fb08 | ||
![]() |
ec65a69496 | ||
![]() |
f498a64413 | ||
![]() |
4b993c932e | ||
![]() |
5aed1d0e97 | ||
![]() |
4f70e6b881 | ||
![]() |
e3751f5a57 | ||
![]() |
46d9280490 | ||
![]() |
40c0a9bf51 | ||
![]() |
0ca828325d | ||
![]() |
aa74a68ca8 | ||
![]() |
419922a2aa | ||
![]() |
e970e6cbc5 | ||
![]() |
90b04ddd9b | ||
![]() |
96ce701f64 | ||
![]() |
b506c94d9a | ||
![]() |
d4962685d6 | ||
![]() |
24a6013195 | ||
![]() |
de3962412f | ||
![]() |
0603c57a60 | ||
![]() |
71464e6914 | ||
![]() |
2a96fd466f | ||
![]() |
d6e27ee9b5 | ||
![]() |
a21511b683 | ||
![]() |
984fa08f14 | ||
![]() |
fbc2f999bf | ||
![]() |
86cb96cd21 | ||
![]() |
9bc955a5d4 | ||
![]() |
49dc6ac30b | ||
![]() |
5b93ce3481 | ||
![]() |
369adbdfe9 | ||
![]() |
c5b6376980 | ||
![]() |
64c7bc78af | ||
![]() |
3a4873aa1b | ||
![]() |
e0a3b2d8c3 | ||
![]() |
10f6e4e751 | ||
![]() |
3a374dcdba | ||
![]() |
b6f4611994 | ||
![]() |
b58f7a0c4d | ||
![]() |
3b482b265b | ||
![]() |
f94b51e410 | ||
![]() |
6185336c3a | ||
![]() |
bd8829a432 | ||
![]() |
89d8d11db3 | ||
![]() |
644baca439 | ||
![]() |
3cc111e5dd | ||
![]() |
baa614c094 | ||
![]() |
95cb9460d4 | ||
![]() |
e433c5160a | ||
![]() |
440b7171b0 | ||
![]() |
cfd2e57950 | ||
![]() |
a5d4855530 | ||
![]() |
448a034766 | ||
![]() |
d228a96944 | ||
![]() |
51a3fb98e1 | ||
![]() |
04dd345ef4 | ||
![]() |
3ba221831d | ||
![]() |
b30a65015d | ||
![]() |
0ea71db628 | ||
![]() |
b64d007315 | ||
![]() |
88f954fc28 | ||
![]() |
f6acb174a4 | ||
![]() |
b8a927b163 | ||
![]() |
4e93b06772 | ||
![]() |
65934f5e00 | ||
![]() |
fb89aab252 | ||
![]() |
db9a0edce5 | ||
![]() |
a85baa5cca | ||
![]() |
7d6125c367 | ||
![]() |
2caeea2a14 | ||
![]() |
c3e2447924 | ||
![]() |
f12d888e42 | ||
![]() |
f92966d57a | ||
![]() |
245c75ab2c | ||
![]() |
ef0b6d947e | ||
![]() |
bd511d17e9 | ||
![]() |
b0b73b5d97 | ||
![]() |
a8d2773f5d | ||
![]() |
9749a79f7f | ||
![]() |
6a7cbf1a47 | ||
![]() |
ff1d1474d4 | ||
![]() |
2b18df8398 | ||
![]() |
d978d35533 | ||
![]() |
10cd70e858 | ||
![]() |
0552c2f245 | ||
![]() |
a08df8f9ef | ||
![]() |
1a906b746e | ||
![]() |
c916732f4e | ||
![]() |
22df6d5638 | ||
![]() |
4783f264df | ||
![]() |
64c3ff4573 | ||
![]() |
9c105c988c | ||
![]() |
c7bf92f20b | ||
![]() |
15548d9bb2 | ||
![]() |
441379b6e8 | ||
![]() |
6e5d117720 | ||
![]() |
c1aea93389 | ||
![]() |
e28af61ac2 | ||
![]() |
315180816d | ||
![]() |
fc94c9602b | ||
![]() |
25c8796888 | ||
![]() |
ea871aaa7b | ||
![]() |
be376ef2ac | ||
![]() |
0b77b93801 | ||
![]() |
9d5ee6291d | ||
![]() |
0476f0d367 | ||
![]() |
4a98a0da86 | ||
![]() |
9cb5e7809a | ||
![]() |
3a22456032 | ||
![]() |
0d609d9e2c | ||
![]() |
555313fc4c | ||
![]() |
8a609505f1 | ||
![]() |
cc0f792e60 | ||
![]() |
9f3e69dbf1 | ||
![]() |
7d42a41df4 | ||
![]() |
f7593002d1 | ||
![]() |
262a7797e7 | ||
![]() |
6364767d5a | ||
![]() |
4d285fe4b6 | ||
![]() |
cde46b77de | ||
![]() |
722ddfb736 | ||
![]() |
155c026e99 | ||
![]() |
44cb7e148b | ||
![]() |
3a517317a3 | ||
![]() |
b32cbe1651 | ||
![]() |
18b0a44ae3 | ||
![]() |
dd68943ae8 | ||
![]() |
f019490989 | ||
![]() |
4ee7fa2af7 | ||
![]() |
032a3f562f | ||
![]() |
9d438035cb | ||
![]() |
7f5d792ff4 | ||
![]() |
5d0c22c374 | ||
![]() |
e7a52289c8 | ||
![]() |
4997786b9f | ||
![]() |
5b51aa2b78 | ||
![]() |
5c565def63 | ||
![]() |
c4502c2762 | ||
![]() |
2ea79db343 | ||
![]() |
c92924db15 | ||
![]() |
45ce804ee9 | ||
![]() |
2e9c147c44 | ||
![]() |
24d09cc134 | ||
![]() |
e7109a0855 | ||
![]() |
b7964f7f12 | ||
![]() |
31bb92c398 | ||
![]() |
d95731e87b | ||
![]() |
bff3c47dc2 | ||
![]() |
94b32c38e4 | ||
![]() |
2214ab3a17 | ||
![]() |
8631adaaec | ||
![]() |
2cfada1fc8 | ||
![]() |
065e82534e | ||
![]() |
a6cbda63b1 | ||
![]() |
15ddd0f680 | ||
![]() |
841261a36e | ||
![]() |
f30a2dc43c | ||
![]() |
37132e8d3e | ||
![]() |
b9dd88e30f | ||
![]() |
e3ec2c22a2 | ||
![]() |
e36dbdead3 | ||
![]() |
4358574889 | ||
![]() |
bbdd6684fe | ||
![]() |
07cd774619 | ||
![]() |
83b077d5f3 | ||
![]() |
36104652cd | ||
![]() |
d75c797553 | ||
![]() |
3fa9e6d5b2 | ||
![]() |
bbb532b5aa | ||
![]() |
15621d76b9 | ||
![]() |
73eb4e3389 | ||
![]() |
3be0eb2ac6 | ||
![]() |
c195b1ecb9 | ||
![]() |
4c265a674e | ||
![]() |
634b4f392a | ||
![]() |
2cca7a8308 | ||
![]() |
ffc584e5e6 | ||
![]() |
9a73aba7fc | ||
![]() |
22adb293f7 | ||
![]() |
e8534e61cd | ||
![]() |
6168e4668c | ||
![]() |
aa0d1c27c8 | ||
![]() |
35859f566b | ||
![]() |
1ad7055fbe | ||
![]() |
2287aa9a06 | ||
![]() |
28d358aa43 | ||
![]() |
8744d1a9ec | ||
![]() |
68f9a32629 | ||
![]() |
2f5062b33e | ||
![]() |
57b624d2da | ||
![]() |
69539728ec | ||
![]() |
92b014a706 | ||
![]() |
a5ace90bd6 | ||
![]() |
8212ca3aee | ||
![]() |
0b9b0a39d8 | ||
![]() |
bcf6dad5de | ||
![]() |
3f0347bc18 | ||
![]() |
b401c225dd | ||
![]() |
721e6ba935 | ||
![]() |
fa342c42fb | ||
![]() |
c31e0d72b3 | ||
![]() |
f672b1b810 | ||
![]() |
4f324c7fd7 | ||
![]() |
0137664296 | ||
![]() |
69313054a2 | ||
![]() |
d6c4c3c66a | ||
![]() |
6d0753c5e9 | ||
![]() |
019efd6db7 | ||
![]() |
4b3d739774 | ||
![]() |
c345b1aa19 | ||
![]() |
d6d4d4a8a3 | ||
![]() |
85017433db | ||
![]() |
d03248c10f | ||
![]() |
b86cf5ac80 | ||
![]() |
abc36b6f9b | ||
![]() |
88fcce18f9 | ||
![]() |
7137481251 | ||
![]() |
842b4929e4 | ||
![]() |
c9a923bb34 | ||
![]() |
d68429b49b | ||
![]() |
38abd9e756 | ||
![]() |
0e35750741 | ||
![]() |
e3ef019995 | ||
![]() |
4486cdc14f | ||
![]() |
c7c453404b | ||
![]() |
546cac2b09 | ||
![]() |
86f537971c | ||
![]() |
4dd5e7c4b9 | ||
![]() |
3b850ae3b9 | ||
![]() |
361932cf7f | ||
![]() |
73f8225669 | ||
![]() |
f6d7170537 | ||
![]() |
35c1139293 | ||
![]() |
590ff474c7 | ||
![]() |
b384e2ee1d | ||
![]() |
6e7a2e4c9e | ||
![]() |
19e07f6785 | ||
![]() |
097f7c846e | ||
![]() |
01d6fdf080 | ||
![]() |
7023e0a800 | ||
![]() |
3ca94633cd | ||
![]() |
ac3e035af7 | ||
![]() |
538fd146fb | ||
![]() |
f1d438f3fd | ||
![]() |
49bb9cd398 | ||
![]() |
7d00a254da | ||
![]() |
ad9ad07cbd | ||
![]() |
598d60ab7e | ||
![]() |
d3f61027c7 | ||
![]() |
8ecbbd0719 | ||
![]() |
17943dcf1a | ||
![]() |
0150e6d689 | ||
![]() |
b5260051a0 | ||
![]() |
b1f17ff508 | ||
![]() |
f4b3f62a46 | ||
![]() |
519cbdd872 | ||
![]() |
28cc158a3f | ||
![]() |
c99bf518b3 | ||
![]() |
86d3244a22 | ||
![]() |
618859788c | ||
![]() |
8008633c02 | ||
![]() |
e840184e7f | ||
![]() |
5aa17208a5 | ||
![]() |
bd7d46f446 | ||
![]() |
013d14d723 | ||
![]() |
b87b9d3e26 | ||
![]() |
bdbce8a7da | ||
![]() |
f661ba7c40 | ||
![]() |
a87dc0346d | ||
![]() |
7470ff5437 | ||
![]() |
fe10ffc7d7 | ||
![]() |
1628b4ca3e | ||
![]() |
74bed8b30a | ||
![]() |
e4287ee7fb | ||
![]() |
71a2646c5b | ||
![]() |
39fbe69847 | ||
![]() |
aa8ef338c5 | ||
![]() |
b9f392da94 | ||
![]() |
40223ee48a | ||
![]() |
0d2ae948e8 | ||
![]() |
7a04307c32 | ||
![]() |
da5ae971e1 | ||
![]() |
d8bbb62081 | ||
![]() |
f5215c1f29 | ||
![]() |
54706e51af | ||
![]() |
2ee66b0b22 | ||
![]() |
2082079c7e | ||
![]() |
0c30803fdd | ||
![]() |
3745de490f | ||
![]() |
cf0e6b8f86 | ||
![]() |
e184e9a97c | ||
![]() |
4cd304b4c6 | ||
![]() |
8bcffb59e6 | ||
![]() |
f2058851d0 | ||
![]() |
3a2ad6e578 | ||
![]() |
45e751a8be | ||
![]() |
6d9e54043c | ||
![]() |
2b68cc481e | ||
![]() |
49f7a457cd | ||
![]() |
c18b3db621 | ||
![]() |
cf450d6d4a | ||
![]() |
93774f17c8 | ||
![]() |
349e8a9203 | ||
![]() |
150f092e9a | ||
![]() |
69020cc516 | ||
![]() |
a01a6d0f43 | ||
![]() |
52a15da966 | ||
![]() |
322d3dcab1 | ||
![]() |
234d05d044 | ||
![]() |
8b7953280a | ||
![]() |
0ba9eb2eeb | ||
![]() |
508a0c7815 | ||
![]() |
264eaa5cbf | ||
![]() |
b4901cb113 | ||
![]() |
4380370ae4 | ||
![]() |
d043ea25d8 | ||
![]() |
dadc13a2df | ||
![]() |
34e47d79dd | ||
![]() |
945ee1245e | ||
![]() |
7f263b4c5e | ||
![]() |
569d93af9a | ||
![]() |
9440716951 | ||
![]() |
cc4e676bb7 | ||
![]() |
9d0eaad314 | ||
![]() |
1d22650d89 | ||
![]() |
ce519530bc | ||
![]() |
3e02f0d39f | ||
![]() |
89b97338e4 | ||
![]() |
2345563879 | ||
![]() |
692cb9223c | ||
![]() |
e8ff848518 | ||
![]() |
256dadbaf7 | ||
![]() |
3e92111847 | ||
![]() |
2e4958bc25 | ||
![]() |
8c04cda18b | ||
![]() |
515b4d50ab | ||
![]() |
414308f277 | ||
![]() |
ffe822819c | ||
![]() |
948cfc4034 | ||
![]() |
fdd99cb8d6 | ||
![]() |
9df773dde2 | ||
![]() |
8c42614427 | ||
![]() |
6dcff571d2 | ||
![]() |
43834e57f0 | ||
![]() |
b185773daf | ||
![]() |
593a9244a4 | ||
![]() |
165ee8a3f8 | ||
![]() |
66fc824bb5 | ||
![]() |
a556454ced | ||
![]() |
d248880890 | ||
![]() |
c9a8177351 | ||
![]() |
5e85f1025a | ||
![]() |
eebcb0cb6e | ||
![]() |
cf3f788218 | ||
![]() |
31f939ba96 | ||
![]() |
b707aabee4 | ||
![]() |
b3e3fdbad7 | ||
![]() |
41897f06ed | ||
![]() |
4758656211 | ||
![]() |
5e1a5fc498 | ||
![]() |
174fafcb45 | ||
![]() |
19fff2bd89 | ||
![]() |
4b1ef1222b | ||
![]() |
46cca21a72 | ||
![]() |
81c2f08e62 | ||
![]() |
2a764eaf7a | ||
![]() |
a1cccb1ca4 | ||
![]() |
d7bff00046 | ||
![]() |
22ef403bd4 | ||
![]() |
e466fb95b5 | ||
![]() |
c5ab69f38d | ||
![]() |
09f673d94c | ||
![]() |
b323a92dbf | ||
![]() |
57f697975e | ||
![]() |
9a9171055c | ||
![]() |
90683aa637 | ||
![]() |
480bcccbf4 | ||
![]() |
015c27ecad | ||
![]() |
1ec4c2ba9d | ||
![]() |
69653bb402 | ||
![]() |
988d5a2535 | ||
![]() |
8de8f190ff | ||
![]() |
ac58a0da0e | ||
![]() |
eb19d2a1c4 | ||
![]() |
36656fd0f4 | ||
![]() |
eb5d10c24a | ||
![]() |
da6101a355 | ||
![]() |
20f6dfafa1 | ||
![]() |
5488980bd9 | ||
![]() |
de92af20f0 | ||
![]() |
f22646a905 | ||
![]() |
44a8bc3f1d | ||
![]() |
a870d7eb42 | ||
![]() |
e429d0317d | ||
![]() |
c8391950cf | ||
![]() |
7cf789ad5f | ||
![]() |
d28062cc93 | ||
![]() |
5d0ea6a2c3 | ||
![]() |
4adde6ba85 | ||
![]() |
e2792eecb5 | ||
![]() |
57bf881779 | ||
![]() |
da8db0f223 | ||
![]() |
e96a40a545 | ||
![]() |
3105024de4 | ||
![]() |
656a47f7c2 | ||
![]() |
742bb67cde | ||
![]() |
88fb4d5e04 | ||
![]() |
28745667b8 | ||
![]() |
bffaa1a94d | ||
![]() |
f5863391fe | ||
![]() |
33531e973b | ||
![]() |
44c784f4a5 | ||
![]() |
7e112746bc | ||
![]() |
f29750da65 | ||
![]() |
3e2157782f | ||
![]() |
6a9aaf1c58 | ||
![]() |
516a388aa3 | ||
![]() |
c968478c3d | ||
![]() |
c14bdf8d26 | ||
![]() |
8bce4eb5f8 | ||
![]() |
2c2c6c6cc2 | ||
![]() |
c41a0ba129 | ||
![]() |
6cb335fe32 | ||
![]() |
605815aa76 | ||
![]() |
cf2734f5e2 | ||
![]() |
1624f05c06 | ||
![]() |
39caaf5caa | ||
![]() |
4310143e79 | ||
![]() |
93159e4514 | ||
![]() |
980dae52d4 | ||
![]() |
bd8501fd77 | ||
![]() |
f8306742e9 | ||
![]() |
aa7b007db7 | ||
![]() |
bf041bd1d6 | ||
![]() |
698b1eab76 | ||
![]() |
81db0458a9 | ||
![]() |
87f76f1cc2 | ||
![]() |
751a0c987d | ||
![]() |
e11688d2a3 | ||
![]() |
73d447eeee | ||
![]() |
3012c0ad1f | ||
![]() |
59f356001a | ||
![]() |
1cfb33afcd | ||
![]() |
3f4f611a61 | ||
![]() |
1bd694514b | ||
![]() |
e3f0ab43bb | ||
![]() |
6469cfa6f4 | ||
![]() |
88f9fc5816 | ||
![]() |
933e192e0c | ||
![]() |
7662707c84 | ||
![]() |
7e894eb4b5 | ||
![]() |
20cef9aabb | ||
![]() |
49de0de5ca | ||
![]() |
84f0a478b4 | ||
![]() |
58fcbd9dfa | ||
![]() |
69093204b9 | ||
![]() |
021e654202 | ||
![]() |
f7ebf48e49 | ||
![]() |
7369490478 | ||
![]() |
6117c4a877 | ||
![]() |
03fe76b14a | ||
![]() |
4eaf8ddaa2 | ||
![]() |
bc03bc06c4 | ||
![]() |
576541c4f1 | ||
![]() |
c9df1d8b99 | ||
![]() |
99569e4588 | ||
![]() |
dcd4dc5d44 | ||
![]() |
40890470fe | ||
![]() |
08c7a397bc | ||
![]() |
469260905c | ||
![]() |
c29a81d710 | ||
![]() |
d0b6f9489c | ||
![]() |
4d019067ef | ||
![]() |
ffcf2a040c | ||
![]() |
a222e866fb | ||
![]() |
f4b77e602f | ||
![]() |
b0f5eb0f47 | ||
![]() |
922e893bbf | ||
![]() |
48a1ac71a3 | ||
![]() |
5c564faf6b | ||
![]() |
6c4af9bc71 | ||
![]() |
fc46e4ae79 | ||
![]() |
78f60b866e | ||
![]() |
cb0d9b8633 | ||
![]() |
cbd3a5bff6 | ||
![]() |
0310187c8e | ||
![]() |
ba66550c2c | ||
![]() |
5ff141ded3 | ||
![]() |
de5619e580 | ||
![]() |
8dfb6e7667 | ||
![]() |
e722fc6cca | ||
![]() |
c9bbc14ee2 | ||
![]() |
54e787a6c5 | ||
![]() |
92f7d5d9f5 | ||
![]() |
fed3f8623c | ||
![]() |
bd9f68e0c0 | ||
![]() |
c32c16d932 | ||
![]() |
d8797fceb2 | ||
![]() |
996c292916 | ||
![]() |
ac7bf6a007 | ||
![]() |
aaee7c44ea | ||
![]() |
71c20bdf98 | ||
![]() |
e9f938fb4b | ||
![]() |
e180e3dbd0 | ||
![]() |
a5f6e689fa | ||
![]() |
10711097a6 | ||
![]() |
c458363d5b | ||
![]() |
bbff11bc71 | ||
![]() |
ff67caa61d | ||
![]() |
c785d4c59c | ||
![]() |
43c86ea74c | ||
![]() |
ed4ab842a5 | ||
![]() |
cc498fad22 | ||
![]() |
614be445a4 | ||
![]() |
bdb1e65dfd | ||
![]() |
9d85ddafaa | ||
![]() |
b1c90ceed2 | ||
![]() |
863abd3a70 | ||
![]() |
45e3b9e22b | ||
![]() |
779fd3fa3a | ||
![]() |
d9c825a7de | ||
![]() |
a0244dc60d | ||
![]() |
5ca57e292c | ||
![]() |
c494973e16 | ||
![]() |
a9e0fca099 | ||
![]() |
dd8299d10a | ||
![]() |
68cfdedc45 | ||
![]() |
5f64f9e651 | ||
![]() |
c17620ce54 | ||
![]() |
aadb3be0ea | ||
![]() |
554a976649 | ||
![]() |
72ec61c302 | ||
![]() |
5b391fe52e | ||
![]() |
e133a7746d | ||
![]() |
96d3393437 | ||
![]() |
14b520a498 | ||
![]() |
22eb216a3d | ||
![]() |
7e35a5cfb5 | ||
![]() |
2d573da55e | ||
![]() |
6c77a913ff | ||
![]() |
445b21c03d | ||
![]() |
9ebe42d9af | ||
![]() |
a5587120e0 | ||
![]() |
a22ebf0731 | ||
![]() |
f42a635555 | ||
![]() |
232fa448ca | ||
![]() |
3b6bf10f6a | ||
![]() |
6f42c30abe | ||
![]() |
52d5a389bf | ||
![]() |
5ee55ba672 | ||
![]() |
4332bf3b95 | ||
![]() |
818ebd1d85 | ||
![]() |
e03d6dd3fd | ||
![]() |
bcfc6c43a2 | ||
![]() |
11ff76d15b | ||
![]() |
a94bcdf40c | ||
![]() |
c29fdc99ea | ||
![]() |
430aa1c6fd | ||
![]() |
b9406728d3 | ||
![]() |
08cbf24b38 | ||
![]() |
c3cae9e960 | ||
![]() |
1bbc73343c | ||
![]() |
dfcabbe9b4 | ||
![]() |
b0755d3834 | ||
![]() |
4cb7f3a105 | ||
![]() |
960d733c76 | ||
![]() |
051439abde | ||
![]() |
4b8c22d88b | ||
![]() |
35ecb5ef31 | ||
![]() |
f5132f33fb | ||
![]() |
e5edc96919 | ||
![]() |
189ff89fd3 | ||
![]() |
95cd749e3b | ||
![]() |
bf4a9a7509 | ||
![]() |
7c047319d2 | ||
![]() |
059f4e5116 | ||
![]() |
59c8598b94 | ||
![]() |
c02505fe13 | ||
![]() |
5d718c4ce4 | ||
![]() |
af5212e2c6 | ||
![]() |
76c749d31a | ||
![]() |
3461dd1481 | ||
![]() |
994fbf8d97 | ||
![]() |
2e40d34e01 | ||
![]() |
bc64f3874f | ||
![]() |
a4edeb5b49 | ||
![]() |
4510bc64d6 | ||
![]() |
e4aa905440 | ||
![]() |
faa9b2f763 | ||
![]() |
76512840e3 | ||
![]() |
aef6c2ac48 | ||
![]() |
14f4dfc12a | ||
![]() |
b06edc0dd9 | ||
![]() |
863d087ae8 | ||
![]() |
413c2819fb | ||
![]() |
cde7e77aea | ||
![]() |
fa0a65f2e7 | ||
![]() |
5649faf085 | ||
![]() |
dbe0124266 | ||
![]() |
3ebf3fdb67 | ||
![]() |
3b426fa0cf | ||
![]() |
37e8ee66bd | ||
![]() |
1d220623ff | ||
![]() |
3219722c64 | ||
![]() |
42c04ca3da | ||
![]() |
e7110d3dbe | ||
![]() |
4ef3ecf0d9 | ||
![]() |
7bdf52eab6 | ||
![]() |
0bdd8dce6c | ||
![]() |
4a7403e929 | ||
![]() |
bd7108e7df | ||
![]() |
ed82f7d459 | ||
![]() |
b5323b00ad | ||
![]() |
4d4c2fd676 | ||
![]() |
787ea8c20d | ||
![]() |
d69d56850f | ||
![]() |
b769fbb8fe | ||
![]() |
7bf77d1d57 | ||
![]() |
2d8f8be70b | ||
![]() |
afb22905f9 | ||
![]() |
15f733cd81 | ||
![]() |
2912e7c833 | ||
![]() |
4f88923d10 | ||
![]() |
7eaa083c61 | ||
![]() |
f3a5ecd76b | ||
![]() |
438b232ede | ||
![]() |
9d76fc8761 | ||
![]() |
1cd57e08c0 | ||
![]() |
87b0ff952c | ||
![]() |
22043a0bf0 | ||
![]() |
fe880279c9 | ||
![]() |
9c26c5aba8 | ||
![]() |
21b2ffb49a | ||
![]() |
1b8e850f03 | ||
![]() |
bf52a194c8 | ||
![]() |
ab2e0c03b8 | ||
![]() |
800a46caca | ||
![]() |
e4dcbccce7 | ||
![]() |
ede39f37e6 | ||
![]() |
7211024602 | ||
![]() |
04599adfcc | ||
![]() |
01a63d0c70 | ||
![]() |
fafde6562a | ||
![]() |
843a383078 | ||
![]() |
379b1ca292 | ||
![]() |
36063ebdcd | ||
![]() |
05969ffeb6 | ||
![]() |
7ade6ec0e0 | ||
![]() |
f355828240 | ||
![]() |
3159536fb5 | ||
![]() |
2e3aa4865e | ||
![]() |
630d1a89c8 | ||
![]() |
9f3a14a673 | ||
![]() |
fbc088225c | ||
![]() |
dcd9e0b94f | ||
![]() |
617a2c89cd | ||
![]() |
de8a049e93 | ||
![]() |
4f6e6e0e39 | ||
![]() |
f790e13f14 | ||
![]() |
f1a18bb112 | ||
![]() |
4725b936c0 | ||
![]() |
fe631c21d5 | ||
![]() |
1647dc78a2 | ||
![]() |
b05dd8f8a0 | ||
![]() |
b7db0edf41 | ||
![]() |
c49769a678 | ||
![]() |
359af36098 | ||
![]() |
3cad9e9629 | ||
![]() |
dcaf5a1636 | ||
![]() |
d9a95b9a8f | ||
![]() |
d502555428 | ||
![]() |
37ee485140 | ||
![]() |
4cf7827df9 | ||
![]() |
bd25205ad5 | ||
![]() |
85c6de8d2a | ||
![]() |
1dc3122bd3 | ||
![]() |
424bcd8161 | ||
![]() |
d38174483f | ||
![]() |
eefb7220d1 | ||
![]() |
035568d81f | ||
![]() |
14c5425276 | ||
![]() |
564e3b5b82 | ||
![]() |
d7cd0ab2c4 | ||
![]() |
71d542f62b | ||
![]() |
473776c0f7 | ||
![]() |
193e1598b0 | ||
![]() |
6846b83985 | ||
![]() |
7eebce2fde | ||
![]() |
a5787a77f3 | ||
![]() |
a60816ee2a | ||
![]() |
8f7b8506a6 | ||
![]() |
41dd9b684e | ||
![]() |
b9d343962f | ||
![]() |
329becfff6 | ||
![]() |
0ff30f0a58 | ||
![]() |
10721816f3 | ||
![]() |
c7e22d5d84 | ||
![]() |
2681955405 | ||
![]() |
81930a0e9c | ||
![]() |
9c202c84c1 | ||
![]() |
2e8daaf9c2 | ||
![]() |
bafd5bb012 | ||
![]() |
2246cb1c91 | ||
![]() |
6df8a4b5bc | ||
![]() |
c35494cbcf | ||
![]() |
53570aba42 | ||
![]() |
0c10aebe3e | ||
![]() |
520f4a1598 | ||
![]() |
b4df509523 | ||
![]() |
bd5bb1282f | ||
![]() |
d9980d1c9f | ||
![]() |
9e02951276 | ||
![]() |
3ea87ba79e | ||
![]() |
795edae41e | ||
![]() |
a9e86c84e4 | ||
![]() |
644aab3ed0 | ||
![]() |
5ae2cc8989 | ||
![]() |
0992236bb6 | ||
![]() |
0c916dc3b9 | ||
![]() |
26a15abfd4 | ||
![]() |
b73f16f09a | ||
![]() |
6508c86dca | ||
![]() |
02e51fc828 | ||
![]() |
d4791df40b | ||
![]() |
9de1e518d8 | ||
![]() |
8c539fa4f4 | ||
![]() |
41829a1bd9 | ||
![]() |
503a7531ef | ||
![]() |
87cd7da948 | ||
![]() |
fa72ba1719 | ||
![]() |
a140fa19e9 | ||
![]() |
dadbab9708 | ||
![]() |
6681e0d39b | ||
![]() |
6ae26931b0 | ||
![]() |
dbf14a5071 | ||
![]() |
50a06d19d4 | ||
![]() |
f8f9d55a53 | ||
![]() |
5e23e8a8b4 | ||
![]() |
cf6c72df08 | ||
![]() |
5da6922894 | ||
![]() |
cf0d35f7c9 | ||
![]() |
f1c1169d42 | ||
![]() |
00ee15236f | ||
![]() |
873bcbc24d | ||
![]() |
ad4f43d46d | ||
![]() |
3a2b027019 | ||
![]() |
313c1161ff | ||
![]() |
cb6e77ac51 | ||
![]() |
a1453aebbd | ||
![]() |
a546d053ae | ||
![]() |
160a449086 | ||
![]() |
bb56066857 | ||
![]() |
65b178e594 | ||
![]() |
73e05b6582 | ||
![]() |
019c676182 | ||
![]() |
2357ea5027 | ||
![]() |
e29c70edd2 | ||
![]() |
016d8eb806 | ||
![]() |
84aed3a780 | ||
![]() |
44c31582da | ||
![]() |
54145170c9 | ||
![]() |
45d0dac197 | ||
![]() |
6a983664fb | ||
![]() |
c6fd3c9c0b | ||
![]() |
26705f20e0 | ||
![]() |
06602ffaa2 | ||
![]() |
c6050a2246 | ||
![]() |
2961aeed08 | ||
![]() |
8023190d4d | ||
![]() |
65f6bf862b | ||
![]() |
6d3b20062e | ||
![]() |
af98bb7758 | ||
![]() |
2ea30c98aa | ||
![]() |
096d1f305c | ||
![]() |
bf723e0251 | ||
![]() |
0d8bede377 | ||
![]() |
6a19315350 | ||
![]() |
9f50343a8f | ||
![]() |
66ffbf1c9a | ||
![]() |
490a6822d4 | ||
![]() |
3565b77557 | ||
![]() |
667321e728 | ||
![]() |
0e57c961c8 | ||
![]() |
da36c5e375 | ||
![]() |
9e251af4a7 | ||
![]() |
1bbac89727 | ||
![]() |
6b20c47f06 | ||
![]() |
22ffac163d | ||
![]() |
8b4bed667c | ||
![]() |
83f71e446e | ||
![]() |
100223ae56 | ||
![]() |
08fe9a5cc7 | ||
![]() |
14ff60b6ad | ||
![]() |
c08c235be3 | ||
![]() |
06638a06f7 | ||
![]() |
264496925f | ||
![]() |
a840822c78 | ||
![]() |
ba71697278 | ||
![]() |
811d925400 | ||
![]() |
76fa8435cf | ||
![]() |
24a1c3e1c2 | ||
![]() |
0e63b1705e | ||
![]() |
80136189b1 | ||
![]() |
b0e7e8cb0d | ||
![]() |
68cbdd9465 | ||
![]() |
84d82c7c4e | ||
![]() |
69e6e4fccd | ||
![]() |
40949076d6 | ||
![]() |
34b54b38d3 | ||
![]() |
00d74ae459 | ||
![]() |
6c335507a5 | ||
![]() |
ef5ef77cbd | ||
![]() |
1c580faab8 | ||
![]() |
9d3fd17c18 | ||
![]() |
d4bbe0fa7b | ||
![]() |
977a2a81dd | ||
![]() |
3350a64a44 | ||
![]() |
7c68779e98 | ||
![]() |
a5e7bd6212 | ||
![]() |
79c0402c70 | ||
![]() |
8ec5473b97 | ||
![]() |
daf4bd48b2 | ||
![]() |
7b75bc8748 | ||
![]() |
150f2fe685 | ||
![]() |
10805c9abb | ||
![]() |
2609cfa754 | ||
![]() |
1be24abb4b | ||
![]() |
8fa89ae960 | ||
![]() |
b8682d9612 | ||
![]() |
06b51725b0 | ||
![]() |
54b34d86b7 | ||
![]() |
b098cff025 | ||
![]() |
e1ef0e4771 | ||
![]() |
a478f7f989 | ||
![]() |
849754a78f | ||
![]() |
af263d931b | ||
![]() |
1eca3d893f | ||
![]() |
7bfe75b859 | ||
![]() |
163668d031 | ||
![]() |
822cafbaad | ||
![]() |
76f264c7c2 | ||
![]() |
04381ea1b0 | ||
![]() |
044bef2266 | ||
![]() |
5e2075e901 | ||
![]() |
380f9f4a7b | ||
![]() |
6b601a7be6 | ||
![]() |
08df5e69ac | ||
![]() |
866b90a884 | ||
![]() |
46fdd7dcc1 | ||
![]() |
41020b7565 | ||
![]() |
1f6e24c192 | ||
![]() |
faecb40361 | ||
![]() |
0c925aef25 | ||
![]() |
195148c1c9 | ||
![]() |
c468c8ba96 | ||
![]() |
831a75a774 | ||
![]() |
d9313efa3e | ||
![]() |
ad95eed29f | ||
![]() |
15a79848af | ||
![]() |
985133748e | ||
![]() |
c6a78fe978 | ||
![]() |
028bd529cf | ||
![]() |
7d10943d84 | ||
![]() |
5b8041a62a | ||
![]() |
306839e274 | ||
![]() |
a7cf75980f | ||
![]() |
7cab991702 | ||
![]() |
374b0f7e2e | ||
![]() |
851de67432 | ||
![]() |
0ff12624ea | ||
![]() |
ff93f63630 | ||
![]() |
cb83aca94a | ||
![]() |
c1c616e431 | ||
![]() |
8f893d0cf5 | ||
![]() |
6605249b2a | ||
![]() |
aab319623c | ||
![]() |
00b8d3443d | ||
![]() |
700d1e9357 | ||
![]() |
f7612bd61a | ||
![]() |
f1134c50c1 | ||
![]() |
9873e66430 | ||
![]() |
fa871a586b | ||
![]() |
165bed9101 | ||
![]() |
2ec8175a3e | ||
![]() |
6e6aef15cb | ||
![]() |
7609e718af | ||
![]() |
34acabd43c | ||
![]() |
0a3ee66633 | ||
![]() |
00fb5c24f9 | ||
![]() |
4752eae590 | ||
![]() |
a44d6c129f | ||
![]() |
abefe733a6 | ||
![]() |
a1b2406c27 | ||
![]() |
31797a564e | ||
![]() |
0949b9f25d | ||
![]() |
0b408f4001 | ||
![]() |
02ddf51b4e | ||
![]() |
cf2ef5528d | ||
![]() |
d206509c19 | ||
![]() |
629813bce2 | ||
![]() |
17be7d83ed | ||
![]() |
e461dd9927 | ||
![]() |
d0a0c822ca | ||
![]() |
8c69add93f | ||
![]() |
2bf2bc10b0 | ||
![]() |
040db36477 | ||
![]() |
a8178bb16f | ||
![]() |
b199007543 | ||
![]() |
faeec9bc32 | ||
![]() |
cc276bd3c6 | ||
![]() |
9e88f80d13 | ||
![]() |
b1d88a1ffb | ||
![]() |
2fbc627fbb | ||
![]() |
c2ed555ec3 | ||
![]() |
7728fc6cda | ||
![]() |
bf3511467e | ||
![]() |
e9fe95dacd | ||
![]() |
7dab354bc1 | ||
![]() |
7636a1f015 | ||
![]() |
e302828f17 | ||
![]() |
6ada0bb2aa | ||
![]() |
37adddc0ed | ||
![]() |
7ef180fe7e | ||
![]() |
80e99b649d | ||
![]() |
762b18ff1e | ||
![]() |
9f3b50d84a | ||
![]() |
a132748dc2 | ||
![]() |
69d2696666 | ||
![]() |
4d6c2c3650 | ||
![]() |
3ce32d6516 | ||
![]() |
1590ea7944 | ||
![]() |
acf057acc5 | ||
![]() |
54395acd2a | ||
![]() |
0fe51f1a73 | ||
![]() |
379e74b8b1 | ||
![]() |
18baa341fc | ||
![]() |
dd86acde88 | ||
![]() |
cda31c11e9 | ||
![]() |
753a34eebf | ||
![]() |
13b78a8fc1 | ||
![]() |
a374ab186a | ||
![]() |
74e3407a42 | ||
![]() |
3e5742be0d | ||
![]() |
881f556534 | ||
![]() |
5ce28c0136 | ||
![]() |
74f304ef18 | ||
![]() |
467b444535 | ||
![]() |
0fc27c755e | ||
![]() |
cf9b266bca | ||
![]() |
ced7d3c4a6 | ||
![]() |
e78fa3f544 | ||
![]() |
dfa316831f | ||
![]() |
668124e1d0 | ||
![]() |
9eb70c3b79 | ||
![]() |
94463e9fa5 | ||
![]() |
1522afd6ca | ||
![]() |
01e8d7f495 | ||
![]() |
d8db68a92d | ||
![]() |
2dc6b1109e | ||
![]() |
200d74d14c | ||
![]() |
fa601a6aaa | ||
![]() |
1cf4458cd9 | ||
![]() |
385a275337 | ||
![]() |
b1be94a29d | ||
![]() |
7ca9ba00b5 | ||
![]() |
8f909cf418 | ||
![]() |
76c84c605d | ||
![]() |
2195a9804e | ||
![]() |
ba289ca71f | ||
![]() |
604ac5dd49 | ||
![]() |
98b2c582f2 | ||
![]() |
2ab5f5f9d9 | ||
![]() |
85b97d790a | ||
![]() |
b07f2ebbd6 | ||
![]() |
2cbf882258 | ||
![]() |
27d0d6805f | ||
![]() |
649bc32b1f | ||
![]() |
504737f4ea | ||
![]() |
10eae96486 | ||
![]() |
dd9124a99a | ||
![]() |
7b836d1232 | ||
![]() |
00e0892c31 | ||
![]() |
c44b844770 | ||
![]() |
2cdb14c184 | ||
![]() |
912aeba7b4 | ||
![]() |
10aad8c6ed | ||
![]() |
296cb9c44f | ||
![]() |
619d54ddc6 | ||
![]() |
c0923fbe0a | ||
![]() |
689789f2e9 | ||
![]() |
2eaf348eda | ||
![]() |
1f25a3c502 | ||
![]() |
4d9d8be4a4 | ||
![]() |
7bf5aa2015 | ||
![]() |
c2762c4eb9 | ||
![]() |
f5f3792165 | ||
![]() |
212e6e4bf8 | ||
![]() |
ca6f7c0b3a | ||
![]() |
70df8829fb | ||
![]() |
b586880d44 | ||
![]() |
758a5cc44a | ||
![]() |
985a3f433c | ||
![]() |
95545dcec9 | ||
![]() |
541d2f7baa | ||
![]() |
b5566038e2 | ||
![]() |
bcf8b190d7 | ||
![]() |
3ad9874ded | ||
![]() |
32ef547349 | ||
![]() |
9ad90e7298 | ||
![]() |
f2a8c3665d | ||
![]() |
98e97585e1 | ||
![]() |
fcb95175de | ||
![]() |
63bf09bc3c | ||
![]() |
b39570d9e5 | ||
![]() |
d83908bcff | ||
![]() |
a7f6a1ef4f | ||
![]() |
f849bc0a1a | ||
![]() |
dd5d8dce77 | ||
![]() |
82f933af93 | ||
![]() |
52485459a9 | ||
![]() |
6a4e81d1a1 | ||
![]() |
9b3afb58cd | ||
![]() |
802a7300e0 | ||
![]() |
87ca7d2d73 | ||
![]() |
1cdb0404fd | ||
![]() |
09b3197aa4 |
5
.dockerignore
Normal file
@@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
.git
|
||||
.DS_Store
|
||||
*.log
|
||||
engine
|
12
.editorconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
20
.formal-git/components
Normal file
@@ -0,0 +1,20 @@
|
||||
split-view
|
||||
kbs
|
||||
folders
|
||||
workspaces
|
||||
mods
|
||||
tests
|
||||
glance
|
||||
media
|
||||
images
|
||||
vendor
|
||||
tabs
|
||||
compact-mode
|
||||
common
|
||||
fonts
|
||||
welcome
|
||||
scripts
|
||||
workflows
|
||||
winsign
|
||||
flatpak
|
||||
configs
|
1
.formal-git/template
Normal file
@@ -0,0 +1 @@
|
||||
{type}: {message}, b=({bugId}), c={components}
|
1
.gitattributes
vendored
@@ -1,2 +1 @@
|
||||
|
||||
*.patch linguist-language=C++
|
||||
|
1
.github/FUNDING.yml
vendored
@@ -1,3 +1,2 @@
|
||||
|
||||
patreon: zen_browser
|
||||
ko_fi: zen_browser
|
||||
|
85
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -4,7 +4,27 @@ body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for filing a bug report.
|
||||
Thank you for filing a bug report!
|
||||
|
||||
## IMPORTANT READ
|
||||
- Please provide descriptive titles. Bad titles do more harm than good.
|
||||
- Please search existing issues to avoid creating duplicates.
|
||||
- For enhancement requests, please use GitHub Discussions.
|
||||
- Please fill out the template below to the best of your ability.
|
||||
- Please describe the issue as much as possible and provide steps to reproduce it along with visual aids if possible.
|
||||
- type: checkboxes
|
||||
id: captchas
|
||||
attributes:
|
||||
label: Captchas
|
||||
description: Just making sure you did actually read the instructions.
|
||||
options:
|
||||
- label: I have read the instructions.
|
||||
- label: I have searched existing issues and avoided creating duplicates.
|
||||
- label: I am not filing an enhancement request.
|
||||
- label: I have checked that this issue cannot be reproduced on Mozilla Firefox.
|
||||
- label: I have checked that this issue can be reproduced once I removed all my Mods and Custom CSS.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
@@ -13,49 +33,62 @@ body:
|
||||
placeholder: Tell us what you see!
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: firefox
|
||||
attributes:
|
||||
label: Reproducible?
|
||||
description: Is this issue reproducible on Firefox?
|
||||
options:
|
||||
- label: I have checked that this issue cannot be reproduced on Mozilla Firefox.
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of our software are you running? Please DO NOT report Classic bugs.
|
||||
placeholder: 1.0.0
|
||||
description: What version of our software are you running? Please do not use "latest" or "newest" as version numbers. Go to `Help -> About Zen` to find the version number.
|
||||
placeholder: 1.0.0b
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: severity
|
||||
attributes:
|
||||
label: Severity impact
|
||||
description: See label descriptions for more information.
|
||||
options:
|
||||
- Low
|
||||
- Medium
|
||||
- High
|
||||
- Critical
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: platform
|
||||
attributes:
|
||||
label: What platform are you seeing the problem on?
|
||||
multiple: true
|
||||
options:
|
||||
- Linux
|
||||
- Linux (AppImage)
|
||||
- Linux (Flatpak)
|
||||
- Linux (Tarball)
|
||||
- macOS - aarch64
|
||||
- macOS - Intel
|
||||
- Windows
|
||||
- Windows - x64
|
||||
- Windows - aarch64
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: component
|
||||
attributes:
|
||||
label: What component is this issue related to?
|
||||
options:
|
||||
- Other
|
||||
- Compact Mode
|
||||
- Workspaces
|
||||
- Mods / Themes
|
||||
- Glance
|
||||
- URL Bar
|
||||
- Tabs
|
||||
- Split View
|
||||
- Settings
|
||||
- Privacy
|
||||
- Performance
|
||||
- Media Controler
|
||||
- Tab unloading
|
||||
- Tab Folders
|
||||
- Keyboard Shortcuts
|
||||
- Security
|
||||
- Extensions
|
||||
- Customizable UI / Toolbars
|
||||
- Localization
|
||||
- Bookmarks
|
||||
- Sync
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Relevant log output
|
||||
label: Relevant log output if applicable
|
||||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
||||
render: shell
|
||||
|
6
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Feature Request
|
||||
url: https://github.com/zen-browser/desktop/discussions
|
||||
about: Please use GitHub discussions for feature requests.
|
||||
|
66
.github/advanced-issue-labeler.yml
vendored
@@ -1,16 +1,58 @@
|
||||
---
|
||||
# Keep up to date with workflows/issue-create.yml !!!
|
||||
|
||||
policy:
|
||||
- section:
|
||||
- id: [severity]
|
||||
- id: [component]
|
||||
label:
|
||||
- name: 'kind: low severity'
|
||||
keys: ['Low']
|
||||
- name: 'kind: medium severity'
|
||||
keys: ['Medium']
|
||||
- name: 'kind: high severity'
|
||||
keys: ['High']
|
||||
- name: 'kind: critical severity'
|
||||
keys: ['Critical']
|
||||
# Make sure it's in sync with the dropdown in the issue template
|
||||
- name: 'component: sync'
|
||||
keys: ['Sync']
|
||||
- name: 'component: compact-mode'
|
||||
keys: ['Compact Mode']
|
||||
- name: 'component: workspaces'
|
||||
keys: ['Workspaces']
|
||||
- name: 'component: mods-themes'
|
||||
keys: ['Mods / Themes']
|
||||
- name: 'component: bookmarks'
|
||||
keys: ['Bookmarks']
|
||||
- name: 'component: glance'
|
||||
keys: ['Glance']
|
||||
- name: 'component: url-bar'
|
||||
keys: ['URL Bar']
|
||||
- name: 'component: tabs'
|
||||
keys: ['Tabs']
|
||||
- name: 'component: settings'
|
||||
keys: ['Settings']
|
||||
- name: 'component: privacy'
|
||||
keys: ['Privacy']
|
||||
- name: 'component: split-view'
|
||||
keys: ['Split View']
|
||||
- name: 'component: performance'
|
||||
keys: ['Performance']
|
||||
- name: 'component: media-controller'
|
||||
keys: ['Media Controler']
|
||||
- name: 'component: tab-unloading'
|
||||
keys: ['Tab unloading']
|
||||
- name: 'component: tab-folders'
|
||||
keys: ['Tab Folders']
|
||||
- name: 'component: keyboard-shortcuts'
|
||||
keys: ['Keyboard Shortcuts']
|
||||
- name: 'component: security'
|
||||
keys: ['Security']
|
||||
- name: 'component: extensions'
|
||||
keys: ['Extensions']
|
||||
- name: 'component: customizable-ui-toolbars'
|
||||
keys: ['Customizable UI / Toolbars']
|
||||
- name: 'component: localization'
|
||||
keys: ['Localization']
|
||||
- name: 'component: other'
|
||||
keys: ['Other']
|
||||
|
||||
- id: [platform]
|
||||
block-list: ['Other']
|
||||
label:
|
||||
# Make sure it's in sync with the dropdown in the issue template
|
||||
- name: 'platform: linux'
|
||||
keys: ['Linux (AppImage)', 'Linux (Flatpak)', 'Linux (Tarball)']
|
||||
- name: 'platform: macOS'
|
||||
keys: ['macOS - aarch64', 'macOS - Intel']
|
||||
- name: 'platform: windows'
|
||||
keys: ['Windows - x64', 'Windows - aarch64']
|
||||
|
463
.github/workflows/alpha.yml
vendored
@@ -1,463 +0,0 @@
|
||||
name: Zen Alpha builds
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
create_release:
|
||||
description: 'Create a new release for this build'
|
||||
required: false
|
||||
default: false
|
||||
type: 'boolean'
|
||||
update_version:
|
||||
description: 'Update the version number'
|
||||
required: false
|
||||
default: true
|
||||
type: 'boolean'
|
||||
|
||||
jobs:
|
||||
|
||||
build-data:
|
||||
permissions:
|
||||
contents: write
|
||||
name: Generate build data
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
build_date: ${{ steps.data.outputs.builddate }}
|
||||
version: ${{ steps.data.outputs.version }}
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Setup Surfer
|
||||
run: |
|
||||
npm i -g @zen-browser/surfer
|
||||
|
||||
- name: Bump version
|
||||
if: ${{ github.event.inputs.update_version == 'true' }}
|
||||
run: |
|
||||
pnpm surfer ci --brand alpha --bump prerelease
|
||||
|
||||
- name: Bump version without new version
|
||||
if: ${{ github.event.inputs.update_version == 'false' }}
|
||||
run: |
|
||||
pnpm surfer ci --brand alpha
|
||||
|
||||
- name: Debug
|
||||
run: |
|
||||
surfer get version
|
||||
surfer get version | xargs
|
||||
echo "$(surfer get version | xargs)"
|
||||
|
||||
- name: Export release date
|
||||
id: data
|
||||
shell: bash
|
||||
run: |
|
||||
echo "builddate=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT
|
||||
echo "version=$(surfer get version | xargs)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
if: ${{ github.event.inputs.update_version == 'true' }}
|
||||
with:
|
||||
commit_message: 🔖 Update version to ${{ steps.data.outputs.version }}
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
||||
|
||||
check-release:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data]
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Setup surfer
|
||||
run: |
|
||||
npm i -g @zen-browser/surfer
|
||||
|
||||
- name: Activate surfer CLI
|
||||
run: |
|
||||
echo "There's a bug in the surfer CLI, we run this so that surfer sets everything up correctly"
|
||||
pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
|
||||
|
||||
- name: Check version
|
||||
run: |
|
||||
echo "$(pwd)"
|
||||
ls .
|
||||
echo "version=$(pnpm surfer get version | xargs)" >> $GITHUB_OUTPUT
|
||||
if [[ $(pnpm surfer get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then
|
||||
echo ">>> Version matches"
|
||||
else
|
||||
echo ">>> Version mismatch"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
source:
|
||||
if: false
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data, check-release]
|
||||
environment: production
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Load surfer CI setup
|
||||
run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
|
||||
|
||||
- name: Download firefox source and dependancies
|
||||
run: pnpm surfer download --verbose
|
||||
|
||||
- name: Import
|
||||
run: pnpm surfer import --verbose
|
||||
|
||||
- name: Compress
|
||||
run: |
|
||||
cd engine
|
||||
# -h is used to dereference symlinks
|
||||
tar --use-compress-program=zstd -hcf ../zen.source.tar.gz *
|
||||
cd ..
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zen.source.tar.gz
|
||||
path: ./zen.source.tar.gz
|
||||
|
||||
#windows-step-1:
|
||||
# name: Windows build step 1 (PGO build)
|
||||
# uses: ./.github/workflows/windows-alpha-build.yml
|
||||
# needs: [build-data]
|
||||
# permissions:
|
||||
# contents: write
|
||||
# secrets: inherit
|
||||
# with:
|
||||
# build-version: ${{ needs.build-data.outputs.version }}
|
||||
# generate-gpo: true
|
||||
# profile-data-path-archive: zen-windows-x86_64-profile-data-and-jarlog.zip
|
||||
|
||||
#windows-step-2:
|
||||
# name: Windows build step 2 (Generate profile data)
|
||||
# uses: ./.github/workflows/windows-profile-build.yml
|
||||
# permissions:
|
||||
# contents: write
|
||||
# secrets: inherit
|
||||
# needs: [windows-step-1, build-data]
|
||||
# with:
|
||||
# build-version: ${{ needs.build-data.outputs.version }}
|
||||
# profile-data-path-archive: zen.win64-pgo-stage-1.zip
|
||||
|
||||
windows-step-3:
|
||||
name: Windows build step 3 (build with profile data)
|
||||
uses: ./.github/workflows/windows-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
generate-gpo: false
|
||||
|
||||
linux:
|
||||
name: Linux build
|
||||
uses: ./.github/workflows/linux-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
|
||||
mac:
|
||||
name: macOS build
|
||||
uses: ./.github/workflows/macos-alpha-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
|
||||
appimage:
|
||||
name: AppImage build - Linux ${{ matrix.generic == true && 'generic' || 'specific' }}
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
generic: [true, false]
|
||||
needs: [linux]
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install -g pnpm
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install libfuse2 desktop-file-utils
|
||||
|
||||
- name: Download linux build
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
||||
|
||||
- name: Execute AppImage build
|
||||
run: |
|
||||
set -eux
|
||||
rm AppDir/.DirIcon || true
|
||||
cp configs/branding/alpha/logo128.png AppDir/usr/share/icons/hicolor/128x128/apps/zen.png
|
||||
cp configs/branding/alpha/logo128.png AppDir/zen.png && ln -s zen.png AppDir/.DirIcon
|
||||
|
||||
APPDIR=AppDir
|
||||
tar -xvf *.tar.* && rm -rf *.tar.*
|
||||
mv zen/* $APPDIR/
|
||||
wget https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
|
||||
chmod +x *.AppImage
|
||||
chmod +x ./AppDir/AppRun
|
||||
echo "AppDir: $APPDIR"
|
||||
ls -al
|
||||
find .
|
||||
ls -al "$APPDIR"
|
||||
ARCH=x86_64 ./appimagetool-x86_64.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 10 \
|
||||
-u "gh-releases-zsync|$GITHUB_REPOSITORY_OWNER|desktop|latest|zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync" \
|
||||
"$APPDIR" zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||
mkdir dist
|
||||
mv zen*AppImage* dist/.
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
||||
|
||||
- name: Upload artifact (ZSync)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync
|
||||
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync
|
||||
|
||||
release:
|
||||
if: ${{ github.event.inputs.create_release == 'true' }}
|
||||
permissions: write-all
|
||||
name: Release
|
||||
needs: [build-data, linux, windows-step-3, check-release, mac, appimage]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Git Pull
|
||||
run: git pull
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
|
||||
- name: List
|
||||
run: find .
|
||||
|
||||
- name: Clone updates repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: zen-browser/updates-server
|
||||
path: updates-server
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Copy update manifests
|
||||
run: |
|
||||
cd updates-server
|
||||
mkdir -p updates
|
||||
cp -a ../linux_update_manifest_generic/. updates/
|
||||
cp -a ../linux_update_manifest_specific/. updates/
|
||||
|
||||
cp -a ../windows_update_manifest_generic/. updates/
|
||||
cp -a ../windows_update_manifest_specific/. updates/
|
||||
|
||||
cp -a ../macos_update_manifest_aarch64/. updates/
|
||||
cp -a ../macos_update_manifest_x64/. updates/
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: 🚀 Update update manifests
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
||||
repository: ./updates-server
|
||||
|
||||
- name: release-github
|
||||
uses: 'marvinpinto/action-automatic-releases@latest'
|
||||
with:
|
||||
repo_token: '${{ secrets.DEPLOY_KEY }}'
|
||||
automatic_release_tag: ${{ needs.build-data.outputs.version }}
|
||||
prerelease: false
|
||||
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
|
||||
files: |
|
||||
zen.source.tar.gz
|
||||
zen.linux-generic.tar.bz2
|
||||
zen.linux-specific.tar.bz2
|
||||
zen-generic.AppImage
|
||||
zen-generic.AppImage.zsync
|
||||
zen-specific.AppImage
|
||||
zen-specific.AppImage.zsync
|
||||
zen.win-generic.zip
|
||||
zen.win-specific.zip
|
||||
linux.mar
|
||||
linux-generic.mar
|
||||
windows.mar
|
||||
windows-generic.mar
|
||||
macos-x64.mar
|
||||
macos-aarch64.mar
|
||||
zen.installer.exe
|
||||
zen.installer-generic.exe
|
||||
zen.macos-x64.dmg
|
||||
zen.macos-aarch64.dmg
|
||||
|
||||
release-flatpak:
|
||||
if: ${{ github.event.inputs.create_release == 'true' }}
|
||||
permissions: write-all
|
||||
name: Release Flatpak
|
||||
needs: [release, linux, build-data]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Clone flatpak repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: flathub/io.github.zen_browser.zen
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Download linux generic build
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen.linux-generic.tar.bz2
|
||||
|
||||
- name: Update repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: zen-browser
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Download flatpak archive
|
||||
run: |
|
||||
wget https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar -O archive.tar
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
- name: Prepare flatpak manifest
|
||||
run: |
|
||||
python3 ./zen-browser/scripts/prepare-flatpak-release.py \
|
||||
--flatpak-archive archive.tar \
|
||||
--version ${{ needs.build-data.outputs.version }} \
|
||||
--linux-archive zen.linux-generic.tar.bz2 \
|
||||
--output io.github.zen_browser.zen.yml \
|
||||
--template-root ./zen-browser/flatpak
|
||||
|
||||
- name: Commit changes
|
||||
run: |
|
||||
git add io.github.zen_browser.zen.yml
|
||||
git commit -m "Update to version ${{ needs.build-data.outputs.version }}"
|
||||
|
||||
- name: Clean up
|
||||
run: |
|
||||
rm -rf zen-browser
|
||||
rm -rf archive.tar
|
||||
rm -rf zen.linux-generic.tar.bz2
|
||||
|
||||
- name: Upload flatpak manifest
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: io.github.zen_browser.zen.yml
|
||||
path: ./io.github.zen_browser.zen.yml
|
||||
|
||||
- name: Create pull request
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
env:
|
||||
GIT_TRACE: 1
|
||||
GIT_CURL_VERBOSE: 1
|
||||
with:
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
commit-message: 🚀 Update to version ${{ needs.build-data.outputs.version }}
|
||||
title: 🚀 Update to version ${{ needs.build-data.outputs.version }}
|
||||
body: |
|
||||
This PR updates the Zen Browser Flatpak package to version ${{ needs.build-data.outputs.version }}.
|
||||
|
||||
@mauro-balades
|
||||
branch: update-to-${{ needs.build-data.outputs.version }}
|
||||
base: master
|
||||
git-token: ${{ secrets.DEPLOY_KEY }}
|
||||
delete-branch: true
|
||||
|
||||
|
747
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,747 @@
|
||||
name: Zen Release builds
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
create_release:
|
||||
description: 'Create a new release for this build'
|
||||
required: false
|
||||
default: false
|
||||
type: 'boolean'
|
||||
update_version:
|
||||
description: 'Update the version number'
|
||||
required: false
|
||||
default: false
|
||||
type: 'boolean'
|
||||
update_branch:
|
||||
description: 'Update branch with new version'
|
||||
required: true
|
||||
default: 'release'
|
||||
type: 'choice'
|
||||
options:
|
||||
- 'release'
|
||||
- 'twilight'
|
||||
use-sccache:
|
||||
description: 'Use sccache'
|
||||
required: true
|
||||
type: 'boolean'
|
||||
default: false
|
||||
workflow_call:
|
||||
inputs:
|
||||
create_release:
|
||||
description: 'Create a new release for this build'
|
||||
required: false
|
||||
default: false
|
||||
type: 'boolean'
|
||||
update_version:
|
||||
description: 'Update the version number'
|
||||
required: false
|
||||
default: false
|
||||
type: 'boolean'
|
||||
update_branch:
|
||||
description: 'Update branch with new version'
|
||||
required: true
|
||||
default: 'release'
|
||||
type: 'string'
|
||||
use-sccache:
|
||||
description: 'Use sccache'
|
||||
required: true
|
||||
type: 'boolean'
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
debug-inputs:
|
||||
name: Debug inputs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Debug
|
||||
run: |
|
||||
echo "create_release: ${{ inputs.create_release }}"
|
||||
echo "update_version: ${{ inputs.update_version }}"
|
||||
echo "use sccache: ${{ inputs.use-sccache }}"
|
||||
echo "update_branch: ${{ inputs.update_branch }}"
|
||||
echo "GITHUB_REPOSITORY: ${{ github.repository }}"
|
||||
echo "GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}"
|
||||
echo "GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}"
|
||||
|
||||
buildid:
|
||||
name: Generate build ID
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
buildids: ${{ steps.get.outputs.bid }}
|
||||
steps:
|
||||
- id: get
|
||||
shell: bash -xe {0}
|
||||
run: |
|
||||
bdat=`date +"%Y%m%d%I%M%S"`
|
||||
echo "bid=${bdat}" >> $GITHUB_OUTPUT
|
||||
|
||||
start-self-host:
|
||||
runs-on: ubuntu-latest
|
||||
needs: debug-inputs
|
||||
steps:
|
||||
- name: Download aws-cli
|
||||
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||
unzip awscliv2.zip
|
||||
sudo ./aws/install --update
|
||||
|
||||
- name: Start self-hosted runner
|
||||
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
echo "Starting self-hosted runner"
|
||||
echo "${{ secrets.SELF_HOSTED_RUNNER_START_SCRIPT }}" | base64 -d > start.sh
|
||||
sudo chmod +x start.sh
|
||||
bash ./start.sh
|
||||
|
||||
- name: Remove self-hosted runner script
|
||||
if: always() && ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
echo "Removing self-hosted runner script"
|
||||
rm start.sh || true
|
||||
|
||||
check-build-is-correct:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [debug-inputs]
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Check if correct branch
|
||||
if: ${{ inputs.create_release }}
|
||||
run: |
|
||||
echo "Checking if we are on the correct branch"
|
||||
git branch
|
||||
git status
|
||||
git branch --show-current
|
||||
branch="${{ inputs.update_branch }}"
|
||||
if [[ $branch == "twilight" ]]; then
|
||||
branch="dev"
|
||||
elif [[ $branch == "release" ]]; then
|
||||
branch="stable"
|
||||
fi
|
||||
if [[ $(git branch --show-current) != $branch ]]; then
|
||||
echo ">>> Branch mismatch"
|
||||
# exit 1
|
||||
else
|
||||
echo ">>> Branch matches"
|
||||
fi
|
||||
|
||||
build-data:
|
||||
permissions:
|
||||
contents: write
|
||||
name: Generate build data
|
||||
runs-on: ubuntu-latest
|
||||
needs: check-build-is-correct
|
||||
outputs:
|
||||
build_date: ${{ steps.data.outputs.builddate }}
|
||||
version: ${{ steps.data.outputs.version }}
|
||||
build_time: ${{ steps.data.outputs.buildtime }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
|
||||
- name: Setup Surfer
|
||||
run: |
|
||||
npm i -g @zen-browser/surfer
|
||||
|
||||
- name: Bump version
|
||||
if: ${{ inputs.update_version && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
npm run surfer -- ci --brand ${{ inputs.update_branch }} --bump prerelease
|
||||
|
||||
- name: Bump version without new version
|
||||
if: ${{ !inputs.update_version || inputs.update_branch == 'twilight' }}
|
||||
run: |
|
||||
npm run surfer -- ci --brand ${{ inputs.update_branch }}
|
||||
|
||||
- name: Debug
|
||||
run: |
|
||||
surfer get version
|
||||
surfer get version | xargs
|
||||
echo "$(surfer get version | xargs)"
|
||||
|
||||
- name: Export release date
|
||||
id: data
|
||||
shell: bash
|
||||
run: |
|
||||
echo "builddate=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT
|
||||
echo "version=$(surfer get version | xargs)" >> $GITHUB_OUTPUT
|
||||
echo "buildtime=$(date +"%H:%M:%S")" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Commit
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
if: ${{ inputs.update_version }}
|
||||
with:
|
||||
commit_message: 🔖 Update version to ${{ steps.data.outputs.version }}
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||
|
||||
lint:
|
||||
uses: ./.github/workflows/code-linter.yml
|
||||
needs: [build-data]
|
||||
name: Lint
|
||||
|
||||
check-release:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data, lint]
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
|
||||
- name: Setup Surfer
|
||||
run: |
|
||||
npm i -g @zen-browser/surfer
|
||||
|
||||
- name: Activate Surfer CLI
|
||||
run: |
|
||||
npm run surfer -- ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }}
|
||||
|
||||
- name: Check version
|
||||
run: |
|
||||
echo "$(pwd)"
|
||||
echo $(npm run --silent surfer -- get version | xargs)
|
||||
echo "version=$(npm run --silent surfer -- get version | xargs)" >> $GITHUB_OUTPUT
|
||||
if [[ $(npm run --silent surfer -- get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then
|
||||
echo ">>> Version matches"
|
||||
else
|
||||
echo ">>> Version mismatch"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source:
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-data, check-release]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
|
||||
- name: Load Surfer CI setup
|
||||
run: npm run surfer -- ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }}
|
||||
|
||||
- name: Download Firefox source and dependencies
|
||||
run: npm run download --verbose
|
||||
|
||||
- name: Import
|
||||
run: npm run import -- --verbose
|
||||
|
||||
- name: Compress
|
||||
run: |
|
||||
cd engine
|
||||
tar --use-compress-program=zstd -hcf ../zen.source.tar.zst *
|
||||
cd ..
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: zen.source.tar.zst
|
||||
path: ./zen.source.tar.zst
|
||||
|
||||
windows-step-1:
|
||||
name: Windows build step 1 (PGO build)
|
||||
uses: ./.github/workflows/windows-release-build.yml
|
||||
needs: [build-data, buildid]
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
with:
|
||||
use-sccache: ${{ inputs.use-sccache }}
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
generate-gpo: true
|
||||
profile-data-path-archive: zen-windows-profile-data-and-jarlog.zip
|
||||
release-branch: ${{ inputs.update_branch }}
|
||||
MOZ_BUILD_DATE: ${{needs.buildid.outputs.buildids}}
|
||||
|
||||
windows-step-2:
|
||||
name: Windows build step 2 (Generate profile data)
|
||||
uses: ./.github/workflows/windows-profile-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [windows-step-1, build-data]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
profile-data-path-archive: zen.win64-pgo-stage-1.zip
|
||||
release-branch: ${{ inputs.update_branch }}
|
||||
|
||||
windows-step-3:
|
||||
name: Windows build step 3 (build with profile data)
|
||||
uses: ./.github/workflows/windows-release-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data, windows-step-2, start-self-host, buildid]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
generate-gpo: false
|
||||
release-branch: ${{ inputs.update_branch }}
|
||||
MOZ_BUILD_DATE: ${{needs.buildid.outputs.buildids}}
|
||||
use-sccache: ${{ inputs.use-sccache }}
|
||||
|
||||
linux:
|
||||
name: Linux build
|
||||
uses: ./.github/workflows/linux-release-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data, start-self-host, buildid]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
release-branch: ${{ inputs.update_branch }}
|
||||
MOZ_BUILD_DATE: ${{needs.buildid.outputs.buildids}}
|
||||
use-sccache: ${{ inputs.use-sccache }}
|
||||
|
||||
mac:
|
||||
name: macOS build
|
||||
uses: ./.github/workflows/macos-release-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data, buildid]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
release-branch: ${{ inputs.update_branch }}
|
||||
MOZ_BUILD_DATE: ${{needs.buildid.outputs.buildids}}
|
||||
use-sccache: ${{ inputs.use-sccache }}
|
||||
|
||||
mac-uni:
|
||||
name: macOS build (Universal)
|
||||
uses: ./.github/workflows/macos-universal-release-build.yml
|
||||
permissions:
|
||||
contents: write
|
||||
secrets: inherit
|
||||
needs: [build-data, mac]
|
||||
with:
|
||||
build-version: ${{ needs.build-data.outputs.version }}
|
||||
release-branch: ${{ inputs.update_branch }}
|
||||
|
||||
appimage:
|
||||
name: AppImage build - Linux ${{ matrix.arch }}
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
needs: [linux]
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install libfuse2 desktop-file-utils appstream
|
||||
|
||||
- name: Download Linux build
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen.linux-${{ matrix.arch }}.tar.xz
|
||||
|
||||
- name: Execute AppImage build
|
||||
run: |
|
||||
set -eux
|
||||
export ARCH=${{ matrix.arch }}
|
||||
UPINFO="gh-releases-zsync|$GITHUB_REPOSITORY_OWNER|desktop|latest|zen-$ARCH.AppImage.zsync"
|
||||
rm build/AppDir/.DirIcon || true
|
||||
cp configs/branding/${{ inputs.update_branch }}/logo128.png build/AppDir/usr/share/icons/hicolor/128x128/apps/zen.png
|
||||
cp configs/branding/${{ inputs.update_branch }}/logo128.png build/AppDir/zen.png && ln -s zen.png build/AppDir/.DirIcon
|
||||
|
||||
if [ "${{ inputs.update_branch }}" = "twilight" ]; then
|
||||
sed -i -e 's/Name=Zen Browser/Name=Zen Twilight/g' build/AppDir/zen.desktop
|
||||
sed -i -e 's/StartupWMClass=zen/StartupWMClass=zen-twilight/g' build/AppDir/zen.desktop
|
||||
fi
|
||||
|
||||
APPDIR=build/AppDir
|
||||
tar -xvf *.tar.* && rm -rf *.tar.*
|
||||
mv zen/* $APPDIR/
|
||||
wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
|
||||
wget "https://github.com/VHSgunzo/uruntime/releases/latest/download/uruntime-appimage-squashfs-lite-$ARCH"
|
||||
chmod +x *.AppImage
|
||||
chmod +x ./uruntime-appimage-squashfs-lite-"$ARCH"
|
||||
chmod +x ./build/AppDir/AppRun
|
||||
|
||||
# keep the uruntime mountpoint (massively speeds up launch time)
|
||||
sed -i 's|URUNTIME_MOUNT=[0-9]|URUNTIME_MOUNT=0|' ./uruntime-appimage-squashfs-lite-"$ARCH"
|
||||
|
||||
echo "AppDir: $APPDIR"
|
||||
ls -al
|
||||
find .
|
||||
ls -al "$APPDIR"
|
||||
./appimagetool-x86_64.AppImage -u "$UPINFO" "$APPDIR" zen-"$ARCH".AppImage --runtime-file ./uruntime-appimage-squashfs-lite-"$ARCH"
|
||||
mkdir dist
|
||||
mv zen*AppImage* dist/.
|
||||
unset ARCH
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: zen-${{ matrix.arch }}.AppImage
|
||||
path: ./dist/zen-${{ matrix.arch }}.AppImage
|
||||
|
||||
- name: Upload artifact (ZSync)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: zen-${{ matrix.arch }}.AppImage.zsync
|
||||
path: ./dist/zen-${{ matrix.arch }}.AppImage.zsync
|
||||
|
||||
stop-self-hosted:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [windows-step-3, linux]
|
||||
if: always()
|
||||
steps:
|
||||
- name: Download aws-cli
|
||||
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||
unzip awscliv2.zip
|
||||
sudo ./aws/install --update
|
||||
|
||||
- name: Stop self-hosted runner
|
||||
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
echo "Stopping self-hosted runner"
|
||||
echo "${{ secrets.SELF_HOSTED_RUNNER_STOP_SCRIPT }}" | base64 -d > stop.sh
|
||||
sudo chmod +x stop.sh
|
||||
bash ./stop.sh > /dev/null
|
||||
|
||||
- name: Remove self-hosted runner script
|
||||
if: always() && ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
echo "Removing self-hosted runner script"
|
||||
rm stop.sh || true
|
||||
|
||||
release:
|
||||
if: ${{ inputs.create_release || inputs.update_branch == 'twilight' }}
|
||||
permissions: write-all
|
||||
name: Release
|
||||
needs: [build-data, linux, windows-step-3, check-release, mac-uni, appimage, source, lint, stop-self-hosted]
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: ${{ inputs.update_branch == 'release' && 'Deploy-Release' || 'Deploy-Twilight' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: List
|
||||
run: find .
|
||||
|
||||
- name: Checkout updates repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: zen-browser/updates-server
|
||||
path: updates-server
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Download object files
|
||||
if: ${{ inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object --depth 1
|
||||
|
||||
- name: Copy update manifests
|
||||
env:
|
||||
RELEASE_BRANCH: ${{ inputs.update_branch }}
|
||||
run: |
|
||||
cd updates-server
|
||||
mkdir -p updates
|
||||
cp -a ../linux_update_manifest_x86_64/. updates/
|
||||
cp -a ../linux_update_manifest_aarch64/. updates/
|
||||
|
||||
if [[ $RELEASE_BRANCH == 'release' ]]; then
|
||||
cp -a ../.github/workflows/object/windows-x64-signed-x86_64/update_manifest/. updates/
|
||||
cp -a ../.github/workflows/object/windows-x64-signed-arm64/update_manifest/. updates/
|
||||
else
|
||||
cp -a ../windows_update_manifest_x86_64/. updates/
|
||||
cp -a ../windows_update_manifest_arm64/. updates/
|
||||
fi
|
||||
|
||||
cp -a ../macos_update_manifest/. updates/
|
||||
|
||||
- name: Commit
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: 🚀 Update update manifests
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||
repository: ./updates-server
|
||||
|
||||
- name: Generate Release Notes
|
||||
env:
|
||||
RELEASE_BRANCH: ${{ inputs.update_branch }}
|
||||
run: bash .github/workflows/src/generate_release_notes.sh
|
||||
|
||||
# If we are on Twilight, we want to just update the Twilight tag's release
|
||||
- name: Update Twilight tag
|
||||
if: ${{ inputs.update_branch == 'twilight' }}
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
body_path: release_notes.md
|
||||
files: |
|
||||
./zen.source.tar.zst/*
|
||||
./zen.linux-x86_64.tar.xz/*
|
||||
./zen.linux-aarch64.tar.xz/*
|
||||
./zen-x86_64.AppImage/*
|
||||
./zen-x86_64.AppImage.zsync/*
|
||||
./zen-aarch64.AppImage/*
|
||||
./zen-aarch64.AppImage.zsync/*
|
||||
./zen.win-x86_64.zip/*
|
||||
./zen.win-arm64.zip/*
|
||||
./linux.mar/*
|
||||
./linux-aarch64.mar/*
|
||||
./windows.mar/*
|
||||
./windows-arm64.mar/*
|
||||
./macos.mar/*
|
||||
./zen.installer.exe/*
|
||||
./zen.installer-arm64.exe/*
|
||||
./zen.macos-universal.dmg/*
|
||||
tag_name: 'twilight'
|
||||
name: 'Twilight build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }} at ${{ needs.build-data.outputs.build_time }})'
|
||||
draft: false
|
||||
generate_release_notes: false
|
||||
prerelease: true
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
fail_on_unmatched_files: false
|
||||
env:
|
||||
GITHUB_REPOSITORY: ${{ github.repository }}
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{ inputs.update_branch == 'release' }}
|
||||
with:
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
tag_name: ${{ needs.build-data.outputs.version }}
|
||||
prerelease: false
|
||||
fail_on_unmatched_files: false
|
||||
generate_release_notes: false
|
||||
name: 'Release build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
|
||||
body_path: release_notes.md
|
||||
files: |
|
||||
./zen.source.tar.zst/*
|
||||
./zen.linux-x86_64.tar.xz/*
|
||||
./zen.linux-aarch64.tar.xz/*
|
||||
./zen-x86_64.AppImage/*
|
||||
./zen-x86_64.AppImage.zsync/*
|
||||
./zen-aarch64.AppImage/*
|
||||
./zen-aarch64.AppImage.zsync/*
|
||||
./.github/workflows/object/windows-x64-signed-x86_64/zen.win-x86_64.zip
|
||||
./.github/workflows/object/windows-x64-signed-arm64/zen.win-arm64.zip
|
||||
./linux.mar/*
|
||||
./linux-aarch64.mar/*
|
||||
./.github/workflows/object/windows-x64-signed-x86_64/windows.mar
|
||||
./.github/workflows/object/windows-x64-signed-arm64/windows-arm64.mar
|
||||
./macos.mar/*
|
||||
./.github/workflows/object/windows-x64-signed-x86_64/zen.installer.exe
|
||||
./.github/workflows/object/windows-x64-signed-arm64/zen.installer-arm64.exe
|
||||
./zen.macos-universal.dmg/*
|
||||
|
||||
prepare-flatpak:
|
||||
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
permissions: write-all
|
||||
name: Prepare Flatpak
|
||||
needs: [release, linux, build-data]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Flatpak repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: zen-browser/release-utils
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
git pull
|
||||
sudo apt-get update
|
||||
npm install
|
||||
|
||||
- name: Generate new Flatpak release
|
||||
run: |
|
||||
npm run build-flatpak -- \
|
||||
--version ${{ needs.build-data.outputs.version }}
|
||||
|
||||
- name: Commit
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: 🚀 Update releases for Flatpak
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||
|
||||
- name: Checkout Flatpak repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: zen-browser/flatpak
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
path: flatpak
|
||||
|
||||
- name: Move releases.xml
|
||||
run: |
|
||||
pwd
|
||||
ls .
|
||||
ls ..
|
||||
mv releases.xml ./flatpak/app.zen_browser.zen.metainfo.xml
|
||||
# output the version to the file
|
||||
echo -n ${{ needs.build-data.outputs.version }} > ./flatpak/version
|
||||
|
||||
- name: Commit
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: '[release]: Update Flatpak manifest'
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||
repository: ./flatpak
|
||||
|
||||
- name: Wait 2 minutes for the Flatpak repo to update
|
||||
run: sleep 120
|
||||
|
||||
release-flatpak:
|
||||
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||
permissions: write-all
|
||||
name: Release Flatpak
|
||||
needs: [prepare-flatpak, build-data]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Flatpak repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: flathub/app.zen_browser.zen
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Download Linux x86_64 build
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen.linux-x86_64.tar.xz
|
||||
|
||||
- name: Download Linux aarch64 build
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen.linux-aarch64.tar.xz
|
||||
|
||||
- name: Update repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: zen-browser
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Download Flatpak archive
|
||||
run: |
|
||||
wget https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar -O archive.tar
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
- name: Prepare Flatpak manifest
|
||||
run: |
|
||||
python3 ./zen-browser/scripts/prepare-flatpak-release.py \
|
||||
--flatpak-archive archive.tar \
|
||||
--version ${{ needs.build-data.outputs.version }} \
|
||||
--linux-archive zen.linux-x86_64.tar.xz \
|
||||
--linux-aarch64-archive zen.linux-aarch64.tar.xz \
|
||||
--output app.zen_browser.zen.yml \
|
||||
--template-root ./zen-browser/build/flatpak
|
||||
|
||||
- name: Commit changes
|
||||
run: |
|
||||
git add app.zen_browser.zen.yml
|
||||
git commit -m "Update to version ${{ needs.build-data.outputs.version }}"
|
||||
|
||||
- name: Clean up
|
||||
run: |
|
||||
rm -rf zen-browser
|
||||
rm -rf archive.tar
|
||||
rm -rf zen.linux-x86_64.tar.xz
|
||||
rm -rf zen.linux-aarch64.tar.xz
|
||||
|
||||
- name: Upload Flatpak manifest
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: app.zen_browser.zen.yml
|
||||
path: ./app.zen_browser.zen.yml
|
||||
|
||||
- name: Create pull request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
env:
|
||||
GIT_TRACE: 1
|
||||
GIT_CURL_VERBOSE: 1
|
||||
with:
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
commit-message: 🚀 Update to version ${{ needs.build-data.outputs.version }}
|
||||
title: 🚀 Update to version ${{ needs.build-data.outputs.version }}
|
||||
body: |
|
||||
This PR updates the Zen Browser Flatpak package to version ${{ needs.build-data.outputs.version }}.
|
||||
|
||||
@${{ github.actor }} please review and merge this PR.
|
||||
branch: update-to-${{ needs.build-data.outputs.version }}
|
||||
base: master
|
||||
git-token: ${{ secrets.DEPLOY_KEY }}
|
||||
delete-branch: true
|
21
.github/workflows/check-candidate-release.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
name: Check Firefox Candidate Release
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '59 4 * * 2'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
check_candidates:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Check for any updates
|
||||
env:
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
DISCORD_PING_IDS: ${{ secrets.DISCORD_PING_IDS }}
|
||||
run: |
|
||||
python3 scripts/check_rc_response.py
|
25
.github/workflows/clear-all-cache.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
name: Cleanup cache
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
cleanup:
|
||||
runs-on: ubuntu-latest
|
||||
permissions: write-all
|
||||
steps:
|
||||
- name: Cleanup
|
||||
run: |
|
||||
echo "Fetching list of cache key"
|
||||
cacheKeysForPR=$(gh cache list --limit 1000 --json id --jq '.[].id')
|
||||
|
||||
## Setting this to not fail the workflow while deleting cache keys.
|
||||
set +e
|
||||
echo "Deleting caches..."
|
||||
for cacheKey in $cacheKeysForPR
|
||||
do
|
||||
gh cache delete $cacheKey
|
||||
done
|
||||
echo "Done"
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
GH_REPO: ${{ github.repository }}
|
30
.github/workflows/clear-cache.yml
vendored
@@ -1,30 +0,0 @@
|
||||
name: Clear cache
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
actions: write
|
||||
|
||||
jobs:
|
||||
clear-cache:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clear cache
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
console.log("About to clear")
|
||||
const caches = await github.rest.actions.getActionsCacheList({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
})
|
||||
for (const cache of caches.data.actions_caches) {
|
||||
console.log(cache)
|
||||
github.rest.actions.deleteActionsCacheById({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
cache_id: cache.id,
|
||||
})
|
||||
}
|
||||
console.log("Clear completed")
|
34
.github/workflows/code-linter.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Code Linter
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Setup autopep8
|
||||
run: sudo apt install python3-autopep8
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Lint
|
||||
run: npm run lint
|
@@ -1,7 +1,7 @@
|
||||
name: Issue labeler
|
||||
on:
|
||||
issues:
|
||||
types: [ opened ]
|
||||
types: [opened]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Parse issue form
|
||||
uses: stefanbuck/github-issue-parser@v3
|
||||
@@ -27,9 +27,8 @@ jobs:
|
||||
with:
|
||||
template-path: .github/ISSUE_TEMPLATE/bug_report.yml
|
||||
|
||||
- name: Set labels based on severity field
|
||||
uses: redhat-plumbers-in-action/advanced-issue-labeler@v3
|
||||
- name: Set labels based on animals field
|
||||
uses: redhat-plumbers-in-action/advanced-issue-labeler@v2
|
||||
with:
|
||||
issue-form: ${{ steps.issue-parser.outputs.jsonString }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
section: severity
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
64
.github/workflows/issue-metrics.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
name: Monthly issue metrics
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '3 2 1 * *'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: issue metrics
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Get dates for last month
|
||||
shell: bash
|
||||
run: |
|
||||
# Get the current date
|
||||
current_date=$(date +'%Y-%m-%d')
|
||||
|
||||
# Calculate the previous month
|
||||
previous_date=$(date -d "$current_date -1 month" +'%Y-%m-%d')
|
||||
|
||||
# Extract the year and month from the previous date
|
||||
previous_year=$(date -d "$previous_date" +'%Y')
|
||||
previous_month=$(date -d "$previous_date" +'%m')
|
||||
|
||||
# Calculate the first day of the previous month
|
||||
first_day=$(date -d "$previous_year-$previous_month-01" +'%Y-%m-%d')
|
||||
|
||||
# Calculate the last day of the previous month
|
||||
last_day=$(date -d "$first_day +1 month -1 day" +'%Y-%m-%d')
|
||||
|
||||
echo "$first_day..$last_day"
|
||||
echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV"
|
||||
echo "last_month_year=$previous_year" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Run issue-metrics tool
|
||||
uses: github/issue-metrics@v2
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.DEPLOY_KEY }}
|
||||
HIDE_AUTHOR: true
|
||||
HIDE_TIME_TO_ANSWER: true
|
||||
SEARCH_QUERY: 'repo:zen-browser/desktop is:issue created:${{ env.last_month }}'
|
||||
|
||||
- name: Move metrics to docs folder
|
||||
run: |
|
||||
mkdir -p docs/issue-metrics
|
||||
rm -f docs/issue-metrics/${{ env.last_month_year }}_${{ env.last_month }}.md
|
||||
mv issue_metrics.md docs/issue-metrics/${{ env.last_month_year }}_${{ env.last_month }}.md
|
||||
|
||||
- name: Remove metrisc JSON
|
||||
run: |
|
||||
rm -f issue_metrics.json
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: 'Update monthly issue metrics'
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-auto@users.noreply.github.com
|
148
.github/workflows/linux-alpha-build.yml
vendored
@@ -1,148 +0,0 @@
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
environment: production
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
generic: [true, false]
|
||||
name: Build Linux - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
|
||||
|
||||
steps:
|
||||
- name: Free Disk Space (Ubuntu)
|
||||
uses: jlumbroso/free-disk-space@main
|
||||
with:
|
||||
# this might remove tools that are actually needed,
|
||||
# if set to "true" but frees about 6 GB
|
||||
tool-cache: false
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
sudo apt-get update --fix-missing
|
||||
sudo apt-get update
|
||||
sudo apt-get install dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
|
||||
pip install pycairo testresources
|
||||
|
||||
- name: Configure sccache
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||
|
||||
- name: Install sccache
|
||||
env:
|
||||
LINK: https://github.com/mozilla/sccache/releases/download
|
||||
SCCACHE_VERSION: 0.2.13
|
||||
run: |
|
||||
SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl
|
||||
mkdir -p $HOME/.local/bin
|
||||
curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz
|
||||
mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache
|
||||
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Save sccache
|
||||
uses: actions/cache@v3
|
||||
continue-on-error: false
|
||||
with:
|
||||
path: /home/runner/.cache/sccache
|
||||
key: ${{ runner.os }}-sccache
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Load surfer CI setup
|
||||
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download firefox source and dependencies
|
||||
run: pnpm surfer download
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: pnpm surfer import
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
./mach --no-interactive bootstrap --application-choice browser
|
||||
cd ..
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
continue-on-error: true
|
||||
run: sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Build again if it failed
|
||||
if: failure()
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Package
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: pnpm package
|
||||
|
||||
- name: Rename artifacts
|
||||
run: |
|
||||
mv dist/zen-*.tar.bz2 "zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2"
|
||||
mv dist/output.mar linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||
|
||||
- name: Upload binary
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
||||
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
||||
path: ./zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||
path: ./linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: linux_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }}
|
||||
path: ./dist/update
|
169
.github/workflows/linux-release-build.yml
vendored
Normal file
@@ -0,0 +1,169 @@
|
||||
name: Linux Release Build
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
release-branch:
|
||||
description: 'The branch to build'
|
||||
required: true
|
||||
type: string
|
||||
MOZ_BUILD_DATE:
|
||||
type: string
|
||||
required: true
|
||||
default: ''
|
||||
use-sccache:
|
||||
description: 'Use sccache'
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
permissions:
|
||||
contents: write
|
||||
# aarch64 does not need full 16x
|
||||
runs-on: ${{ (inputs.release-branch == 'release' && matrix.arch == 'x86_64') && 'self-hosted' || 'ubuntu-latest' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
env:
|
||||
SCCACHE_GHA_ENABLED: ${{ inputs.use-sccache && 'true' || 'false' }}
|
||||
CARGO_TERM_COLOR: always
|
||||
RUSTC_WRAPPER: ${{ inputs.use-sccache && 'sccache' || '' }}
|
||||
CARGO_INCREMENTAL: 0
|
||||
name: Build Linux - ${{ matrix.arch }}
|
||||
|
||||
steps:
|
||||
- name: Free Disk Space (Ubuntu)
|
||||
uses: jlumbroso/free-disk-space@main
|
||||
with:
|
||||
tool-cache: false
|
||||
|
||||
# Bug: https://github.com/actions/checkout/issues/1153
|
||||
- name: Remove zombie lock file
|
||||
run: rm -f /home/ubuntu/actions-runner/_work/desktop/desktop/.git/modules/l10n/index.lock
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Run sccache-cache
|
||||
uses: mozilla-actions/sccache-action@main
|
||||
if: ${{ inputs.use-sccache }}
|
||||
with:
|
||||
disable_annotations: true
|
||||
|
||||
- name: Expose actions cache variables
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env['ACTIONS_CACHE_URL'])
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env['ACTIONS_RUNTIME_TOKEN'])
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
set -x
|
||||
sudo apt-get update --fix-missing
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y python3 python3-pip dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
|
||||
- name: Load Surfer CI setup
|
||||
run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download Firefox source and dependencies
|
||||
run: npm run download
|
||||
|
||||
- name: Fix Rust version
|
||||
run: |
|
||||
# Install a rust version compatible with LLVM 18
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain $(cat .rust-toolchain)
|
||||
source $HOME/.cargo/env
|
||||
|
||||
if test "${{ matrix.arch }}" = "aarch64"; then
|
||||
rustup target add aarch64-unknown-linux-gnu
|
||||
else
|
||||
rustup target add x86_64-unknown-linux-gnu
|
||||
fi
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
run: npm run import
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
export SURFER_PLATFORM="linux"
|
||||
./mach --no-interactive bootstrap --application-choice browser
|
||||
cd ..
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
|
||||
continue-on-error: true
|
||||
run: |
|
||||
export SURFER_PLATFORM="linux"
|
||||
if [[ -n ${{ inputs.MOZ_BUILD_DATE }} ]];then
|
||||
export MOZ_BUILD_DATE=${{ inputs.MOZ_BUILD_DATE }}
|
||||
fi
|
||||
bash .github/workflows/src/release-build.sh
|
||||
|
||||
- name: Package
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
ZEN_GA_DISABLE_PGO: true
|
||||
run: |
|
||||
export SURFER_PLATFORM="linux"
|
||||
export ZEN_RELEASE=1
|
||||
npm run package
|
||||
|
||||
- name: Rename artifacts
|
||||
run: |
|
||||
mv dist/zen-*.tar.xz "zen.linux-${{ matrix.arch }}.tar.xz"
|
||||
mv dist/output.mar linux${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.mar
|
||||
|
||||
- name: Upload build artifact (binary)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: zen.linux-${{ matrix.arch }}.tar.xz
|
||||
path: ./zen.linux-${{ matrix.arch }}.tar.xz
|
||||
|
||||
- name: Upload build artifact (.mar)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: linux${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.mar
|
||||
path: ./linux${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.mar
|
||||
|
||||
- name: Upload build artifact (update manifests)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: linux_update_manifest_${{ matrix.arch }}
|
||||
path: ./dist/update
|
150
.github/workflows/macos-alpha-build.yml
vendored
@@ -1,150 +0,0 @@
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
jobs:
|
||||
mac-build:
|
||||
name: Build macOS - ${{ matrix.arch }}
|
||||
environment: production
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- arch: aarch64
|
||||
os: macos-14
|
||||
- arch: x64
|
||||
os: macos-13
|
||||
|
||||
steps:
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew install cairo sccache gnu-tar mercurial
|
||||
sudo pip install setuptools
|
||||
|
||||
# completly uninstall python3 and python3.12
|
||||
brew uninstall --ignore-dependencies python3.12 -f
|
||||
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
python3 -m pip install --user mercurial
|
||||
|
||||
rm '/usr/local/bin/2to3-3.11' # fix Could not symlink bin/2to3-3.11
|
||||
rm '/usr/local/bin/2to3-3.12' # fix Could not symlink bin/2to3-3.12
|
||||
rm /usr/local/bin/2to3 # fix Could not symlink bin/2to3
|
||||
rm '/usr/local/bin/idle3.11' #fix Could not symlink bin/idle3.11
|
||||
rm '/usr/local/bin/idle3.12' # fix Could not symlink bin/idle3.12
|
||||
rm '/usr/local/bin/idle3' # fix Could not symlink bin/idle3
|
||||
rm '/usr/local/bin/pydoc3.11' # fix Could not symlink bin/pydoc3.11
|
||||
rm '/usr/local/bin/pydoc3.12' # fix Could not symlink bin/pydoc3.12
|
||||
rm '/usr/local/bin/pydoc3' # fix Could not symlink bin/pydoc3
|
||||
rm '/usr/local/bin/python3.11' # fix Could not symlink bin/python3.11
|
||||
rm '/usr/local/bin/python3.12' # fix Could not symlink bin/python3.12
|
||||
rm '/usr/local/bin/python3' # fix Could not symlink bin/python3
|
||||
rm '/usr/local/bin/python3.11-config' # fix Could not symlink bin/python3.11-config
|
||||
rm '/usr/local/bin/python3.12-config' # fix Could not symlink bin/python3.12-config
|
||||
rm '/usr/local/bin/python3-config' # fix Could not symlink bin/python3-config
|
||||
|
||||
brew install watchman
|
||||
|
||||
- name: Force usage fo gnu-tar
|
||||
run: |
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
|
||||
source ~/.bash_profile
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
- name: Load surfer CI setup
|
||||
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download firefox source and dependancies
|
||||
run: pnpm surfer download
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
|
||||
cd ..
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||
run: |
|
||||
pnpm surfer import
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- name: build Zen
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||
run: |
|
||||
if test "${{ matrix.arch }}" = "x64"; then
|
||||
export ZEN_DISABLE_LTO=1
|
||||
fi
|
||||
sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Rebuild Zen if failed
|
||||
if: failure()
|
||||
run: sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Package
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
||||
run: pnpm package
|
||||
|
||||
- name: Rename artifacts
|
||||
run: |
|
||||
mv ./dist/*.dmg "zen.macos-${{ matrix.arch }}.dmg"
|
||||
mv ./dist/output.mar macos-${{ matrix.arch }}.mar
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zen.macos-${{ matrix.arch }}.dmg
|
||||
path: ./zen.macos-${{ matrix.arch }}.dmg
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: macos-${{ matrix.arch }}.mar
|
||||
path: ./macos-${{ matrix.arch }}.mar
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: macos_update_manifest_${{ matrix.arch }}
|
||||
path: ./dist/update
|
181
.github/workflows/macos-release-build.yml
vendored
Normal file
@@ -0,0 +1,181 @@
|
||||
name: macOS Release Build
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
release-branch:
|
||||
description: 'The branch to build'
|
||||
required: true
|
||||
type: string
|
||||
MOZ_BUILD_DATE:
|
||||
type: string
|
||||
required: true
|
||||
default: ''
|
||||
use-sccache:
|
||||
description: 'Use sccache'
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
mac-build:
|
||||
name: Build macOS - ${{ matrix.arch }}
|
||||
runs-on: ${{ inputs.release-branch == 'release' && 'macos-14' || 'macos-14' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
env:
|
||||
SCCACHE_GHA_ENABLED: ${{ inputs.use-sccache && 'true' || 'false' }}
|
||||
CARGO_TERM_COLOR: always
|
||||
RUSTC_WRAPPER: ${{ inputs.use-sccache && 'sccache' || '' }}
|
||||
CARGO_INCREMENTAL: 0
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Run sccache-cache
|
||||
uses: mozilla-actions/sccache-action@main
|
||||
if: ${{ inputs.use-sccache }}
|
||||
with:
|
||||
disable_annotations: true
|
||||
|
||||
- name: Expose actions cache variables
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env['ACTIONS_CACHE_URL'])
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env['ACTIONS_RUNTIME_TOKEN'])
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
# note: This will use the version defined in '.python-version' by default
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew update
|
||||
brew install cairo gnu-tar mercurial
|
||||
sudo pip install setuptools
|
||||
|
||||
brew uninstall --ignore-dependencies python3.12 -f
|
||||
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
python3 -m pip install --user mercurial
|
||||
|
||||
rm '/usr/local/bin/2to3-3.11' '/usr/local/bin/2to3-3.12' '/usr/local/bin/2to3'
|
||||
rm '/usr/local/bin/idle3.11' '/usr/local/bin/idle3.12' '/usr/local/bin/idle3'
|
||||
rm '/usr/local/bin/pydoc3.11' '/usr/local/bin/pydoc3.12' '/usr/local/bin/pydoc3'
|
||||
rm '/usr/local/bin/python3.11' '/usr/local/bin/python3.12' '/usr/local/bin/python3'
|
||||
rm '/usr/local/bin/python3.11-config' '/usr/local/bin/python3.12-config' '/usr/local/bin/python3-config'
|
||||
|
||||
brew install watchman
|
||||
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain $(cat .rust-toolchain)
|
||||
source $HOME/.cargo/env
|
||||
|
||||
if test "${{ matrix.arch }}" = "aarch64"; then
|
||||
rustup target add aarch64-apple-darwin
|
||||
else
|
||||
rustup target add x86_64-apple-darwin
|
||||
fi
|
||||
|
||||
- name: Force usage of gnu-tar
|
||||
run: |
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
|
||||
source ~/.bash_profile
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
|
||||
- name: Load surfer CI setup
|
||||
run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download Firefox source and dependencies
|
||||
run: npm run download
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
export SURFER_PLATFORM="darwin"
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
|
||||
cd ..
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
run: npm run import -- --verbose
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- name: Build Zen
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
|
||||
run: |
|
||||
export SURFER_PLATFORM="darwin"
|
||||
if [[ -n ${{ inputs.MOZ_BUILD_DATE }} ]];then
|
||||
export MOZ_BUILD_DATE=${{ inputs.MOZ_BUILD_DATE }}
|
||||
fi
|
||||
bash .github/workflows/src/release-build.sh
|
||||
|
||||
- name: Package
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
ZEN_GA_DISABLE_PGO: true
|
||||
run: |
|
||||
export SURFER_PLATFORM="darwin"
|
||||
export ZEN_RELEASE=1
|
||||
npm run package
|
||||
|
||||
- name: Rename artifacts
|
||||
run: |
|
||||
echo "Tarballing DMG"
|
||||
set -ex
|
||||
mv ./dist/*.dmg ./zen-${{ matrix.arch }}-apple-darwin-dist.dmg
|
||||
mv ./engine/obj-${{ matrix.arch }}-apple-darwin/dist/host/bin/mar ./zen-macos-host-mar
|
||||
mv ./engine/obj-${{ matrix.arch }}-apple-darwin/dist/bin/platform.ini ./platform.ini
|
||||
|
||||
- name: Upload dist dmg
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 1
|
||||
name: zen-${{ matrix.arch }}-apple-darwin-dist.dmg
|
||||
path: ./zen-${{ matrix.arch }}-apple-darwin-dist.dmg
|
||||
|
||||
- name: Upload host mar
|
||||
uses: actions/upload-artifact@v4
|
||||
if: matrix.arch == 'aarch64'
|
||||
with:
|
||||
retention-days: 1
|
||||
name: zen-macos-host-mar
|
||||
path: ./zen-macos-host-mar
|
||||
|
||||
- name: Upload platform.ini
|
||||
uses: actions/upload-artifact@v4
|
||||
if: matrix.arch == 'x86_64'
|
||||
with:
|
||||
retention-days: 1
|
||||
name: platform.ini
|
||||
path: ./platform.ini
|
261
.github/workflows/macos-universal-release-build.yml
vendored
Normal file
@@ -0,0 +1,261 @@
|
||||
name: macOS Release Build
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
release-branch:
|
||||
description: 'The branch to build'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
mac-build:
|
||||
name: Unify macOS (Universal)
|
||||
runs-on: 'macos-14'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
# note: This will use the version defined in '.python-version' by default
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
brew update
|
||||
brew install cairo gnu-tar mercurial
|
||||
sudo pip install setuptools
|
||||
|
||||
brew uninstall --ignore-dependencies python3.12 -f
|
||||
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
python3 -m pip install --user mercurial
|
||||
|
||||
rm '/usr/local/bin/2to3-3.11' '/usr/local/bin/2to3-3.12' '/usr/local/bin/2to3'
|
||||
rm '/usr/local/bin/idle3.11' '/usr/local/bin/idle3.12' '/usr/local/bin/idle3'
|
||||
rm '/usr/local/bin/pydoc3.11' '/usr/local/bin/pydoc3.12' '/usr/local/bin/pydoc3'
|
||||
rm '/usr/local/bin/python3.11' '/usr/local/bin/python3.12' '/usr/local/bin/python3'
|
||||
rm '/usr/local/bin/python3.11-config' '/usr/local/bin/python3.12-config' '/usr/local/bin/python3-config'
|
||||
|
||||
brew install watchman
|
||||
|
||||
cargo install apple-codesign
|
||||
|
||||
- name: Force usage of gnu-tar
|
||||
run: |
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
|
||||
source ~/.bash_profile
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
|
||||
- name: Load surfer CI setup
|
||||
run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download Firefox source and dependencies
|
||||
run: npm run download
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
export SURFER_PLATFORM="darwin"
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
|
||||
cd ..
|
||||
|
||||
- name: Import
|
||||
run: npm run import
|
||||
|
||||
- name: Populate mozconfig
|
||||
env:
|
||||
SURFER_MOZCONFIG_ONLY: true
|
||||
run: |
|
||||
npm run build
|
||||
cd engine
|
||||
./mach configure
|
||||
|
||||
- name: Download x86_64 DMG from artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen-x86_64-apple-darwin-dist.dmg
|
||||
|
||||
- name: Download aarch64 DMG from artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen-aarch64-apple-darwin-dist.dmg
|
||||
|
||||
- name: Remove any existing .app folders
|
||||
run: |
|
||||
set -x
|
||||
cd engine
|
||||
rm -rf "./obj-x86_64-apple-darwin/" || true
|
||||
rm -rf "./obj-aarch64-apple-darwin/" || true
|
||||
|
||||
- name: Extract .app from dmg
|
||||
run: |
|
||||
set -ex
|
||||
cd engine
|
||||
echo "Extracting x86_64 .app from dmg"
|
||||
mkdir -p ./obj-x86_64-apple-darwin/dist
|
||||
mkdir -p ./obj-aarch64-apple-darwin/dist
|
||||
./mach python -m mozbuild.action.unpack_dmg \
|
||||
../zen-x86_64-apple-darwin-dist.dmg \
|
||||
./obj-x86_64-apple-darwin/dist
|
||||
echo "Extracting aarch64 .app from dmg"
|
||||
./mach python -m mozbuild.action.unpack_dmg \
|
||||
../zen-aarch64-apple-darwin-dist.dmg \
|
||||
./obj-aarch64-apple-darwin/dist
|
||||
|
||||
- name: Find first .app folder name
|
||||
run: |
|
||||
cd engine/obj-x86_64-apple-darwin/dist
|
||||
export APP_NAME=${{ inputs.release-branch == 'twilight' && 'Twilight' || 'Zen' }}
|
||||
echo "APP_NAME=$APP_NAME" >> $GITHUB_ENV
|
||||
echo "APP_NAME=$APP_NAME"
|
||||
|
||||
- name: List .app folders
|
||||
run: |
|
||||
ls engine/
|
||||
echo "--------------------"
|
||||
cd engine/obj-x86_64-apple-darwin/dist
|
||||
find . -maxdepth 1 -name "*.app" -type d
|
||||
cd ../..
|
||||
|
||||
- name: create .p12 for codesign 🖊️
|
||||
run: |
|
||||
cd engine
|
||||
echo "${{ secrets.macOS_CERTIFICATES_P12_For_App_BASE64 }}" > cert.txt
|
||||
base64 --decode -i cert.txt -o zenCert.p12
|
||||
echo "${{ secrets.macOS_CERTIFICATES_P12_PASSWORD }}" > zenpCertPassword.passwd
|
||||
|
||||
- name: Remove certificate sensitive information
|
||||
run: |
|
||||
rm engine/cert.txt || true
|
||||
|
||||
- name: Import provisioning profile for .app
|
||||
run: |
|
||||
echo "${{ secrets.macOS_PROVISIONING_PROFILE }}" | base64 --decode > ./engine/Zen_Browser.provisionprofile
|
||||
ls -la
|
||||
|
||||
- name: Unify architectures
|
||||
run: |
|
||||
cd engine
|
||||
./mach python "./toolkit/mozapps/installer/unify.py" "./obj-x86_64-apple-darwin/dist/${{ env.APP_NAME }}.app" "./obj-aarch64-apple-darwin/dist/${{ env.APP_NAME }}.app"
|
||||
echo "Merged aaarch64 into x86_64!"
|
||||
|
||||
- name: Import APPLE DEVELOPER ID CERTIFICATE for .app
|
||||
uses: Apple-Actions/import-codesign-certs@v3
|
||||
with:
|
||||
p12-file-base64: ${{ secrets.macOS_CERTIFICATES_P12_For_App_BASE64 }}
|
||||
p12-password: ${{ secrets.macOS_CERTIFICATES_P12_PASSWORD }}
|
||||
|
||||
- name: Copy provisioning profile for .app (embedded in .app)
|
||||
run: |
|
||||
cd engine
|
||||
echo "Copying provisioning profile for .app on both architectures (${{ env.APP_NAME }})"
|
||||
cp ./Zen_Browser.provisionprofile "./embedded.provisionprofile"
|
||||
|
||||
- name: Sign .app
|
||||
run: |
|
||||
cd engine
|
||||
# TODO: Change it to "production" once we figure out the issue with the webauth
|
||||
./mach macos-sign -v -r -c "release" -e "production" -a "./obj-x86_64-apple-darwin/dist/${{ env.APP_NAME }}.app" --rcodesign-p12-file zenCert.p12 --rcodesign-p12-password-file zenpCertPassword.passwd
|
||||
|
||||
- name: Create DMG
|
||||
run: |
|
||||
cd engine
|
||||
./mach python -m mozbuild.action.make_dmg \
|
||||
--volume-name "${{ env.APP_NAME }}" \
|
||||
--background ./browser/branding/${{ inputs.release-branch }}/background.png \
|
||||
--icon ./browser/branding/${{ inputs.release-branch }}/firefox.icns \
|
||||
--dsstore ./browser/branding/${{ inputs.release-branch }}/dsstore \
|
||||
./obj-x86_64-apple-darwin/dist/ ../zen-macOS-universal-temp.dmg
|
||||
|
||||
- name: Remove sensitive information
|
||||
run: |
|
||||
rm -f ./engine/Zen_Browser.provisionprofile
|
||||
|
||||
- name: Sign .dmg
|
||||
run: |
|
||||
set -ex
|
||||
hdiutil convert zen-macOS-universal-temp.dmg -format UDZO -imagekey zlib-level=9 -o zen.macos-universal.dmg
|
||||
codesign -s "${{ secrets.macOS_AppleDeveloperId }}" zen.macos-universal.dmg
|
||||
xcrun notarytool submit "zen.macos-universal.dmg" \
|
||||
--apple-id "${{ secrets.macOS_AppleAccountId }}" \
|
||||
--team-id "${{ secrets.macOS_AppleDeveloperIdTeamId }}" \
|
||||
--password "${{ secrets.macOS_AppleDeveloperIdPassword }}" \
|
||||
--no-s3-acceleration \
|
||||
--wait
|
||||
xcrun stapler staple "zen.macos-universal.dmg"
|
||||
|
||||
- name: Download host mar
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: zen-macos-host-mar
|
||||
|
||||
- name: Upload build artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: zen.macos-universal.dmg
|
||||
path: ./zen.macos-universal.dmg
|
||||
|
||||
- name: Download platform.ini
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: platform.ini
|
||||
|
||||
- name: Package for mar
|
||||
env:
|
||||
JUST_MAR: true
|
||||
run: |
|
||||
# we don't need it anymore
|
||||
set -ex
|
||||
rm -rf ./engine/obj-aarch64-apple-darwin
|
||||
mkdir -p ./engine/obj-x86_64-apple-darwin/dist/bin
|
||||
mv ./platform.ini ./engine/obj-x86_64-apple-darwin/dist/bin/platform.ini
|
||||
export SURFER_PLATFORM="darwin"
|
||||
export ZEN_RELEASE=1
|
||||
# full path to zen-macos-host-mar
|
||||
export MAR=$(pwd)/zen-macos-host-mar
|
||||
chmod +x $MAR
|
||||
echo "MAR=$MAR"
|
||||
npm run package -- --verbose
|
||||
mv ./dist/output.mar ./macos.mar
|
||||
|
||||
- name: Upload build artifact (.mar)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: macos.mar
|
||||
path: ./macos.mar
|
||||
|
||||
- name: Upload build artifact (update manifests)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: macos_update_manifest
|
||||
path: ./dist/update
|
32
.github/workflows/pr-test.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: Pull request test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
pr-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Install Surfer
|
||||
run: npm i -g @zen-browser/surfer
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Download Firefox and dependencies
|
||||
run: surfer download
|
||||
|
||||
- name: Import patches
|
||||
run: surfer i
|
113
.github/workflows/src/generate_release_notes.sh
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env bash
|
||||
RELEASE_NOTES_URL="https://raw.githubusercontent.com/zen-browser/www/refs/heads/main/src/release-notes/stable.json"
|
||||
|
||||
if [ "$RELEASE_BRANCH" = "release" ]; then
|
||||
RELEASE_TYPE="Stable"
|
||||
|
||||
echo "Fetching release notes from GitHub..."
|
||||
RELEASE_NOTES_JSON=$(curl -s "$RELEASE_NOTES_URL")
|
||||
|
||||
if [ -z "$RELEASE_NOTES_JSON" ]; then
|
||||
echo "Error: Failed to fetch release notes from GitHub"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
LATEST_RELEASE=$(echo "$RELEASE_NOTES_JSON" | jq -r 'last')
|
||||
EXTRA_NOTES=$(echo "$LATEST_RELEASE" | jq -r '.extra // ""')
|
||||
else
|
||||
RELEASE_TYPE="Twilight"
|
||||
fi
|
||||
|
||||
cat << EOF > "release_notes.md"
|
||||
# Zen ${RELEASE_TYPE} Release
|
||||
EOF
|
||||
|
||||
if [ "$RELEASE_BRANCH" = "release" ]; then
|
||||
echo "${EXTRA_NOTES}" >> "release_notes.md"
|
||||
|
||||
if echo "$LATEST_RELEASE" | jq -e 'has("features")' > /dev/null; then
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
## New Features
|
||||
$(echo "$LATEST_RELEASE" | jq -r '.features[] | "- " + .')
|
||||
EOF
|
||||
fi
|
||||
|
||||
if echo "$LATEST_RELEASE" | jq -e 'has("fixes")' > /dev/null; then
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
## Fixes
|
||||
EOF
|
||||
echo "$LATEST_RELEASE" | jq -r '.fixes[] | if type=="object" then "- " + .description + " ([#" + (.issue|tostring) + "](" + "https://github.com/zen-browser/desktop/issues/" + (.issue|tostring) + "))" else "- " + . end' >> "release_notes.md"
|
||||
fi
|
||||
|
||||
if echo "$LATEST_RELEASE" | jq -e 'has("breakingChanges")' > /dev/null; then
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
## Breaking Changes
|
||||
EOF
|
||||
echo "$LATEST_RELEASE" | jq -r '.breakingChanges[] | if type=="string" then "- " + . else "- " + .description + " [Learn more](" + .link + ")" end' >> "release_notes.md"
|
||||
fi
|
||||
|
||||
if echo "$LATEST_RELEASE" | jq -e 'has("themeChanges")' > /dev/null; then
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
## Theme Changes
|
||||
$(echo "$LATEST_RELEASE" | jq -r '.themeChanges[] | "- " + .')
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
<details>
|
||||
<summary>File Checksums (SHA-256)</summary>
|
||||
|
||||
\`\`\`
|
||||
EOF
|
||||
|
||||
generate_checksum() {
|
||||
local pattern=$1
|
||||
echo "Generating checksum for $pattern"
|
||||
sha256sum $pattern 2> /dev/null | awk '{sub(".*/", "", $2); print $1 " " $2}' >> "release_notes.md"
|
||||
if [ ${PIPESTATUS[0]} -ne 0 ]; then
|
||||
echo "Warning: No files found matching $pattern, skipping checksum."
|
||||
fi
|
||||
}
|
||||
|
||||
files=(
|
||||
"./zen.source.tar.zst/*"
|
||||
"./zen.linux-x86_64.tar.xz/*"
|
||||
"./zen.linux-aarch64.tar.xz/*"
|
||||
"./zen-x86_64.AppImage/*"
|
||||
"./zen-x86_64.AppImage.zsync/*"
|
||||
"./zen-aarch64.AppImage/*"
|
||||
"./zen-aarch64.AppImage.zsync/*"
|
||||
"./.github/workflows/object/windows-x64-signed-x86_64/zen.win-x86_64.zip"
|
||||
"./zen.win-x86_64.zip/*"
|
||||
"./.github/workflows/object/windows-x64-signed-arm64/zen.win-arm64.zip"
|
||||
"./zen.win-arm64.zip/*"
|
||||
"./linux.mar/*"
|
||||
"./linux-aarch64.mar/*"
|
||||
"./.github/workflows/object/windows-x64-signed-x86_64/windows.mar"
|
||||
"./windows.mar/*"
|
||||
"./.github/workflows/object/windows-x64-signed-arm64/windows-arm64.mar"
|
||||
"./windows-arm64.mar/*"
|
||||
"./macos.mar/*"
|
||||
"./.github/workflows/object/windows-x64-signed-x86_64/zen.installer.exe"
|
||||
"./zen.installer.exe/*"
|
||||
"./.github/workflows/object/windows-x64-signed-arm64/zen.installer-arm64.exe"
|
||||
"./zen.installer-arm64.exe/*"
|
||||
"./zen.macos-universal.dmg/*"
|
||||
)
|
||||
|
||||
for file in "${files[@]}"; do
|
||||
generate_checksum "$file"
|
||||
done
|
||||
|
||||
cat << EOF >> "release_notes.md"
|
||||
\`\`\`
|
||||
</details>
|
||||
EOF
|
||||
|
||||
echo "Release notes generated: release_notes.md"
|
@@ -1,26 +1,28 @@
|
||||
set -ex
|
||||
#!/bin/bash
|
||||
|
||||
if command -v apt-get &> /dev/null
|
||||
then
|
||||
set -xe
|
||||
|
||||
if command -v apt-get &> /dev/null; then
|
||||
sudo add-apt-repository ppa:kisak/kisak-mesa
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y xvfb
|
||||
sudo apt-get install -y xvfb libnvidia-egl-wayland1 mesa-utils libgl1-mesa-dri
|
||||
fi
|
||||
|
||||
ulimit -n 4096
|
||||
|
||||
# Check if xfvb is installed
|
||||
if ! command -v Xvfb &> /dev/null; then
|
||||
if command -v Xvfb &> /dev/null; then
|
||||
if ! test "$ZEN_CROSS_COMPILING"; then
|
||||
Xvfb :2 -screen 0 1024x768x24 &
|
||||
Xvfb :2 -nolisten tcp -noreset -screen 0 1024x768x24 &
|
||||
export LLVM_PROFDATA=$HOME/.mozbuild/clang/bin/llvm-profdata
|
||||
export DISPLAY=:2
|
||||
fi
|
||||
export ZEN_RELEASE=1
|
||||
pnpm build
|
||||
npm run build
|
||||
else
|
||||
echo "Xvfb could not be found, running without it"
|
||||
echo "ASSUMING YOU ARE RUNNING THIS ON MACOS"
|
||||
|
||||
set -v
|
||||
export ZEN_RELEASE=1
|
||||
pnpm build
|
||||
npm run build
|
||||
fi
|
42
.github/workflows/twilight-release-schedule.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
name: Zen Twilight Scheduled Releases
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 23 * * *'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
create_release:
|
||||
description: 'Whether to do a release'
|
||||
required: false
|
||||
type: boolean
|
||||
default: true
|
||||
use-sccache:
|
||||
description: 'Use sccache'
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
twilight-release-schedule:
|
||||
name: Twilight Release Schedule
|
||||
permissions: write-all
|
||||
secrets: inherit
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
create_release: ${{ github.event_name != 'workflow_dispatch' && true || inputs.create_release }}
|
||||
update_branch: twilight
|
||||
use-sccache: ${{ github.event_name != 'workflow_dispatch' && false || inputs.use-sccache }}
|
||||
update_version: false
|
||||
|
||||
post-build:
|
||||
name: Post Build
|
||||
runs-on: ubuntu-latest
|
||||
needs: twilight-release-schedule
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
224
.github/workflows/windows-alpha-build.yml
vendored
@@ -1,224 +0,0 @@
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
generate-gpo:
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
profile-data-path-archive:
|
||||
description: 'The path to the zip archive containing the profile data'
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
windows-build:
|
||||
name: Build Windows - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
generic: [true, false]
|
||||
environment: production
|
||||
steps:
|
||||
- name: Free Disk Space (Ubuntu)
|
||||
uses: jlumbroso/free-disk-space@main
|
||||
with:
|
||||
# this might remove tools that are actually needed,
|
||||
# if set to "true" but frees about 6 GB
|
||||
tool-cache: false
|
||||
|
||||
- name: Install Node.js and pnpm
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Setup git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pnpm i
|
||||
|
||||
- name: Load surfer CI setup
|
||||
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download
|
||||
run: pnpm surfer download
|
||||
|
||||
- name: "win-cross Cache"
|
||||
env:
|
||||
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
||||
id: cache-win-cross
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${HOME}/win-cross
|
||||
key: win-cross
|
||||
|
||||
- name: Configure sccache
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||
|
||||
- name: Setup For Windows
|
||||
if: steps.cache-win-cross.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
set -x
|
||||
mkdir -p ~/win-cross
|
||||
cd engine/
|
||||
|
||||
echo Setup wine
|
||||
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
|
||||
tar --zstd -xvf wine.tar.zst -C ~/win-cross
|
||||
rm wine.tar.zst
|
||||
|
||||
echo Setup Visual Studio
|
||||
sudo apt install -y msitools python3-pip
|
||||
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
set -x
|
||||
cd engine/
|
||||
|
||||
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
|
||||
|
||||
cd ..
|
||||
npm install -g pnpm
|
||||
export SURFER_PLATFORM="win32"
|
||||
pnpm surfer bootstrap
|
||||
|
||||
cd engine/
|
||||
ls ~/.mozbuild/clang/lib/clang/
|
||||
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
|
||||
cat ../configs/common/mozconfig
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install dos2unix
|
||||
|
||||
ls ~/win-cross/wine || true
|
||||
ls ~/win-cross/vs2022 || true
|
||||
|
||||
- name: setup Rust
|
||||
run: |
|
||||
cd engine/
|
||||
# Install a rust version compatible with 17
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.76
|
||||
source $HOME/.cargo/env
|
||||
|
||||
rustup target add x86_64-pc-windows-msvc
|
||||
cargo install cargo-download
|
||||
cargo download -x windows=0.52.0
|
||||
#? https://github.com/mozilla/sccache#known-caveats
|
||||
export CARGO_INCREMENTAL=0
|
||||
|
||||
echo "" >> ../configs/common/mozconfig
|
||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
name: Download artifact if use profdata
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
path: ~/artifact
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: pnpm surfer import --verbose
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: |
|
||||
set -x
|
||||
dos2unix configs/windows/mozconfig
|
||||
export SURFER_PLATFORM="win32"
|
||||
export ZEN_CROSS_COMPILING=1
|
||||
if test ${{ inputs.generate-gpo }} = true; then
|
||||
export ZEN_GA_GENERATE_PROFILE=1
|
||||
fi
|
||||
sh .github/workflows/src/alpha-build.sh
|
||||
|
||||
- name: Package
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
||||
run: |
|
||||
set -x
|
||||
export SURFER_PLATFORM="win32"
|
||||
pnpm package
|
||||
mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64.zip zen.win64.zip
|
||||
ls ./dist
|
||||
ls .
|
||||
|
||||
- name: Move package for PGO upload
|
||||
if: ${{ inputs.generate-gpo }}
|
||||
run: |
|
||||
set -x
|
||||
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
|
||||
|
||||
- name: Rename artifacts
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
run: |
|
||||
mv ./zen.win64.zip zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
||||
mv ./dist/output.mar windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||
mv ./dist/zen.installer.exe ./zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
||||
path: ./zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
||||
|
||||
- name: Upload PGO build
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ inputs.generate-gpo }}
|
||||
with:
|
||||
name: ${{ matrix.generic == true && 'generic' || 'specific' }}-${{ inputs.profile-data-path-archive }}
|
||||
path: ./zen.win64-pgo-stage-1.zip
|
||||
|
||||
- name: Upload mar
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||
path: ./windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
||||
|
||||
- name: Upload installer
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
||||
path: ./zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
||||
|
||||
- name: Upload installer stub
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo && false }}
|
||||
with:
|
||||
name: zen.installer.pretty.exe
|
||||
path: ./dist/zen.installer.pretty.exe
|
||||
|
||||
- name: Upload update manifests
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
with:
|
||||
name: windows_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }}
|
||||
path: ./dist/update
|
96
.github/workflows/windows-profile-build.yml
vendored
@@ -1,3 +1,4 @@
|
||||
name: Windows PGO Builds
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -10,79 +11,102 @@ on:
|
||||
description: 'The path to the zip archive containing the profile data'
|
||||
required: false
|
||||
type: string
|
||||
release-branch:
|
||||
description: 'The branch to build'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
windows-profile-build:
|
||||
name: Windows Profile Build - ${{ matrix.generic == true && 'generic' || 'specific' }}
|
||||
name: |
|
||||
Windows Profile Build - ${{ matrix.arch }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
generic: [true, false]
|
||||
runs-on: windows-latest
|
||||
# Script edited from https://github.com/Floorp-Projects/Floorp/blob/ESR115/.github/workflows/window-generate-profile-data-and-jarlog.yml
|
||||
arch: [x86_64, aarch64]
|
||||
|
||||
runs-on: ${{ inputs.release-branch == 'release' && 'windows-latest' || 'windows-latest' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js and pnpm
|
||||
uses: actions/setup-node@v3
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Setup git
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- name: Install Surfer
|
||||
run: |
|
||||
npm i -g @zen-browser/surfer
|
||||
- uses: actions/download-artifact@v4
|
||||
name: Download artifact
|
||||
run: npm i -g @zen-browser/surfer
|
||||
|
||||
- name: Load Surfer CI setup
|
||||
run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download artifact
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: C:\artifact
|
||||
name: ${{ matrix.generic == true && 'generic' || 'specific' }}-zen-windows-x86_64-profile-data-and-jarlog.zip
|
||||
name: ${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}-zen-windows-profile-data-and-jarlog.zip
|
||||
|
||||
- name: Unpack artifact
|
||||
- name: Unpack artifact
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
run: |
|
||||
cd C:\artifact
|
||||
ls
|
||||
Expand-Archive -Path .\${{ inputs.profile-data-path-archive }} -DestinationPath C:\artifact
|
||||
ls
|
||||
- name: Setup
|
||||
|
||||
- name: Setup
|
||||
run: |
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe","C:\MozillaBuildSetup-Latest.exe")
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe", "C:\MozillaBuildSetup-Latest.exe")
|
||||
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
||||
- name: Download firefox
|
||||
|
||||
- name: Download Firefox and dependencies
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
run: |
|
||||
git config --global core.safecrlf false
|
||||
pnpm surfer download
|
||||
- name: Generate
|
||||
git config --global core.safecrlf false
|
||||
npm run download
|
||||
|
||||
- name: Import patches
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
env:
|
||||
SURFER_NO_BRANDING_PATCH: true
|
||||
run: npm run import
|
||||
|
||||
- name: Generate
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
run: |
|
||||
ls
|
||||
$Env:USE_MINTTY = "0"
|
||||
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\","/"
|
||||
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\", "/"
|
||||
$workspace_dir = $workspace_dir_current + "/engine"
|
||||
echo $workspace_dir
|
||||
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
||||
echo 'export PATH=/c/mozilla-build/msys2/usr/bin:$PATH' '' >> mozilla-build-run.sh
|
||||
echo './mach --no-interactive bootstrap --application-choice browser' '' >> mozilla-build-run.sh
|
||||
echo 'ls /c/Users/runneradmin/.mozbuild/clang/bin' '' >> mozilla-build-run.sh
|
||||
echo 'LLVM_PROFDATA=/c/Users/runneradmin/.mozbuild/clang/bin/llvm-profdata.exe JARLOG_FILE=en-US.log ./mach python build/pgo/profileserver.py --binary /c/artifact/zen/zen.exe' '' >> mozilla-build-run.sh
|
||||
C:\mozilla-build\start-shell.bat $workspace_dir_current\mozilla-build-run.sh
|
||||
- name: 🐛 Debug Session
|
||||
if: ${{ failure() }}
|
||||
uses: Warpbuilds/gha-debug@v1.3
|
||||
timeout-minutes: 15
|
||||
|
||||
- name: Publish merged.profdata
|
||||
- name: Move profile data
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
run: |
|
||||
dir
|
||||
dir engine
|
||||
mv engine/merged.profdata merged.profdata
|
||||
mv engine/en-US.log en-US.log
|
||||
|
||||
- name: Upload artifacts
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: merged-${{ matrix.generic == true && 'generic' || 'specific' }}.profdata
|
||||
|
||||
- name: Publish en-US.log
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: en-US-${{ matrix.generic == true && 'generic' || 'specific' }}.log
|
||||
retention-days: 1
|
||||
path: |
|
||||
merged.profdata
|
||||
en-US.log
|
||||
name: windows-profdata-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||
|
333
.github/workflows/windows-release-build.yml
vendored
Normal file
@@ -0,0 +1,333 @@
|
||||
name: Windows Release Build
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
generate-gpo:
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
build-version:
|
||||
description: 'The version to build'
|
||||
required: true
|
||||
type: string
|
||||
profile-data-path-archive:
|
||||
description: 'The path to the zip archive containing the profile data'
|
||||
type: string
|
||||
release-branch:
|
||||
description: 'The branch to build'
|
||||
required: true
|
||||
type: string
|
||||
MOZ_BUILD_DATE:
|
||||
type: string
|
||||
required: true
|
||||
default: ''
|
||||
use-sccache:
|
||||
description: 'Use sccache'
|
||||
required: true
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
windows-build:
|
||||
name: Build Windows - ${{ matrix.arch }}
|
||||
# aarch64 does not need full 16x, and we also dont use full LTO when generating GPO
|
||||
runs-on: ${{ (inputs.release-branch == 'release' && !inputs.generate-gpo && matrix.arch == 'x86_64') && 'self-hosted' || 'ubuntu-latest' }}
|
||||
env:
|
||||
SCCACHE_GHA_ENABLED: ${{ inputs.use-sccache && 'true' || 'false' }}
|
||||
CARGO_TERM_COLOR: always
|
||||
RUSTC_WRAPPER: ${{ inputs.use-sccache && 'sccache' || '' }}
|
||||
CARGO_INCREMENTAL: 0
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
|
||||
steps:
|
||||
- name: Free Disk Space (Ubuntu)
|
||||
uses: jlumbroso/free-disk-space@main
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
with:
|
||||
tool-cache: false
|
||||
|
||||
# Bug: https://github.com/actions/checkout/issues/1153
|
||||
- name: Remove zombie lock file
|
||||
run: rm -f /home/ubuntu/actions-runner/_work/desktop/desktop/.git/modules/l10n/index.lock
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.DEPLOY_KEY }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
|
||||
- name: Run sccache-cache
|
||||
uses: mozilla-actions/sccache-action@main
|
||||
if: ${{ inputs.use-sccache }}
|
||||
with:
|
||||
disable_annotations: true
|
||||
|
||||
- name: Expose actions cache variables
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env['ACTIONS_CACHE_URL'])
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env['ACTIONS_RUNTIME_TOKEN'])
|
||||
|
||||
- name: Setup Git
|
||||
run: |
|
||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||
git config --global user.name "mauro-balades"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm install
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y python3 python3-pip dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm --fix-missing
|
||||
|
||||
- name: Load Surfer CI setup
|
||||
run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
||||
|
||||
- name: Download Firefox and dependencies
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
run: npm run download
|
||||
|
||||
- name: win-cross Cache
|
||||
env:
|
||||
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
||||
id: cache-win-cross
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${HOME}/win-cross
|
||||
key: win-cross
|
||||
|
||||
- name: Setup for Windows
|
||||
if: steps.cache-win-cross.outputs.cache-hit != 'true' && !(inputs.generate-gpo && matrix.arch == 'aarch64')
|
||||
run: |
|
||||
set -x
|
||||
mkdir -p ~/win-cross
|
||||
cd engine/
|
||||
sudo apt-get install python3-launchpadlib
|
||||
sudo add-apt-repository ppa:savoury1/backports
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y python3-pip autoconf \
|
||||
autoconf2.13 \
|
||||
automake \
|
||||
bison \
|
||||
build-essential \
|
||||
cabextract \
|
||||
curl \
|
||||
cmake \
|
||||
flex \
|
||||
gawk \
|
||||
gcc-multilib \
|
||||
git \
|
||||
gnupg \
|
||||
jq \
|
||||
libbz2-dev \
|
||||
libexpat1-dev \
|
||||
libffi-dev \
|
||||
libncursesw5-dev \
|
||||
libsqlite3-dev \
|
||||
libssl-dev \
|
||||
libtool \
|
||||
libucl-dev \
|
||||
libxml2-dev \
|
||||
msitools \
|
||||
ninja-build \
|
||||
openssh-client \
|
||||
p7zip-full \
|
||||
pkg-config \
|
||||
procps \
|
||||
python3-requests \
|
||||
python3-toml \
|
||||
scons \
|
||||
subversion \
|
||||
tar \
|
||||
unzip \
|
||||
uuid \
|
||||
uuid-dev \
|
||||
wget \
|
||||
zip \
|
||||
zlib1g-dev \
|
||||
aria2
|
||||
echo Setup wine
|
||||
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
|
||||
tar --zstd -xf wine.tar.zst -C ~/win-cross
|
||||
rm wine.tar.zst
|
||||
echo Setup Visual Studio
|
||||
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
|
||||
|
||||
- name: Bootstrap
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
run: |
|
||||
set -x
|
||||
cd engine/
|
||||
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
|
||||
cd ..
|
||||
export SURFER_PLATFORM="win32"
|
||||
npm run bootstrap
|
||||
cd engine/
|
||||
ls ~/.mozbuild/clang/lib/clang/
|
||||
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
|
||||
cat ../configs/common/mozconfig
|
||||
sudo apt-get update
|
||||
sudo apt-get install dos2unix
|
||||
ls ~/win-cross/wine || true
|
||||
ls ~/win-cross/vs2022 || true
|
||||
|
||||
- name: Setup Rust
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
run: |
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain $(cat .rust-toolchain)
|
||||
source $HOME/.cargo/env
|
||||
if test "${{ matrix.arch }}" = "aarch64"; then
|
||||
rustup target add aarch64-pc-windows-msvc
|
||||
else
|
||||
rustup target add x86_64-pc-windows-msvc
|
||||
fi
|
||||
cd engine/
|
||||
cargo install cargo-download --locked
|
||||
cargo download -x windows=0.58.0
|
||||
export CARGO_INCREMENTAL=0
|
||||
echo "" >> ../configs/common/mozconfig
|
||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.58.0" >> ../configs/common/mozconfig
|
||||
|
||||
- name: Import
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
run: npm run import -- --verbose
|
||||
|
||||
- name: Build language packs
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
- name: Download artifact (if use profdata)
|
||||
uses: actions/download-artifact@v4
|
||||
if: ${{ !inputs.generate-gpo && matrix.arch == 'x86_64' }}
|
||||
with:
|
||||
path: ~/artifact
|
||||
name: windows-profdata-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||
|
||||
- name: Show artifact info
|
||||
if: ${{ !inputs.generate-gpo && matrix.arch == 'x86_64' }}
|
||||
run: |
|
||||
ls ~/artifact
|
||||
ls ~/artifact/en-US.log
|
||||
ls ~/artifact/merged.profdata
|
||||
chmod +x ~/artifact/en-US.log
|
||||
chmod +x ~/artifact/merged.profdata
|
||||
|
||||
- name: Build
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
|
||||
run: |
|
||||
set -x
|
||||
dos2unix configs/windows/mozconfig
|
||||
export SURFER_PLATFORM="win32"
|
||||
export ZEN_CROSS_COMPILING=1
|
||||
if test ${{ inputs.generate-gpo }} = true; then
|
||||
export ZEN_GA_GENERATE_PROFILE=1
|
||||
fi
|
||||
if [[ -n ${{ inputs.MOZ_BUILD_DATE }} ]];then
|
||||
export MOZ_BUILD_DATE=${{ inputs.MOZ_BUILD_DATE }}
|
||||
fi
|
||||
bash .github/workflows/src/release-build.sh
|
||||
|
||||
- name: Package
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
ZEN_GA_DISABLE_PGO: true
|
||||
run: |
|
||||
set -x
|
||||
export SURFER_PLATFORM="win32"
|
||||
export ZEN_CROSS_COMPILING=1
|
||||
export ZEN_RELEASE=1
|
||||
npm run package
|
||||
mv ./dist/zen-$(npm run --silent surfer -- get version | xargs).en-US.win64${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.zip zen.win64.zip
|
||||
ls ./dist
|
||||
ls .
|
||||
|
||||
- name: Move package for PGO upload
|
||||
if: ${{ inputs.generate-gpo && matrix.arch == 'x86_64' }}
|
||||
run: |
|
||||
set -x
|
||||
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
|
||||
|
||||
- name: Rename artifacts
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
run: |
|
||||
mv ./zen.win64.zip zen.win-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}.zip
|
||||
mv ./dist/output.mar windows${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.mar
|
||||
mv ./dist/zen.installer.exe ./zen.installer${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.exe
|
||||
|
||||
- name: Upload artifact (PGO)
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ inputs.generate-gpo && matrix.arch == 'x86_64' }}
|
||||
with:
|
||||
retention-days: 5
|
||||
name: ${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}-${{ inputs.profile-data-path-archive }}
|
||||
path: ./zen.win64-pgo-stage-1.zip
|
||||
|
||||
- name: Remove unnecessary files from obj
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
run: |
|
||||
set -x
|
||||
mkdir obj-${{ matrix.arch }}-pc-windows-msvc/
|
||||
|
||||
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/_tests
|
||||
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/config/autoconf.mk
|
||||
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/config.statusd/substs/
|
||||
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/dist/install
|
||||
|
||||
find engine/obj-${{ matrix.arch }}-pc-windows-msvc/dist -maxdepth 1 -type f -name "*.zip" -delete
|
||||
|
||||
cp -r --no-dereference engine/obj-${{ matrix.arch }}-pc-windows-msvc/* obj-${{ matrix.arch }}-pc-windows-msvc/ || true
|
||||
|
||||
- name: Upload dist object
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 2
|
||||
name: windows-x64-obj-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||
path: obj-${{ matrix.arch }}-pc-windows-msvc
|
||||
|
||||
- name: Upload artifact (if Twilight branch, binary)
|
||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: zen.win-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}.zip
|
||||
path: ./zen.win-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}.zip
|
||||
|
||||
- name: Upload artifact (if Twilight branch, installer)
|
||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: zen.installer${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.exe
|
||||
path: ./zen.installer${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.exe
|
||||
|
||||
- name: Upload artifact (if Twilight branch, .mar)
|
||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: windows${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.mar
|
||||
path: ./windows${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.mar
|
||||
|
||||
- name: Upload artifact (if Twilight branch, update manifests)
|
||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
name: windows_update_manifest_${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||
path: ./dist/update
|
9
.gitignore
vendored
@@ -1,4 +1,3 @@
|
||||
|
||||
.dotbuild/
|
||||
engine/
|
||||
firefox-*/
|
||||
@@ -6,4 +5,10 @@ node_modules/
|
||||
.surfer/
|
||||
|
||||
__pycache__/
|
||||
dist/
|
||||
dist/
|
||||
|
||||
windsign-temp/
|
||||
venv/
|
||||
|
||||
!firefox-cache/
|
||||
win-cross/
|
||||
|
3
.gitmodules
vendored
@@ -1,6 +1,3 @@
|
||||
[submodule "src/browser/base/content/zen-components"]
|
||||
path = src/browser/base/content/zen-components
|
||||
url = https://github.com/zen-browser/components
|
||||
[submodule "l10n"]
|
||||
path = l10n
|
||||
url = https://github.com/zen-browser/l10n-packs
|
||||
|
1
.husky/pre-commit
Normal file
@@ -0,0 +1 @@
|
||||
npx lint-staged
|
29
.prettierignore
Normal file
@@ -0,0 +1,29 @@
|
||||
engine/
|
||||
|
||||
**/*.html
|
||||
**/*.xhtml
|
||||
**/*.inc.xhtml
|
||||
**/*.bundle.min.js
|
||||
**/*.min.js
|
||||
**/*.min.mjs
|
||||
|
||||
**/*.svg
|
||||
|
||||
surfer.json
|
||||
|
||||
src/browser/app/profile/*.js
|
||||
pnpm-lock.yaml
|
||||
|
||||
**/engine/
|
||||
|
||||
docs/issue-metrics/*.md
|
||||
|
||||
.husky/
|
||||
|
||||
# Some CSS files are preprocessed and prettier doesn't handle them well
|
||||
# We also dont want to format the CSS files that are generated by the build
|
||||
src/zen/tabs/zen-tabs/vertical-tabs.css
|
||||
src/zen/compact-mode/zen-compact-mode.css
|
||||
src/zen/common/ZenEmojies.mjs
|
||||
|
||||
*.inc
|
12
.prettierrc.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"bracketSameLine": true,
|
||||
"endOfLine": "lf",
|
||||
"trailingComma": "es5",
|
||||
"singleQuote": true,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"jsxSingleQuote": false,
|
||||
"semi": true,
|
||||
"printWidth": 128,
|
||||
"plugins": ["prettier-plugin-sh"]
|
||||
}
|
1
.python-version
Normal file
@@ -0,0 +1 @@
|
||||
3.11
|
1
.rust-toolchain
Normal file
@@ -0,0 +1 @@
|
||||
1.82
|
12
.vscode/settings.json
vendored
@@ -17,6 +17,14 @@
|
||||
"string": "cpp",
|
||||
"string_view": "cpp",
|
||||
"span": "cpp",
|
||||
"vector": "cpp"
|
||||
"vector": "cpp",
|
||||
"charconv": "cpp",
|
||||
"chrono": "cpp",
|
||||
"optional": "cpp",
|
||||
"format": "cpp",
|
||||
"ratio": "cpp",
|
||||
"system_error": "cpp",
|
||||
"regex": "cpp",
|
||||
"type_traits": "cpp"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,14 +0,0 @@
|
||||
#!/bin/sh
|
||||
SELF=$(readlink -f "$0")
|
||||
HERE=${SELF%/*}
|
||||
export PATH="${HERE}:${HERE}/usr/bin/:${HERE}/usr/sbin/:${HERE}/usr/games/:${HERE}/bin/:${HERE}/sbin/${PATH:+:$PATH}"
|
||||
export LD_LIBRARY_PATH="${HERE}/usr/lib/:${HERE}/usr/lib/i386-linux-gnu/:${HERE}/usr/lib/x86_64-linux-gnu/:${HERE}/usr/lib32/:${HERE}/usr/lib64/:${HERE}/lib/:${HERE}/lib/i386-linux-gnu/:${HERE}/lib/x86_64-linux-gnu/:${HERE}/lib32/:${HERE}/lib64/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||
export PYTHONPATH="${HERE}/usr/share/pyshared/${PYTHONPATH:+:$PYTHONPATH}"
|
||||
export MOZ_LEGACY_PROFILES=1 # Prevent per installation profiles
|
||||
DEFAULT_XDG_DATA_DIRS='./share/:/usr/share/gnome:/usr/local/share/:/usr/share/'
|
||||
export XDG_DATA_DIRS="${HERE}/usr/share/:${XDG_DATA_DIRS:-$DEFAULT_XDG_DATA_DIRS}"
|
||||
export PERLLIB="${HERE}/usr/share/perl5/:${HERE}/usr/lib/perl5/${PERLLIB:+:$PERLLIB}"
|
||||
export GSETTINGS_SCHEMA_DIR="${HERE}/usr/share/glib-2.0/schemas/${GSETTINGS_SCHEMA_DIR:+:$GSETTINGS_SCHEMA_DIR}"
|
||||
export QT_PLUGIN_PATH="${HERE}/usr/lib/qt4/plugins/:${HERE}/usr/lib/i386-linux-gnu/qt4/plugins/:${HERE}/usr/lib/x86_64-linux-gnu/qt4/plugins/:${HERE}/usr/lib32/qt4/plugins/:${HERE}/usr/lib64/qt4/plugins/:${HERE}/usr/lib/qt5/plugins/:${HERE}/usr/lib/i386-linux-gnu/qt5/plugins/:${HERE}/usr/lib/x86_64-linux-gnu/qt5/plugins/:${HERE}/usr/lib32/qt5/plugins/:${HERE}/usr/lib64/qt5/plugins/${QT_PLUGIN_PATH:+:$QT_PLUGIN_PATH}"
|
||||
EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2 | cut -d " " -f 1)
|
||||
exec "${EXEC}" "$@"
|
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"policies": {
|
||||
"DisableAppUpdate": true,
|
||||
"AppAutoUpdate": false,
|
||||
"ManualAppUpdateOnly": true,
|
||||
"BackgroundAppUpdate": false
|
||||
}
|
||||
}
|
@@ -1 +1 @@
|
||||
* @mauro-balades
|
||||
* @mauro-balades
|
||||
|
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
- Demonstrating empathy and kindness toward other people
|
||||
- Being respectful of differing opinions, viewpoints, and experiences
|
||||
- Giving and gracefully accepting constructive feedback
|
||||
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
- Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
- The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
hello@zen-browser.app.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
161
README.md
@@ -1,92 +1,147 @@
|
||||
<img src="./docs/assets/zen-dark.svg" width="100px" align="left">
|
||||
|
||||
# 🌀 Zen Browser
|
||||
|
||||
Experience tranquillity while browsing the web without people tracking you!
|
||||
|
||||
* [Website](https://www.zen-browser.app)
|
||||
* [Download](https://www.zen-browser.app/download)
|
||||
* [Release Notes](https://www.zen-browser.app/release-notes/latest)
|
||||
### `Zen Browser`
|
||||
|
||||
[](https://github.com/zen-browser/desktop/releases)
|
||||
[](https://crowdin.com/project/zen-browser)
|
||||
[](https://github.com/zen-browser/desktop/actions/workflows/build.yml)
|
||||
|
||||
[](https://ko-fi.com/K3K111FH7H)
|
||||
<a href='https://flathub.org/apps/io.github.zen_browser.zen'>
|
||||
<img width='220' alt='Get it on Flathub' src='https://flathub.org/api/badge?locale=en'/>
|
||||
</a>
|
||||
✨ Experience tranquillity while browsing the internet with Zen! Our mission is to give you a balance between speed, privacy and productivity!
|
||||
|
||||
# Compatibility
|
||||
<div flex="true">
|
||||
<a href="https://zen-browser.app/download">
|
||||
Download
|
||||
</a>
|
||||
•
|
||||
<a href="https://zen-browser.app">
|
||||
Website
|
||||
</a>
|
||||
•
|
||||
<a href="https://docs.zen-browser.app">
|
||||
Documentation
|
||||
</a>
|
||||
•
|
||||
<a href="https://zen-browser.app/release-notes/latest">
|
||||
Release Notes
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Zen is currently built using firefox version `129.0.2`!
|
||||
## 🖥️ Compatibility
|
||||
|
||||
* Check out the latest [release notes](https://www.zen-browser.app/release-notes)!
|
||||
Zen is currently built using Firefox version `137.0.2`! 🚀
|
||||
|
||||
# Performance
|
||||
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 137.0.2`!
|
||||
- Check out the latest [release notes](https://zen-browser.app/release-notes)!
|
||||
- Part of our mission is to keep Zen up-to-date with the latest version of Firefox, so you can enjoy the latest features and security updates!
|
||||
|
||||
Zen is built with performance in mind, and we have optimized the browser to be as fast as possible!
|
||||
## 🤝 Contribution
|
||||
|
||||
* Checkout the latest [performance benchmarks](https://docs.zen-browser.app/benchmarks)!
|
||||
Zen is an open-source project, and we welcome contributions from the community! Please take a look at the [contribution guidelines](./docs/contribute.md) before getting started!
|
||||
|
||||
# Core Components
|
||||
### Issue metrics
|
||||
|
||||
Some components used by @zen-browser as an attempt to make firefox forks a better place. You can find them [here](https://github.com/zen-browser/components).
|
||||
We keep track of how many issues are closed at the end of the month in [docs/issue-metrics](./docs/issue-metrics). We use this to keep track of our issues and see our progress! 📈
|
||||
|
||||
## 🚀 Run Locally
|
||||
### Versioning
|
||||
|
||||
Clone the project
|
||||
Zen uses [Semantic Versioning](https://semver.org/), meaning versions are displayed as `a.b.cd` where:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/zen-browser/desktop.git --recurse-submodules
|
||||
cd desktop
|
||||
- `a` is the major version
|
||||
- `b` is the minor version
|
||||
- `c` is the branch prefix
|
||||
- `d` is the patch version
|
||||
|
||||
### Branches
|
||||
|
||||
Zen is divided into 2 main branches. We use `dev` for development and `stable` for stable releases. The `dev` branch is where all the new features are added and where `twilight` builds are generated. The `stable` branch is where the stable releases are generated.
|
||||
|
||||
We divide into 2 branches in case there's any really important security update (for example) that needs to be released before the next stable release. This allows us to do patches without releasing unstable versions to the public.
|
||||
|
||||
## ⚡ Performance
|
||||
|
||||
Zen is built with performance in mind, and we have optimized the browser to be as fast as possible! Checkout the latest [performance benchmarks](https://docs.zen-browser.app/benchmarks)!
|
||||
|
||||
## 📥 Installation
|
||||
|
||||
### Supported Operating Systems
|
||||
|
||||
Zen is available for Linux, macOS, and Windows. You can download the latest version from the official website at [zen-browser.app](https://zen-browser.app/download), or from the [GitHub Releases](https://github.com/zen-browser/desktop/releases) page.
|
||||
|
||||
If you don't see your OS listed below, that's because we already have it in our [downloads page](https://zen-browser.app/download)! Make sure to check it out!
|
||||
|
||||
#### Windows
|
||||
|
||||
##### Winget
|
||||
|
||||
```ps
|
||||
winget install --id Zen-Team.Zen-Browser
|
||||
```
|
||||
|
||||
Install dependencies
|
||||
#### macOS
|
||||
|
||||
```bash
|
||||
npm i
|
||||
```
|
||||
- Requires macOS 10.15 or later
|
||||
- Available for ARM and Intel architectures
|
||||
|
||||
Download and bootstrap the browser
|
||||
You can also install Zen using Homebrew:
|
||||
|
||||
```
|
||||
npm run init
|
||||
brew install zen-browser
|
||||
```
|
||||
|
||||
Start building the browser
|
||||
#### Linux
|
||||
|
||||
```
|
||||
npm run build
|
||||
##### Arch-based distributions
|
||||
|
||||
```sh
|
||||
yay -S zen-browser-bin
|
||||
```
|
||||
|
||||
Finally, run the browser!
|
||||
##### Other Linux distributions (Tarball or AppImage)
|
||||
|
||||
```
|
||||
npm start
|
||||
- `Tarball` install:
|
||||
|
||||
```sh
|
||||
bash <(curl -s https://updates.zen-browser.app/install.sh)
|
||||
```
|
||||
|
||||
## Special Thanks
|
||||
- `AppImage` install:
|
||||
|
||||
- [IAmJafeth](https://github.com/IAmJafeth) (For sponsoring the domain)
|
||||
- [Donno 🐒](https://www.onnno.nl/) (For making the logo)
|
||||
- [ptr1337](https://github.com/ptr1337) (AUR Packages and optimization flags)
|
||||
- [nitro](https://github.com/n7itro) (For the amazing work on the browser)
|
||||
```sh
|
||||
bash <(curl https://updates.zen-browser.app/appimage.sh)
|
||||
```
|
||||
|
||||
## Third Party Code
|
||||
> AppImage install requires `zsync` for the Update feature
|
||||
|
||||
Zen coudn't be in its current state without the help of these amazing projects!
|
||||
- Again, if you don't see your OS listed above, that's because we already have it in our [downloads page](https://zen-browser.app/download)! 🔄
|
||||
|
||||
To upgrade the browser to a newer version, use the embedded update functionality in `About Zen`.
|
||||
|
||||
## 👨💻 Development and Contributing
|
||||
|
||||
Some components used by @zen-browser as an attempt to make firefox forks a better place, and for other to enjoy the beauty of OSS. You can find them [here](https://github.com/zen-browser/desktop/tree/dev/src/zen).
|
||||
|
||||
#### `Run Locally`
|
||||
|
||||
In order to download and run Zen locally, please follow [these instructions](https://docs.zen-browser.app/guides/building).
|
||||
|
||||
#### `Special Thanks`
|
||||
|
||||
Special thanks to... EVERYONE 🎉! Checkout the team and contributors page [here](https://zen-browser.app/about)
|
||||
|
||||
#### `Third Party Code`
|
||||
|
||||
Zen couldn't be in its current state without the help of these amazing projects! 🙏
|
||||
|
||||
- Zen's default preferences are based on [BetterFox](https://github.com/yokoffing/Betterfox)
|
||||
- Gradient image extracted from [Arc Palette](https://github.com/neurokitti/Arc_Palette)
|
||||
- `icons.css` has been modified from [Edge Firefox](https://github.com/bmFtZQ/edge-frfox) (MIT licensed file).
|
||||
|
||||
## License
|
||||
### 🖥️ Comparison with other browsers
|
||||
|
||||
[MPL LICENSE](./LICENSE)
|
||||
Thanks everyone for making Zen stand out among these giants!
|
||||
|
||||
## Star History
|
||||
[](https://star-history.com/#zen-browser/desktop&chromium/chromium&brave/brave-browser&Date)
|
||||
|
||||
<a href="https://star-history.com/#zen-browser/desktop&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zen-browser/desktop&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zen-browser/desktop&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zen-browser/desktop&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
## 📄 License
|
||||
|
||||
Zen browser is under the [MPL 2.0 LICENSE](./LICENSE). All the code is open-source and free to use! Attribution is appreciated but not required.
|
||||
|
6
build/AppDir/AppRun
Normal file
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
CURRENTDIR="$(dirname "$(readlink -f "$0")")"
|
||||
export PATH="${CURRENTDIR}:${PATH}"
|
||||
export MOZ_LEGACY_PROFILES=1 # Prevent per installation profiles
|
||||
export MOZ_APP_LAUNCHER="${APPIMAGE}" # Allows setting as default browser
|
||||
exec "${CURRENTDIR}/zen" "$@"
|
8
build/AppDir/distribution/policies.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"policies": {
|
||||
"DisableAppUpdate": true,
|
||||
"AppAutoUpdate": false,
|
||||
"ManualAppUpdateOnly": true,
|
||||
"BackgroundAppUpdate": false
|
||||
}
|
||||
}
|
@@ -5,7 +5,7 @@ Exec=zen %u
|
||||
Icon=zen
|
||||
Type=Application
|
||||
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json;
|
||||
StartupWMClass=zen-alpha
|
||||
StartupWMClass=zen
|
||||
Categories=Network;WebBrowser;
|
||||
StartupNotify=true
|
||||
Terminal=false
|
1
build/firefox-cache/l10n-last-commit-hash
Normal file
@@ -0,0 +1 @@
|
||||
ee85441427e22eb9fbc8d3eb62c7e5804535f0bc
|
76
build/flatpak/app.zen_browser.zen.yml.template
Normal file
@@ -0,0 +1,76 @@
|
||||
app-id: app.zen_browser.zen
|
||||
runtime: org.freedesktop.Platform
|
||||
runtime-version: '24.08'
|
||||
sdk: org.freedesktop.Sdk
|
||||
base: org.mozilla.firefox.BaseApp
|
||||
base-version: '24.08'
|
||||
add-extensions:
|
||||
org.freedesktop.Platform.ffmpeg-full:
|
||||
directory: lib/ffmpeg
|
||||
version: '24.08'
|
||||
add-ld-path: .
|
||||
command: launch-script.sh
|
||||
finish-args:
|
||||
- --share=ipc
|
||||
- --share=network
|
||||
- --socket=pulseaudio
|
||||
- --socket=wayland
|
||||
- --socket=fallback-x11
|
||||
- --socket=pcsc
|
||||
- --socket=cups
|
||||
- --persist=.zen
|
||||
- --filesystem=xdg-download:rw
|
||||
- --device=all
|
||||
- --talk-name=org.freedesktop.FileManager1
|
||||
- --talk-name=org.freedesktop.ScreenSaver
|
||||
- --own-name=org.mozilla.zen.*
|
||||
- --own-name=org.mpris.MediaPlayer2.firefox.*
|
||||
- --system-talk-name=org.freedesktop.NetworkManager
|
||||
- --talk-name=org.a11y.Bus
|
||||
- --env=GTK_PATH=/app/lib/gtkmodules
|
||||
- --env=MESA_SHADER_CACHE_DIR=/var/cache/mesa_shader_cache_db
|
||||
modules:
|
||||
- name: zen_browser
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- mv zen /app/
|
||||
- mkdir -p /app/lib/ffmpeg
|
||||
|
||||
- install -Dm0755 metadata/launch-script.sh ${{FLATPAK_DEST}}/bin/launch-script.sh
|
||||
- install -Dm0644 metadata/policies.json ${{FLATPAK_DEST}}/bin/distribution/policies.json
|
||||
- install -Dm0644 metadata/icons/${{FLATPAK_ID}}.svg ${{FLATPAK_DEST}}/share/icons/hicolor/scalable/apps/${{FLATPAK_ID}}.svg
|
||||
- install -Dm0644 metadata/${{FLATPAK_ID}}.metainfo.xml ${{FLATPAK_DEST}}/share/metainfo/${{FLATPAK_ID}}.metainfo.xml
|
||||
- install -Dm0644 metadata/${{FLATPAK_ID}}.desktop ${{FLATPAK_DEST}}/share/applications/${{FLATPAK_ID}}.desktop
|
||||
|
||||
sources:
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-x86_64.tar.xz
|
||||
sha256: {linux_sha256}
|
||||
strip-components: 0
|
||||
only-arches:
|
||||
- x86_64
|
||||
x-checker-data:
|
||||
type: json
|
||||
url: https://api.github.com/repos/zen-browser/desktop/releases/latest
|
||||
version-query: .tag_name
|
||||
url-query: .assets[] | select(.name=="zen.linux-x86_64.tar.xz") | .browser_download_url
|
||||
is-main-source: true
|
||||
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-aarch64.tar.xz
|
||||
sha256: {linux_aarch64_sha256}
|
||||
strip-components: 0
|
||||
only-arches:
|
||||
- aarch64
|
||||
x-checker-data:
|
||||
type: json
|
||||
url: https://api.github.com/repos/zen-browser/desktop/releases/latest
|
||||
version-query: .tag_name
|
||||
url-query: .assets[] | select(.name=="zen.linux-aarch64.tar.xz") | .browser_download_url
|
||||
is-main-source: true
|
||||
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/flatpak/releases/download/{version}/archive.tar
|
||||
sha256: {flatpak_sha256}
|
||||
strip-components: 0
|
||||
dest: metadata
|
9
build/winsign/bootstrap.ps1
Normal file
@@ -0,0 +1,9 @@
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe", "C:\MozillaBuildSetup-Latest.exe")
|
||||
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
||||
|
||||
rustup target add aarch64-pc-windows-msvc
|
||||
rustup target add x86_64-pc-windows-msvc
|
||||
|
||||
cd engine
|
||||
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ../win-cross/vs2022
|
||||
cd ..
|
BIN
build/winsign/mar.exe
Normal file
226
build/winsign/sign.ps1
Normal file
@@ -0,0 +1,226 @@
|
||||
param(
|
||||
[string][Parameter(Mandatory=$true)]$SignIdentity,
|
||||
[string][Parameter(Mandatory=$true)]$GithubRunId
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
echo "Preparing environment"
|
||||
git pull --recurse
|
||||
mkdir windsign-temp -ErrorAction SilentlyContinue
|
||||
|
||||
# Download in parallel
|
||||
|
||||
#show output too
|
||||
#Start-Job -Name "DownloadGitObjectsRepo" -ScriptBlock {
|
||||
# param($PWD)
|
||||
# echo "Downloading git objects repo to $PWD\windsign-temp\windows-binaries"
|
||||
# git clone https://github.com/zen-browser/windows-binaries.git $PWD\windsign-temp\windows-binaries
|
||||
# echo "Downloaded git objects repo to"
|
||||
#} -Verbose -ArgumentList $PWD -Debug
|
||||
|
||||
Start-Job -Name "DownloadGitl10n" -ScriptBlock {
|
||||
param($PWD)
|
||||
cd $PWD
|
||||
$env:ZEN_L10N_CURR_DIR=[regex]::replace($PWD, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\", "/"
|
||||
C:\mozilla-build\start-shell.bat $PWD\scripts\download-language-packs.sh
|
||||
echo "Fetched l10n and firefox's one"
|
||||
} -Verbose -ArgumentList $PWD -Debug
|
||||
|
||||
Start-Job -Name "SurferInit" -ScriptBlock {
|
||||
param($PWD)
|
||||
cd $PWD
|
||||
surfer -- ci --brand release
|
||||
npm run import -- --verbose
|
||||
} -Verbose -ArgumentList $PWD -Debug
|
||||
|
||||
echo "Downloading artifacts info"
|
||||
$artifactsInfo=gh api repos/zen-browser/desktop/actions/runs/$GithubRunId/artifacts
|
||||
$token = gh auth token
|
||||
|
||||
function New-TemporaryDirectory {
|
||||
$tmp = [System.IO.Path]::GetTempPath() # Not $env:TEMP, see https://stackoverflow.com/a/946017
|
||||
$name = (New-Guid).ToString("N")
|
||||
New-Item -ItemType Directory -Path (Join-Path $tmp $name)
|
||||
}
|
||||
|
||||
function DownloadFile($url, $targetFile) {
|
||||
$uri = New-Object "System.Uri" "$url"
|
||||
$request = [System.Net.HttpWebRequest]::Create($uri)
|
||||
$request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
|
||||
$request.Headers.Add("Authorization", "Bearer $token")
|
||||
$response = $request.GetResponse()
|
||||
$totalLength = [System.Math]::Floor($response.get_ContentLength()/1024)
|
||||
$responseStream = $response.GetResponseStream()
|
||||
$targetStream = New-Object -TypeName System.IO.FileStream -ArgumentList $targetFile, Create
|
||||
$buffer = new-object byte[] 10KB
|
||||
$count = $responseStream.Read($buffer,0,$buffer.length)
|
||||
$downloadedBytes = $count
|
||||
|
||||
while ($count -gt 0) {
|
||||
$targetStream.Write($buffer, 0, $count)
|
||||
$count = $responseStream.Read($buffer,0,$buffer.length)
|
||||
$downloadedBytes = $downloadedBytes + $count
|
||||
Write-Progress -activity "Downloading file '$($url.split('/') | Select -Last 1)'" -status "Downloaded ($([System.Math]::Floor($downloadedBytes/1024))K of $($totalLength)K): " -PercentComplete ((([System.Math]::Floor($downloadedBytes/1024)) / $totalLength) * 100)
|
||||
}
|
||||
|
||||
Write-Progress -activity "Finished downloading file '$($url.split('/') | Select -Last 1)'"
|
||||
|
||||
$targetStream.Flush()
|
||||
$targetStream.Close()
|
||||
$targetStream.Dispose()
|
||||
$responseStream.Dispose()
|
||||
}
|
||||
|
||||
function DownloadArtifacts($name) {
|
||||
echo "Downloading artifacts for $name"
|
||||
$artifactUrl=$($artifactsInfo | jq -r --arg NAME "windows-x64-obj-$name" '.artifacts[] | select(.name == $NAME) | .archive_download_url')
|
||||
echo "Artifact URL: $artifactUrl"
|
||||
|
||||
# download the artifact
|
||||
$outputPath="$PWD\windsign-temp\windows-x64-obj-$name"
|
||||
$tempDir = New-TemporaryDirectory
|
||||
$tempFile = Join-Path $tempDir "artifact-$($name).zip"
|
||||
|
||||
echo "Downloading artifact to $tempFile"
|
||||
DownloadFile $artifactUrl $tempFile
|
||||
|
||||
Start-Job -Name "UnzipArtifact$name" -ScriptBlock {
|
||||
param($tempFile, $outputPath)
|
||||
echo "Unzipping artifact to $outputPath"
|
||||
Expand-Archive -Path $tempFile -DestinationPath $outputPath -Force
|
||||
echo "Unzipped artifact to $outputPath"
|
||||
} -ArgumentList $tempFile, $outputPath -Verbose -Debug
|
||||
}
|
||||
|
||||
DownloadArtifacts arm64
|
||||
DownloadArtifacts x86_64
|
||||
|
||||
# Wait for the jobs to finish
|
||||
Wait-Job -Name "UnzipArtifactarm64"
|
||||
Wait-Job -Name "UnzipArtifactx86_64"
|
||||
|
||||
mkdir engine\obj-x86_64-pc-windows-msvc\ -ErrorAction SilentlyContinue
|
||||
|
||||
# Collect all .exe and .dll files into a list
|
||||
$files = Get-ChildItem windsign-temp\windows-x64-obj-x86_64\ -Recurse -Include *.exe
|
||||
$files += Get-ChildItem windsign-temp\windows-x64-obj-x86_64\ -Recurse -Include *.dll
|
||||
|
||||
$files += Get-ChildItem windsign-temp\windows-x64-obj-arm64\ -Recurse -Include *.exe
|
||||
$files += Get-ChildItem windsign-temp\windows-x64-obj-arm64\ -Recurse -Include *.dll
|
||||
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
|
||||
$env:ZEN_RELEASE="true"
|
||||
$env:SURFER_SIGNING_MODE="true"
|
||||
Wait-Job -Name "SurferInit"
|
||||
Wait-Job -Name "DownloadGitl10n"
|
||||
|
||||
function SignAndPackage($name) {
|
||||
echo "Executing on $name"
|
||||
rmdir .\dist -Recurse -ErrorAction SilentlyContinue
|
||||
rmdir engine\obj-$name-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||
$objName=$name
|
||||
# instead of arm, use aarch64
|
||||
if ($name -eq "arm64") {
|
||||
$objName="aarch64"
|
||||
}
|
||||
|
||||
echo "Removing old obj dir"
|
||||
rmdir engine\obj-$objName-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
echo "Creating new obj dir"
|
||||
cp windsign-temp\windows-x64-obj-$name engine\obj-$objName-pc-windows-msvc\ -Recurse
|
||||
|
||||
echo "Copying setup.exe into obj dir"
|
||||
$env:ZEN_SETUP_EXE_PATH="$PWD\windsign-temp\windows-x64-obj-$name\browser\installer\windows\instgen\setup.exe"
|
||||
|
||||
if ($name -eq "arm64") {
|
||||
$env:WIN32_REDIST_DIR="$PWD\win-cross\vs2022\VC\Redist\MSVC\14.38.33135\arm64\Microsoft.VC143.CRT"
|
||||
} else {
|
||||
$env:WIN32_REDIST_DIR="$PWD\win-cross\vs2022\VC\Redist\MSVC\14.38.33135\x64\Microsoft.VC143.CRT"
|
||||
}
|
||||
|
||||
$env:MAR="..\\build\\winsign\\mar.exe"
|
||||
if ($name -eq "arm64") {
|
||||
$env:SURFER_COMPAT="aarch64"
|
||||
} else {
|
||||
$env:SURFER_COMPAT="x86_64"
|
||||
}
|
||||
echo "Compat Mode? $env:SURFER_COMPAT"
|
||||
|
||||
# Configure each time since we are cloning from a linux environment into
|
||||
# a windows environment, and the build system is not smart enough to detect that
|
||||
# we are on a different platform.
|
||||
cd .\engine
|
||||
echo "Configuring for $name"
|
||||
.\mach configure
|
||||
cd ..
|
||||
|
||||
echo "Packaging $name"
|
||||
npm run package -- --verbose
|
||||
|
||||
# In the release script, we do the following:
|
||||
# tar -xvf .github/workflows/object/windows-x64-signed-x86_64.tar.gz -C windows-x64-signed-x86_64
|
||||
# We need to create a tar with the same structure and no top-level directory
|
||||
# Inside, we need:
|
||||
# - update_manifest/*
|
||||
# - windows.mar
|
||||
# - zen.installer.exe
|
||||
echo "Creating tar for $name"
|
||||
rm .\windsign-temp\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
||||
mkdir windsign-temp\windows-x64-signed-$name
|
||||
|
||||
# Move the MAR, add the `-arm64` suffix if needed
|
||||
echo "Moving MAR for $name"
|
||||
if ($name -eq "arm64") {
|
||||
mv .\dist\output.mar windsign-temp\windows-x64-signed-$name\windows-$name.mar
|
||||
} else {
|
||||
mv .\dist\output.mar windsign-temp\windows-x64-signed-$name\windows.mar
|
||||
}
|
||||
|
||||
# Move the installer
|
||||
echo "Moving installer for $name"
|
||||
if ($name -eq "arm64") {
|
||||
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer-$name.exe
|
||||
} else {
|
||||
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer.exe
|
||||
}
|
||||
|
||||
# Move the manifest
|
||||
mv .\dist\update\. windsign-temp\windows-x64-signed-$name\update_manifest
|
||||
|
||||
# note: We need to sign it into a parent folder, called windows-x64-signed-$name
|
||||
rmdir .\windsign-temp\windows-binaries\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
||||
mv windsign-temp\windows-x64-signed-$name .\windsign-temp\windows-binaries -Force
|
||||
rmdir engine\obj-$objName-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
echo "Finished $name"
|
||||
}
|
||||
|
||||
SignAndPackage arm64
|
||||
SignAndPackage x86_64
|
||||
|
||||
$files = Get-ChildItem .\windsign-temp\windows-binaries -Recurse -Include *.exe
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
|
||||
echo "All artifacts signed and packaged, ready for release!"
|
||||
echo "Commiting the changes to the repository"
|
||||
cd windsign-temp\windows-binaries
|
||||
git add .
|
||||
git commit -m "Sign and package windows artifacts"
|
||||
git push
|
||||
cd ..\..
|
||||
|
||||
# Cleaning up
|
||||
|
||||
echo "All done!"
|
||||
echo "All the artifacts (x86_64 and arm46) are signed and packaged, get a rest now!"
|
||||
Read-Host "Press Enter to continue"
|
||||
|
||||
echo "Cleaning up"
|
||||
rmdir windsign-temp\windows-x64-obj-x86_64 -Recurse -ErrorAction SilentlyContinue
|
||||
rmdir windsign-temp\windows-x64-obj-arm64 -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
echo "Opening visual studio code"
|
||||
code .
|
@@ -1,4 +0,0 @@
|
||||
<svg width="320" height="130" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="300" height="100" x="10" y="10" style="fill:rgb(0,0,255);stroke-width:3;stroke:red" />
|
||||
Sorry, your browser does not support inline SVG.
|
||||
</svg>
|
Before Width: | Height: | Size: 226 B |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 5.9 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><defs><style>.g{fill:#000;}.g,.h,.i{stroke-width:0px;}.h{fill:url(#e);}.i{fill:#fff;}</style><linearGradient id="e" x1="128" y1="256" x2="128" y2="0" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#fff" stop-opacity=".02"/><stop offset=".9" stop-color="#fff" stop-opacity=".1"/></linearGradient></defs><g id="c"><rect class="g" y="0" width="256" height="256" rx="58.4" ry="58.4"/></g><g id="d"><rect class="h" y="0" width="256" height="256" rx="58.4" ry="58.4"/></g><g id="f"><path class="i" d="M165.9156,146.3156c-15.6016,0-28.6656,11.0055-31.8813,25.6562h-12.0687c-3.2156-14.6508-16.2797-25.6562-31.8813-25.6562-18.0063,0-32.6562,14.65-32.6562,32.6562s14.65,32.6562,32.6562,32.6562c15.6016,0,28.6656-11.0055,31.8813-25.6562h12.0687c3.2156,14.6508,16.2797,25.6562,31.8813,25.6562,18.0063,0,32.6562-14.65,32.6562-32.6562s-14.65-32.6562-32.6562-32.6562ZM90.0844,197.6281c-10.2875,0-18.6562-8.3687-18.6562-18.6562s8.3687-18.6562,18.6562-18.6562,18.6562,8.3688,18.6562,18.6562-8.3687,18.6562-18.6562,18.6562ZM165.9156,197.6281c-10.2875,0-18.6562-8.3687-18.6562-18.6562s8.3687-18.6562,18.6562-18.6562,18.6562,8.3688,18.6562,18.6562-8.3687,18.6562-18.6562,18.6562Z"/><path class="i" d="M214.4,115.6812h-21.8391l-9.2422-65.2906c-.3031-2.1406-1.5813-4.0219-3.4594-5.0969-1.8781-1.0719-4.1469-1.2188-6.1469-.3906l-45.7125,18.8906-45.7125-18.8906c-2-.8281-4.2688-.6813-6.1469.3906-1.8781,1.075-3.1562,2.9562-3.4594,5.0969l-9.2422,65.2906h-21.8391c-3.8656,0-7,3.1344-7,7s3.1344,7,7,7h172.8c3.8656,0,7-3.1344,7-7s-3.1344-7-7-7ZM85.2781,61.2875l40.0469,16.55c1.7125.7063,3.6375.7063,5.35,0l40.0469-16.55,7.6984,54.3937h-100.8406l7.6984-54.3937Z"/></g></svg>
|
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 4.8 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="d" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><defs><style>.f{fill:#000;}.f,.g,.h{stroke-width:0px;}.g{fill:url(#e);}.h{fill:#fff;}</style><linearGradient id="e" x1="128" y1="256" x2="128" y2="0" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#fff" stop-opacity=".02"/><stop offset=".9" stop-color="#fff" stop-opacity=".1"/></linearGradient></defs><rect class="f" width="256" height="256" rx="58.4" ry="58.4"/><rect class="g" width="256" height="256" rx="58.4" ry="58.4"/><path class="h" d="M202.9973,184.5702c-.1715,10.2808-8.7737,18.4298-19.0559,18.4298h-77.2885c-3.0056,0-5.0458-3.0553-3.894-5.8314l.0262-.0632c5.0822-12.2707,13.3289-22.6249,23.8591-30.1785,1.3098-.9395,2.8903-1.4269,4.5023-1.4269h53.1034c10.462,0,18.9225,8.5681,18.7473,19.0702Z"/><path class="h" d="M149.3471,53c3.0056,0,5.0458,3.0553,3.894,5.8314l-.0262.0631c-5.0822,12.2708-13.3289,22.6249-23.8591,30.1785-1.3098.9396-2.8903,1.427-4.5023,1.427h-52.7949c-10.2822,0-18.8844-8.149-19.0559-18.4298-.1752-10.5021,8.2853-19.0702,18.7473-19.0702h77.5971Z"/><path class="h" d="M71.7465,203c-2.3913,0-4.8207-.46-7.1673-1.4319-9.5666-3.9624-14.1096-14.9301-10.1472-24.4964,6.0943-14.7127,14.8294-27.9027,25.9634-39.2034,11.5341-11.7073,25.1364-20.8551,40.4297-27.1898,21.021-8.7076,37.393-25.0792,46.0995-46.0995,3.9624-9.567,14.9305-14.1093,24.4964-10.1472,9.5666,3.9624,14.1096,14.9301,10.1472,24.4964-6.0943,14.7127-14.8294,27.9027-25.9634,39.2034-11.5341,11.7073-25.1364,20.8551-40.4297,27.1898-21.021,8.7076-37.393,25.0792-46.0995,46.0995-2.9905,7.22-9.9725,11.5791-17.329,11.5791Z"/></svg>
|
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 951 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 103 KiB |
@@ -1,4 +0,0 @@
|
||||
<svg width="320" height="130" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="300" height="100" x="10" y="10" style="fill:rgb(0,0,255);stroke-width:3;stroke:red" />
|
||||
Sorry, your browser does not support inline SVG.
|
||||
</svg>
|
Before Width: | Height: | Size: 226 B |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 5.9 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><defs><style>.g{fill:#000;}.g,.h,.i{stroke-width:0px;}.h{fill:url(#e);}.i{fill:#fff;}</style><linearGradient id="e" x1="128" y1="256" x2="128" y2="0" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#fff" stop-opacity=".02"/><stop offset=".9" stop-color="#fff" stop-opacity=".1"/></linearGradient></defs><g id="c"><rect class="g" y="0" width="256" height="256" rx="58.4" ry="58.4"/></g><g id="d"><rect class="h" y="0" width="256" height="256" rx="58.4" ry="58.4"/></g><g id="f"><path class="i" d="M165.9156,146.3156c-15.6016,0-28.6656,11.0055-31.8813,25.6562h-12.0687c-3.2156-14.6508-16.2797-25.6562-31.8813-25.6562-18.0063,0-32.6562,14.65-32.6562,32.6562s14.65,32.6562,32.6562,32.6562c15.6016,0,28.6656-11.0055,31.8813-25.6562h12.0687c3.2156,14.6508,16.2797,25.6562,31.8813,25.6562,18.0063,0,32.6562-14.65,32.6562-32.6562s-14.65-32.6562-32.6562-32.6562ZM90.0844,197.6281c-10.2875,0-18.6562-8.3687-18.6562-18.6562s8.3687-18.6562,18.6562-18.6562,18.6562,8.3688,18.6562,18.6562-8.3687,18.6562-18.6562,18.6562ZM165.9156,197.6281c-10.2875,0-18.6562-8.3687-18.6562-18.6562s8.3687-18.6562,18.6562-18.6562,18.6562,8.3688,18.6562,18.6562-8.3687,18.6562-18.6562,18.6562Z"/><path class="i" d="M214.4,115.6812h-21.8391l-9.2422-65.2906c-.3031-2.1406-1.5813-4.0219-3.4594-5.0969-1.8781-1.0719-4.1469-1.2188-6.1469-.3906l-45.7125,18.8906-45.7125-18.8906c-2-.8281-4.2688-.6813-6.1469.3906-1.8781,1.075-3.1562,2.9562-3.4594,5.0969l-9.2422,65.2906h-21.8391c-3.8656,0-7,3.1344-7,7s3.1344,7,7,7h172.8c3.8656,0,7-3.1344,7-7s-3.1344-7-7-7ZM85.2781,61.2875l40.0469,16.55c1.7125.7063,3.6375.7063,5.35,0l40.0469-16.55,7.6984,54.3937h-100.8406l7.6984-54.3937Z"/></g></svg>
|
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 4.8 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="d" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><defs><style>.f{fill:#000;}.f,.g,.h{stroke-width:0px;}.g{fill:url(#e);}.h{fill:#fff;}</style><linearGradient id="e" x1="128" y1="256" x2="128" y2="0" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#fff" stop-opacity=".02"/><stop offset=".9" stop-color="#fff" stop-opacity=".1"/></linearGradient></defs><rect class="f" width="256" height="256" rx="58.4" ry="58.4"/><rect class="g" width="256" height="256" rx="58.4" ry="58.4"/><path class="h" d="M202.9973,184.5702c-.1715,10.2808-8.7737,18.4298-19.0559,18.4298h-77.2885c-3.0056,0-5.0458-3.0553-3.894-5.8314l.0262-.0632c5.0822-12.2707,13.3289-22.6249,23.8591-30.1785,1.3098-.9395,2.8903-1.4269,4.5023-1.4269h53.1034c10.462,0,18.9225,8.5681,18.7473,19.0702Z"/><path class="h" d="M149.3471,53c3.0056,0,5.0458,3.0553,3.894,5.8314l-.0262.0631c-5.0822,12.2708-13.3289,22.6249-23.8591,30.1785-1.3098.9396-2.8903,1.427-4.5023,1.427h-52.7949c-10.2822,0-18.8844-8.149-19.0559-18.4298-.1752-10.5021,8.2853-19.0702,18.7473-19.0702h77.5971Z"/><path class="h" d="M71.7465,203c-2.3913,0-4.8207-.46-7.1673-1.4319-9.5666-3.9624-14.1096-14.9301-10.1472-24.4964,6.0943-14.7127,14.8294-27.9027,25.9634-39.2034,11.5341-11.7073,25.1364-20.8551,40.4297-27.1898,21.021-8.7076,37.393-25.0792,46.0995-46.0995,3.9624-9.567,14.9305-14.1093,24.4964-10.1472,9.5666,3.9624,14.1096,14.9301,10.1472,24.4964-6.0943,14.7127-14.8294,27.9027-25.9634,39.2034-11.5341,11.7073-25.1364,20.8551-40.4297,27.1898-21.021,8.7076-37.393,25.0792-46.0995,46.0995-2.9905,7.22-9.9725,11.5791-17.329,11.5791Z"/></svg>
|
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 951 B |
Before Width: | Height: | Size: 1.0 KiB |