Compare commits
3272 Commits
1.0.1-a.18
...
window-syn
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f6922ef2ba | ||
![]() |
182c8a4ff7 | ||
![]() |
91f5d58fbc | ||
![]() |
2f6021b0aa | ||
![]() |
8c28dc9e89 | ||
![]() |
54abd673f1 | ||
![]() |
57635ff586 | ||
![]() |
458f502184 | ||
![]() |
3301ee5572 | ||
![]() |
236b5dc5c7 | ||
![]() |
7a4cdaa45c | ||
![]() |
4420d0df8c | ||
![]() |
432ae29bcd | ||
![]() |
3d472de5ac | ||
![]() |
5e942de8bc | ||
![]() |
41adb92790 | ||
![]() |
3e125fdb91 | ||
![]() |
8aaa7b7322 | ||
![]() |
0f4b48bd4a | ||
![]() |
52a399f0ed | ||
![]() |
ae66e66aa8 | ||
![]() |
ba48b736e0 | ||
![]() |
9baed1ab90 | ||
![]() |
b11f6b84d3 | ||
![]() |
6a05a79824 | ||
![]() |
6a68a28f76 | ||
![]() |
e972fefa8b | ||
![]() |
30639e67df | ||
![]() |
a4b8e2134f | ||
![]() |
7bd39acfdc | ||
![]() |
3a03984db1 | ||
![]() |
7886758127 | ||
![]() |
280500cdf6 | ||
![]() |
982ef2d355 | ||
![]() |
d2e8f00e3f | ||
![]() |
9e4cd6e68b | ||
![]() |
c9171b9972 | ||
![]() |
eedc5b7307 | ||
![]() |
f9452241a3 | ||
![]() |
6e9be15dac | ||
![]() |
07381c9a7a | ||
![]() |
bd4f5cee31 | ||
![]() |
0a8ebf9950 | ||
![]() |
73c5bc61fc | ||
![]() |
7253b8fa9d | ||
![]() |
42ebc081a8 | ||
![]() |
6e5502628e | ||
![]() |
b204671931 | ||
![]() |
d035348896 | ||
![]() |
72433745bc | ||
![]() |
2436ada221 | ||
![]() |
4a5141c15c | ||
![]() |
1015537a91 | ||
![]() |
89cafdaa0b | ||
![]() |
3723517d7d | ||
![]() |
c095bc7604 | ||
![]() |
e312e3fe8d | ||
![]() |
70aeebaf66 | ||
![]() |
f9ca9cc74c | ||
![]() |
d9646f939c | ||
![]() |
8f0292d836 | ||
![]() |
95b137ac13 | ||
![]() |
b1fcaeb97f | ||
![]() |
31def1147a | ||
![]() |
0a80765589 | ||
![]() |
e34a053dd0 | ||
![]() |
5e790efdce | ||
![]() |
005cdf53bd | ||
![]() |
429f74a7c7 | ||
![]() |
1f72765227 | ||
![]() |
91f5e104d2 | ||
![]() |
81e854a89f | ||
![]() |
994741f323 | ||
![]() |
a4ba3340e1 | ||
![]() |
5852b2aaa6 | ||
![]() |
257547acbd | ||
![]() |
a1bfcdb587 | ||
![]() |
ce24d867a2 | ||
![]() |
0979c5dbbc | ||
![]() |
7db203ca77 | ||
![]() |
0a205087a4 | ||
![]() |
ca6d34def5 | ||
![]() |
32485d6e5a | ||
![]() |
5fdeec7139 | ||
![]() |
c61891fe2b | ||
![]() |
fc28c2fb7d | ||
![]() |
c607e1a4b1 | ||
![]() |
a3adc1a33e | ||
![]() |
d2a6e18452 | ||
![]() |
59ad9b76df | ||
![]() |
55891213b4 | ||
![]() |
6e57e08280 | ||
![]() |
a6ea91af40 | ||
![]() |
c673db42aa | ||
![]() |
cc7deaa5a3 | ||
![]() |
5feef90401 | ||
![]() |
61aeceb467 | ||
![]() |
1e8fad2fda | ||
![]() |
067de29750 | ||
![]() |
61c4c601c0 | ||
![]() |
1ea533da24 | ||
![]() |
bfbf5cce61 | ||
![]() |
e8aa5c93ee | ||
![]() |
7cbfad9369 | ||
![]() |
d2510f49ca | ||
![]() |
4abac03238 | ||
![]() |
f2093e2153 | ||
![]() |
335ff49ef3 | ||
![]() |
06090d7236 | ||
![]() |
a65bac9b8a | ||
![]() |
7981b42c23 | ||
![]() |
5afc6cd7d0 | ||
![]() |
9dff069011 | ||
![]() |
b29a2bf7d8 | ||
![]() |
6b5131bbde | ||
![]() |
777bbfeef1 | ||
![]() |
af73ce2f9c | ||
![]() |
a4c47565be | ||
![]() |
c1e2c7ec36 | ||
![]() |
21e82c2379 | ||
![]() |
bb9be72863 | ||
![]() |
4a87be372d | ||
![]() |
d2e0a38bf3 | ||
![]() |
30a322f481 | ||
![]() |
6b2f1edf0d | ||
![]() |
850ea775de | ||
![]() |
e7a9aba3c0 | ||
![]() |
04105c3c5e | ||
![]() |
1e59e5d712 | ||
![]() |
eb163dee88 | ||
![]() |
d8196c58ab | ||
![]() |
d216114364 | ||
![]() |
f95f245644 | ||
![]() |
6e161ac83e | ||
![]() |
e06402f468 | ||
![]() |
25087e3cbf | ||
![]() |
b7b868e6ba | ||
![]() |
bc100ae8e2 | ||
![]() |
c779267486 | ||
![]() |
942606f82b | ||
![]() |
c020106535 | ||
![]() |
bf66df57b1 | ||
![]() |
129b8efb39 | ||
![]() |
ce2311c086 | ||
![]() |
fcaac2ee0c | ||
![]() |
f2fcee9605 | ||
![]() |
8d15c9ef49 | ||
![]() |
c8e58ad525 | ||
![]() |
5dcc6d5f44 | ||
![]() |
8c84901598 | ||
![]() |
aa23cd5c64 | ||
![]() |
4304e19cbb | ||
![]() |
4e2dfd8a13 | ||
![]() |
4a48d11b74 | ||
![]() |
eb94ea5817 | ||
![]() |
a49e918847 | ||
![]() |
4337e5a964 | ||
![]() |
187053c4e8 | ||
![]() |
199da1f824 | ||
![]() |
2d54e9f27f | ||
![]() |
84f962346c | ||
![]() |
bf69ac13b2 | ||
![]() |
3229126f14 | ||
![]() |
7f244453fc | ||
![]() |
489923413f | ||
![]() |
ddf5e8f5eb | ||
![]() |
3bb8686024 | ||
![]() |
e6b1cbd02a | ||
![]() |
f07c1a5f24 | ||
![]() |
2c5a7612f8 | ||
![]() |
daae9ac98e | ||
![]() |
9e6cafa9bd | ||
![]() |
91cedcfc1a | ||
![]() |
303af80dd7 | ||
![]() |
82e0f0609a | ||
![]() |
e1fcb6a985 | ||
![]() |
d439cb88d5 | ||
![]() |
1bf5a2dd9e | ||
![]() |
da252b3d7e | ||
![]() |
9dac7bc98d | ||
![]() |
cbe04c223b | ||
![]() |
2f6a8e8f72 | ||
![]() |
62fb85ded9 | ||
![]() |
d51d698036 | ||
![]() |
e7add92b7c | ||
![]() |
4c542e1867 | ||
![]() |
afe9e7a85c | ||
![]() |
82f30e1820 | ||
![]() |
5f2af48c4e | ||
![]() |
30aab09fe2 | ||
![]() |
4993c217bb | ||
![]() |
db8b994535 | ||
![]() |
7f92d0a75a | ||
![]() |
3fcde9994b | ||
![]() |
44d6eebecc | ||
![]() |
75227b7a42 | ||
![]() |
7afc934919 | ||
![]() |
0937be6d2e | ||
![]() |
81e69b9844 | ||
![]() |
4084ac4763 | ||
![]() |
8bee4eaa7c | ||
![]() |
e66bf0ef57 | ||
![]() |
591dce5921 | ||
![]() |
7cf96dde23 | ||
![]() |
8908d3aa50 | ||
![]() |
7ec4e86160 | ||
![]() |
203d1ba701 | ||
![]() |
96a307bafa | ||
![]() |
f4cec5f210 | ||
![]() |
a7874ca46e | ||
![]() |
1bca252979 | ||
![]() |
3ba805802a | ||
![]() |
75a04bb354 | ||
![]() |
883f406db6 | ||
![]() |
81ea7d06d4 | ||
![]() |
0edf37a239 | ||
![]() |
1dce853e2a | ||
![]() |
d6ca32fe3a | ||
![]() |
b02374bdc1 | ||
![]() |
c8d26461e6 | ||
![]() |
36fe38c145 | ||
![]() |
db0880ea8b | ||
![]() |
20392e8e24 | ||
![]() |
e6d6ca53df | ||
![]() |
2abd1cb321 | ||
![]() |
ff5c0543d5 | ||
![]() |
1e6067d100 | ||
![]() |
55100f7bc3 | ||
![]() |
d21e6c4274 | ||
![]() |
6641152100 | ||
![]() |
d9ccd5c6a2 | ||
![]() |
daf94bd66d | ||
![]() |
b8f73482da | ||
![]() |
fa36ab417b | ||
![]() |
bdab8a62a3 | ||
![]() |
dfd2830ceb | ||
![]() |
36a84261b3 | ||
![]() |
e5d4e91e61 | ||
![]() |
5787c7d664 | ||
![]() |
1518ea71f4 | ||
![]() |
e235ac6fd6 | ||
![]() |
69c8e6a0fd | ||
![]() |
e395e0fa1b | ||
![]() |
19fbad748c | ||
![]() |
c9023353f6 | ||
![]() |
921afb04a4 | ||
![]() |
578ca15268 | ||
![]() |
5f61efa26b | ||
![]() |
92607e2eee | ||
![]() |
78b1088b41 | ||
![]() |
51f22680f4 | ||
![]() |
5891063bff | ||
![]() |
2ad591f784 | ||
![]() |
6b12eed38b | ||
![]() |
d0df3d5a52 | ||
![]() |
ca289363c3 | ||
![]() |
999519f85c | ||
![]() |
21bc9da02e | ||
![]() |
e05cdddab0 | ||
![]() |
a07128fc2c | ||
![]() |
e69979f0d6 | ||
![]() |
ee1a5d0ac4 | ||
![]() |
8a60cbd61f | ||
![]() |
17f6291a1d | ||
![]() |
71598f7dcc | ||
![]() |
7e63561092 | ||
![]() |
54e1ffa91d | ||
![]() |
a82b05bc75 | ||
![]() |
f862e184a6 | ||
![]() |
5c19b0b58d | ||
![]() |
2fa2865f29 | ||
![]() |
9e04afc7a3 | ||
![]() |
5ad1c6c323 | ||
![]() |
3f4595f86e | ||
![]() |
66fcc9e1e2 | ||
![]() |
9e9d4f294a | ||
![]() |
d01d804e89 | ||
![]() |
eb843d94a5 | ||
![]() |
969bcd0a48 | ||
![]() |
982e194a98 | ||
![]() |
f8be01fe59 | ||
![]() |
c88bf27f3d | ||
![]() |
a283824122 | ||
![]() |
def1008e2d | ||
![]() |
ff0a25b704 | ||
![]() |
f456994b61 | ||
![]() |
9988994129 | ||
![]() |
98cf09f4e2 | ||
![]() |
6941ec099c | ||
![]() |
0c99d9b5ef | ||
![]() |
0fe812f218 | ||
![]() |
60acb71aa6 | ||
![]() |
b28bc42504 | ||
![]() |
bf859a826e | ||
![]() |
70cc16ea8e | ||
![]() |
9080fae09d | ||
![]() |
c4e7f4e442 | ||
![]() |
c5ce3af9fe | ||
![]() |
f7fe355369 | ||
![]() |
acde67213d | ||
![]() |
28a0f69a52 | ||
![]() |
9f9d2ee546 | ||
![]() |
aabde4fb05 | ||
![]() |
1f4f88ac13 | ||
![]() |
8694d6a67b | ||
![]() |
4dc0f5df8e | ||
![]() |
1c09d40851 | ||
![]() |
c9598e1612 | ||
![]() |
1c37c15fc2 | ||
![]() |
e068428601 | ||
![]() |
1a3a8a09e1 | ||
![]() |
f80fe998e8 | ||
![]() |
974680e1a4 | ||
![]() |
3b8202f207 | ||
![]() |
f6da5047c2 | ||
![]() |
27b03a7675 | ||
![]() |
edf7c36145 | ||
![]() |
4f049111b1 | ||
![]() |
0df0d16fa4 | ||
![]() |
0735388cb1 | ||
![]() |
87088d016c | ||
![]() |
a06b7b6b38 | ||
![]() |
c84d500bd5 | ||
![]() |
1ad8f0f5ff | ||
![]() |
4ea3532fe1 | ||
![]() |
a1e21546c8 | ||
![]() |
f680b4592b | ||
![]() |
b0ab43d19d | ||
![]() |
60820e413d | ||
![]() |
9e338aabbc | ||
![]() |
6a8afc4282 | ||
![]() |
54702d9092 | ||
![]() |
120f15d645 | ||
![]() |
6b306c98dc | ||
![]() |
3da5eda339 | ||
![]() |
2a701bd2b9 | ||
![]() |
ed5740c24d | ||
![]() |
d96d6831a2 | ||
![]() |
5930552cdc | ||
![]() |
84183910b7 | ||
![]() |
48df87da98 | ||
![]() |
51d4396088 | ||
![]() |
78cd4ed095 | ||
![]() |
69f60b7066 | ||
![]() |
f0169277a0 | ||
![]() |
ffdae9a05b | ||
![]() |
47c5cc7ccb | ||
![]() |
c664a65100 | ||
![]() |
65c72a7871 | ||
![]() |
76166c4aa3 | ||
![]() |
ee20de3c3d | ||
![]() |
3fca0657b5 | ||
![]() |
7d7e57d6ee | ||
![]() |
08947fd4a1 | ||
![]() |
12ae2daeba | ||
![]() |
fe77048619 | ||
![]() |
9971dbd0ad | ||
![]() |
b735567504 | ||
![]() |
ba7eff60ef | ||
![]() |
400598a0b1 | ||
![]() |
dc6f46695a | ||
![]() |
48f036d6a0 | ||
![]() |
3a317daa87 | ||
![]() |
8e67690f82 | ||
![]() |
1594c5c08f | ||
![]() |
fd4c96e4b3 | ||
![]() |
37bd317391 | ||
![]() |
2c53b4a8c5 | ||
![]() |
5040df2416 | ||
![]() |
8bc4c97215 | ||
![]() |
a435d4ec18 | ||
![]() |
bed6fa7eca | ||
![]() |
dcd032856b | ||
![]() |
bf95bc7078 | ||
![]() |
ab2a982bf0 | ||
![]() |
5cd1f77e2d | ||
![]() |
a17a1da3b8 | ||
![]() |
ecbce38f52 | ||
![]() |
0693bb7a61 | ||
![]() |
7f28047f82 | ||
![]() |
d1fffc59cf | ||
![]() |
8e799a678f | ||
![]() |
a3f1733fd4 | ||
![]() |
ea23c3f63d | ||
![]() |
7d51ae1f07 | ||
![]() |
469604dd28 | ||
![]() |
3f77bc972b | ||
![]() |
59263eae9e | ||
![]() |
251967435d | ||
![]() |
a93e50cc54 | ||
![]() |
54bdabbf25 | ||
![]() |
5b7445fe31 | ||
![]() |
09ee6f2097 | ||
![]() |
f240fabe77 | ||
![]() |
bf6e493f89 | ||
![]() |
75a3b82d2c | ||
![]() |
9c8b442a46 | ||
![]() |
1f3d8b492b | ||
![]() |
5013533ad8 | ||
![]() |
adc4b956dd | ||
![]() |
219d1989d9 | ||
![]() |
fa7f986319 | ||
![]() |
ce75bc152a | ||
![]() |
289e84b75d | ||
![]() |
4da5a40419 | ||
![]() |
7bf0b42afd | ||
![]() |
5488b1d62e | ||
![]() |
ef22f08115 | ||
![]() |
e8c43f5979 | ||
![]() |
e9bbbaf446 | ||
![]() |
b932558ad6 | ||
![]() |
376c64c892 | ||
![]() |
548ed6e0f5 | ||
![]() |
df916f1e4a | ||
![]() |
847aef5b02 | ||
![]() |
17654139ba | ||
![]() |
e1974d9f81 | ||
![]() |
fcff502d1a | ||
![]() |
0e030dcb08 | ||
![]() |
aa4e385b6b | ||
![]() |
c9488c0384 | ||
![]() |
bcf879b801 | ||
![]() |
84072192b9 | ||
![]() |
d786c6927f | ||
![]() |
2a0113408c | ||
![]() |
967d0dd730 | ||
![]() |
af36549c7e | ||
![]() |
6e2ce89d21 | ||
![]() |
2d5fed3cd9 | ||
![]() |
ba4eef0db9 | ||
![]() |
872f7bdcbe | ||
![]() |
8f6ca03240 | ||
![]() |
35245078c9 | ||
![]() |
fd8a55c57c | ||
![]() |
8fce658dc1 | ||
![]() |
df963fc035 | ||
![]() |
ffab4a8c02 | ||
![]() |
ebd1910bb8 | ||
![]() |
10592ed243 | ||
![]() |
3da1da968e | ||
![]() |
bb2196900b | ||
![]() |
8ef4460f00 | ||
![]() |
a1bd202b51 | ||
![]() |
3faf5cd404 | ||
![]() |
d35abc991e | ||
![]() |
7a29340efc | ||
![]() |
cf6a346749 | ||
![]() |
9f047b7dcf | ||
![]() |
7a50336908 | ||
![]() |
89efc6cb0a | ||
![]() |
5b3b72b9aa | ||
![]() |
a6d749a9c8 | ||
![]() |
a570a266e5 | ||
![]() |
0f5f14defe | ||
![]() |
ab9a752286 | ||
![]() |
8f06bf21b0 | ||
![]() |
eaa099f9cc | ||
![]() |
0642ceba40 | ||
![]() |
0869fa55bb | ||
![]() |
80b8f7b4d8 | ||
![]() |
7c18b1d921 | ||
![]() |
eec99dc76b | ||
![]() |
6663a47d4a | ||
![]() |
c654c3f5de | ||
![]() |
5e48064497 | ||
![]() |
9c8aba3dcd | ||
![]() |
c9fe95c00c | ||
![]() |
9bfa7b01b5 | ||
![]() |
bbf646439a | ||
![]() |
a710d5949e | ||
![]() |
4abb3d2249 | ||
![]() |
6cdc640977 | ||
![]() |
aa662910b2 | ||
![]() |
0e3faf45b1 | ||
![]() |
8b25b0bbf3 | ||
![]() |
dad9475005 | ||
![]() |
00d3ba11d2 | ||
![]() |
c7333caf7d | ||
![]() |
0630b65713 | ||
![]() |
69f9b05cbc | ||
![]() |
74f6d1a85e | ||
![]() |
e0bf7d011b | ||
![]() |
12011c7208 | ||
![]() |
280f0ca27f | ||
![]() |
6ec0af3182 | ||
![]() |
e99c40bc06 | ||
![]() |
e181381bd3 | ||
![]() |
6fa0e814de | ||
![]() |
68191d2b47 | ||
![]() |
81f7587958 | ||
![]() |
d5e2acfd5b | ||
![]() |
663243264b | ||
![]() |
03ca00748c | ||
![]() |
cbb1a4bc44 | ||
![]() |
21f3ab23d3 | ||
![]() |
18944d5ed8 | ||
![]() |
5c6e5f7361 | ||
![]() |
bd72aebd98 | ||
![]() |
0278aea4f7 | ||
![]() |
3c01004641 | ||
![]() |
b8213569e5 | ||
![]() |
4d27f9d741 | ||
![]() |
3b56abf090 | ||
![]() |
590ba6de1b | ||
![]() |
4aa215e091 | ||
![]() |
de175bff11 | ||
![]() |
a6bc8d7105 | ||
![]() |
e48e7caef1 | ||
![]() |
015cdad2df | ||
![]() |
ef6cf5fae1 | ||
![]() |
797152da89 | ||
![]() |
316ff45859 | ||
![]() |
e0ac9ba424 | ||
![]() |
09ca430b88 | ||
![]() |
dda1dab6f3 | ||
![]() |
fbf411c096 | ||
![]() |
a3de3e221c | ||
![]() |
4b0c6f2ca5 | ||
![]() |
c32dc7ecd2 | ||
![]() |
d6e14ca88c | ||
![]() |
ebfc885745 | ||
![]() |
89d7b29b12 | ||
![]() |
6f5d20fd49 | ||
![]() |
15bd0b2675 | ||
![]() |
9132019cb3 | ||
![]() |
a87cbfd7a3 | ||
![]() |
d2c6c8b734 | ||
![]() |
6c5be98173 | ||
![]() |
d51838caf9 | ||
![]() |
a61dd0ab87 | ||
![]() |
d15b1f3c1e | ||
![]() |
40d38b3961 | ||
![]() |
addc318f29 | ||
![]() |
ad124c9d95 | ||
![]() |
4d48395c19 | ||
![]() |
9eb0aa0de4 | ||
![]() |
452b7e0e54 | ||
![]() |
e10a16bc0d | ||
![]() |
b26da26192 | ||
![]() |
be55a26a94 | ||
![]() |
22d4b22c53 | ||
![]() |
00a86df321 | ||
![]() |
b03cdba607 | ||
![]() |
cce90e6ddc | ||
![]() |
b6fc0e4db7 | ||
![]() |
50ed1f0a64 | ||
![]() |
f40b780b95 | ||
![]() |
0f37364586 | ||
![]() |
8cfff0e0bd | ||
![]() |
e61963454c | ||
![]() |
eac698d846 | ||
![]() |
b536f98d94 | ||
![]() |
469f94bddf | ||
![]() |
7af0c64c30 | ||
![]() |
8e6808ea61 | ||
![]() |
153c0e2fc5 | ||
![]() |
b18e946869 | ||
![]() |
e3a341c88d | ||
![]() |
7671266633 | ||
![]() |
1e1f02c764 | ||
![]() |
d3ec41d73f | ||
![]() |
9982b1af34 | ||
![]() |
133cce8bf8 | ||
![]() |
bb78fc165b | ||
![]() |
adfc235865 | ||
![]() |
0392d60352 | ||
![]() |
53ea662ef7 | ||
![]() |
7a846fa458 | ||
![]() |
273d7ce5d5 | ||
![]() |
c378bf3842 | ||
![]() |
e4de07d773 | ||
![]() |
6dfb05e242 | ||
![]() |
3e9d98233c | ||
![]() |
8536634fa4 | ||
![]() |
23b17b2635 | ||
![]() |
afcf49b25d | ||
![]() |
c54ad93db6 | ||
![]() |
8d99a97a9e | ||
![]() |
66003832b2 | ||
![]() |
32b7af5834 | ||
![]() |
b4f61e48de | ||
![]() |
97e76a9cf2 | ||
![]() |
52bfac98be | ||
![]() |
0ebe4b4f0a | ||
![]() |
1561525d47 | ||
![]() |
d9c9e74cc8 | ||
![]() |
e3193c54f4 | ||
![]() |
90b0849308 | ||
![]() |
01e3cc1374 | ||
![]() |
e5294908ec | ||
![]() |
3ed15335fe | ||
![]() |
094fbb4ec8 | ||
![]() |
190f1f0cb5 | ||
![]() |
d908700a9c | ||
![]() |
b669f81926 | ||
![]() |
76c22cc896 | ||
![]() |
d0d78d2953 | ||
![]() |
8b5e26759f | ||
![]() |
e4eb6d6fdd | ||
![]() |
1a0ce0df7c | ||
![]() |
c95f0fce88 | ||
![]() |
2abd23b344 | ||
![]() |
ccb1bc521c | ||
![]() |
26163c62da | ||
![]() |
8818d45d05 | ||
![]() |
46941fe25a | ||
![]() |
44ffc842d3 | ||
![]() |
4641b8b590 | ||
![]() |
148a5eebc2 | ||
![]() |
523c1fadbc | ||
![]() |
820652bd5e | ||
![]() |
246e3b25a4 | ||
![]() |
fe0e5a9101 | ||
![]() |
d9a6bb5b2d | ||
![]() |
c9f632c1b8 | ||
![]() |
ab69ab8f80 | ||
![]() |
297a95986c | ||
![]() |
7c1bdbfa68 | ||
![]() |
e712e8204d | ||
![]() |
8e28e1a630 | ||
![]() |
6d1742761c | ||
![]() |
1c84a32a3c | ||
![]() |
b07824489b | ||
![]() |
619a8d39be | ||
![]() |
9b8195d666 | ||
![]() |
22d04ad729 | ||
![]() |
bac3e38318 | ||
![]() |
1d8e0fc3d7 | ||
![]() |
086d1633df | ||
![]() |
b260942e22 | ||
![]() |
d7bf8b24fd | ||
![]() |
0ded78eb06 | ||
![]() |
c2d484a725 | ||
![]() |
7ca3a9e377 | ||
![]() |
2bd548fe41 | ||
![]() |
d9d3076e2e | ||
![]() |
b8254fdd36 | ||
![]() |
562274a161 | ||
![]() |
19f96241e5 | ||
![]() |
d735a1fa91 | ||
![]() |
40baf2627c | ||
![]() |
5880636b3a | ||
![]() |
531f569f3a | ||
![]() |
00fcd74552 | ||
![]() |
f594a0b5c0 | ||
![]() |
94779133ec | ||
![]() |
a2b1b38e0c | ||
![]() |
cd3823f180 | ||
![]() |
8451a71af7 | ||
![]() |
455a2c005b | ||
![]() |
4ad29e0ca5 | ||
![]() |
52b19fc137 | ||
![]() |
7958417f96 | ||
![]() |
744618ac25 | ||
![]() |
07296f19a6 | ||
![]() |
db271db087 | ||
![]() |
d30a24e768 | ||
![]() |
2b359ea451 | ||
![]() |
8af3faea16 | ||
![]() |
0c5716fb81 | ||
![]() |
d19a484cb0 | ||
![]() |
38bf9bebc8 | ||
![]() |
d79b89f79b | ||
![]() |
7855d657fd | ||
![]() |
67a52ae02c | ||
![]() |
4b14c1e2f8 | ||
![]() |
fc908f9d4a | ||
![]() |
77bc3ced5d | ||
![]() |
34dc835631 | ||
![]() |
81b279be5f | ||
![]() |
828c7bea19 | ||
![]() |
b4a49636d7 | ||
![]() |
1caa6d9aa5 | ||
![]() |
ecc6df3301 | ||
![]() |
0310e89c39 | ||
![]() |
252af87d9b | ||
![]() |
6732a69c2b | ||
![]() |
3868f8e30f | ||
![]() |
937408f3f6 | ||
![]() |
e53a95e297 | ||
![]() |
b74153290b | ||
![]() |
0021c3522f | ||
![]() |
367ad74fba | ||
![]() |
0abf17cb6b | ||
![]() |
be76e751e7 | ||
![]() |
f8a893e6de | ||
![]() |
89dfc86bfb | ||
![]() |
bc894f8beb | ||
![]() |
20120ecf27 | ||
![]() |
a9c344d385 | ||
![]() |
3cbfae7a8f | ||
![]() |
90876532b9 | ||
![]() |
641d4d0f87 | ||
![]() |
7c12ad72b8 | ||
![]() |
66e0dde1ed | ||
![]() |
5a4877a141 | ||
![]() |
f9b0f8c436 | ||
![]() |
6552ec5f02 | ||
![]() |
337b1aec53 | ||
![]() |
33fff9e19b | ||
![]() |
2cdaf4850d | ||
![]() |
561da4b6ef | ||
![]() |
3a8767ea5f | ||
![]() |
4947b4c9a3 | ||
![]() |
0f140b706e | ||
![]() |
b4812e8182 | ||
![]() |
7d94cad876 | ||
![]() |
866e6987a2 | ||
![]() |
524f34a461 | ||
![]() |
949d93d546 | ||
![]() |
bd638022df | ||
![]() |
26e6d704f5 | ||
![]() |
1be8b20b64 | ||
![]() |
c8150ccdcc | ||
![]() |
77bac52b07 | ||
![]() |
3566289cb5 | ||
![]() |
0b34cc3033 | ||
![]() |
fdb71c6b0e | ||
![]() |
ffea12305d | ||
![]() |
e90f20e1d4 | ||
![]() |
f58dbd71b6 | ||
![]() |
b4c7a64631 | ||
![]() |
e496655953 | ||
![]() |
fea0e9b864 | ||
![]() |
7a7fb01928 | ||
![]() |
d4575841df | ||
![]() |
d7e634fcfd | ||
![]() |
b1e3df783d | ||
![]() |
80dfcf5eaa | ||
![]() |
c0d66ee649 | ||
![]() |
93e8f6bbd6 | ||
![]() |
cdbdaac913 | ||
![]() |
9bec7a88fe | ||
![]() |
50342e945d | ||
![]() |
c087493f38 | ||
![]() |
df3c554f27 | ||
![]() |
e81994a748 | ||
![]() |
0d1d75588d | ||
![]() |
5ddedbbd50 | ||
![]() |
fcc823c33a | ||
![]() |
1a7f9d9ee0 | ||
![]() |
1a2b527070 | ||
![]() |
39a357fa57 | ||
![]() |
d2c50df0ab | ||
![]() |
5dc30c44ff | ||
![]() |
01d705a3b5 | ||
![]() |
fff86fd068 | ||
![]() |
0fb9b51cc9 | ||
![]() |
bda91cd9d5 | ||
![]() |
0343430611 | ||
![]() |
1df7da7836 | ||
![]() |
dc018561a0 | ||
![]() |
520b41215c | ||
![]() |
3537680e45 | ||
![]() |
d236035b72 | ||
![]() |
e2e742aba2 | ||
![]() |
3d8fc203f9 | ||
![]() |
7b99f227cd | ||
![]() |
1f68a45417 | ||
![]() |
cc1619ab5d | ||
![]() |
5c30c83341 | ||
![]() |
d788ac4ad6 | ||
![]() |
826802df21 | ||
![]() |
3b4f96ab2f | ||
![]() |
5a59eb6902 | ||
![]() |
64293af6f7 | ||
![]() |
8afd08a3d9 | ||
![]() |
6a21a6fdb1 | ||
![]() |
3e53787a62 | ||
![]() |
9823353d8b | ||
![]() |
d189221f10 | ||
![]() |
271fa03cfc | ||
![]() |
1fc2299801 | ||
![]() |
7df278f7ed | ||
![]() |
2f68f77f87 | ||
![]() |
49a3974b34 | ||
![]() |
7a00f3c67c | ||
![]() |
e079732686 | ||
![]() |
71f2680eef | ||
![]() |
808a376c65 | ||
![]() |
eff7cfc5fe | ||
![]() |
bbb6ba4078 | ||
![]() |
c10131aca8 | ||
![]() |
49159a6d5c | ||
![]() |
d80ba6b058 | ||
![]() |
f2e188a86c | ||
![]() |
2f03446c37 | ||
![]() |
039b7ca85c | ||
![]() |
507b27dbda | ||
![]() |
78f54895e2 | ||
![]() |
4ca172d40f | ||
![]() |
81774ad352 | ||
![]() |
ad32b31904 | ||
![]() |
414bafde9c | ||
![]() |
be1d8ec408 | ||
![]() |
7f4effe4b6 | ||
![]() |
7ca3396c8b | ||
![]() |
853c204746 | ||
![]() |
a22c5085d9 | ||
![]() |
1021a78f46 | ||
![]() |
637747ab53 | ||
![]() |
15b8385e49 | ||
![]() |
27d3b903d3 | ||
![]() |
70b9f66f4c | ||
![]() |
019779e425 | ||
![]() |
951ff28688 | ||
![]() |
d394702606 | ||
![]() |
6f88c5d2d1 | ||
![]() |
53332937c2 | ||
![]() |
a79678a0cb | ||
![]() |
f16b0526af | ||
![]() |
808e186dae | ||
![]() |
0a39cdef7c | ||
![]() |
8a042cb110 | ||
![]() |
2942ab3c08 | ||
![]() |
1d269e9203 | ||
![]() |
def0ed7a52 | ||
![]() |
9d7c33228f | ||
![]() |
54d5a747ba | ||
![]() |
3b4c2f6d76 | ||
![]() |
7968b79039 | ||
![]() |
4c02f76187 | ||
![]() |
ec90027c5e | ||
![]() |
0588dbfd64 | ||
![]() |
293c6b1de2 | ||
![]() |
3f2dd0a60c | ||
![]() |
89404cc649 | ||
![]() |
2ade4030c8 | ||
![]() |
7c81063b90 | ||
![]() |
786903d57c | ||
![]() |
395cc0a19d | ||
![]() |
cc2c9044f3 | ||
![]() |
d816bca7e0 | ||
![]() |
87bcd7ccfb | ||
![]() |
a9f136ae8a | ||
![]() |
ef3b61ded7 | ||
![]() |
c9d8623e4a | ||
![]() |
13923b84f2 | ||
![]() |
05df28ae72 | ||
![]() |
f75e74b678 | ||
![]() |
123cbfa644 | ||
![]() |
5cc13cf77f | ||
![]() |
56275abbaf | ||
![]() |
6ccbdcbdfa | ||
![]() |
ebbec7f0b2 | ||
![]() |
a7d0719877 | ||
![]() |
1831e3e2fa | ||
![]() |
fc2c119b94 | ||
![]() |
163b276f7e | ||
![]() |
72ab38b9af | ||
![]() |
991437ab2f | ||
![]() |
57679238de | ||
![]() |
d800c20905 | ||
![]() |
2550b2fe41 | ||
![]() |
8a72d253aa | ||
![]() |
71558dca71 | ||
![]() |
6dbc5bf6db | ||
![]() |
98448b9572 | ||
![]() |
79bd7794a5 | ||
![]() |
3ab70ff9a8 | ||
![]() |
e1894d5fb4 | ||
![]() |
58646d1d08 | ||
![]() |
2132f44812 | ||
![]() |
62f56d7949 | ||
![]() |
33ac98c2b3 | ||
![]() |
8f962816ea | ||
![]() |
e95363adc8 | ||
![]() |
6250e9dfb2 | ||
![]() |
0f57148418 | ||
![]() |
9bd02871e2 | ||
![]() |
f1fbe78f93 | ||
![]() |
02c429993c | ||
![]() |
beab17074d | ||
![]() |
f608d6a8ce | ||
![]() |
16c2ff8449 | ||
![]() |
5c61ca688f | ||
![]() |
095a5f38f3 | ||
![]() |
696757003b | ||
![]() |
9300004cbd | ||
![]() |
9c13275aca | ||
![]() |
5c6b4736be | ||
![]() |
c566cc32fe | ||
![]() |
8dc0e6b4bf | ||
![]() |
f8f3f8abcb | ||
![]() |
22414da6a8 | ||
![]() |
150c94c0e9 | ||
![]() |
d845853643 | ||
![]() |
ffbf4a703b | ||
![]() |
649378b695 | ||
![]() |
8aa964bc78 | ||
![]() |
6c89cd4a26 | ||
![]() |
2ba4ffb4f8 | ||
![]() |
38753ab8b0 | ||
![]() |
9da8a28345 | ||
![]() |
a4e79d4738 | ||
![]() |
44cff2b498 | ||
![]() |
5fe326aad8 | ||
![]() |
b4a5c1504c | ||
![]() |
270254c760 | ||
![]() |
a71f24a1fa | ||
![]() |
90bce607b0 | ||
![]() |
1540d6b411 | ||
![]() |
b51af13bb0 | ||
![]() |
3eaeb4a0a1 | ||
![]() |
aa6a03b5f9 | ||
![]() |
3ca5b24e25 | ||
![]() |
b074bf0690 | ||
![]() |
3130c13c30 | ||
![]() |
f0b60391a8 | ||
![]() |
a4086122aa | ||
![]() |
fe9ee85688 | ||
![]() |
2cbe662019 | ||
![]() |
be54733b13 | ||
![]() |
053bc28e68 | ||
![]() |
f38bea67ab | ||
![]() |
8eec660d03 | ||
![]() |
79e731e89c | ||
![]() |
4f49ff3290 | ||
![]() |
0dac5522fe | ||
![]() |
a35ef0e735 | ||
![]() |
c5515fc3ae | ||
![]() |
2d40259c6e | ||
![]() |
388e69cc38 | ||
![]() |
d2df699ced | ||
![]() |
be244cfe5a | ||
![]() |
6ccf5053cd | ||
![]() |
0f71de410b | ||
![]() |
6b8f3b750e | ||
![]() |
eebee9fb97 | ||
![]() |
21e0496d6f | ||
![]() |
9abc7f1a82 | ||
![]() |
fa8354b133 | ||
![]() |
b51c205538 | ||
![]() |
73842430ea | ||
![]() |
2b6f2980ce | ||
![]() |
3d9a40beb9 | ||
![]() |
2365fa9fbc | ||
![]() |
0890180889 | ||
![]() |
6b6339867d | ||
![]() |
69405bda0f | ||
![]() |
0f76a4814d | ||
![]() |
81a02834de | ||
![]() |
fa4315808b | ||
![]() |
8acdb00570 | ||
![]() |
d4a45ca006 | ||
![]() |
d5225be720 | ||
![]() |
8f7302f0ee | ||
![]() |
446d198eca | ||
![]() |
38111960f8 | ||
![]() |
b83a9d94c6 | ||
![]() |
a536c708ca | ||
![]() |
53de112eb8 | ||
![]() |
6662e0fa09 | ||
![]() |
e90f188c63 | ||
![]() |
e039ee1692 | ||
![]() |
68fc9fb635 | ||
![]() |
940a2ebc3f | ||
![]() |
7f3d9fd9e7 | ||
![]() |
5f552bb749 | ||
![]() |
a233c6be8c | ||
![]() |
0f3120e831 | ||
![]() |
9c93a21421 | ||
![]() |
8201b175bb | ||
![]() |
78ee43347e | ||
![]() |
7b23e4de11 | ||
![]() |
7a7bd01717 | ||
![]() |
7bb113d1f0 | ||
![]() |
db5d318c74 | ||
![]() |
139e7a8b25 | ||
![]() |
390afc7e63 | ||
![]() |
8fcf251916 | ||
![]() |
cad9a299c3 | ||
![]() |
3e53c9e338 | ||
![]() |
8386b1b3e8 | ||
![]() |
6c44ccf319 | ||
![]() |
f0b96a1538 | ||
![]() |
b490d91572 | ||
![]() |
48bf0504e8 | ||
![]() |
d15ee91ea0 | ||
![]() |
af6fd8796d | ||
![]() |
b7a5a878d6 | ||
![]() |
68100bda86 | ||
![]() |
a7d652ddca | ||
![]() |
b8f54de530 | ||
![]() |
8f86e40b5d | ||
![]() |
aced6e170f | ||
![]() |
988b7caf3d | ||
![]() |
abb71a0feb | ||
![]() |
26e1a1c58d | ||
![]() |
4b1ff82756 | ||
![]() |
f668a5c8f9 | ||
![]() |
7f1a5eea20 | ||
![]() |
b24f8e27fa | ||
![]() |
aae3ed0872 | ||
![]() |
6de445eaa1 | ||
![]() |
18b4925dd4 | ||
![]() |
7dc4bb728b | ||
![]() |
61efc6b834 | ||
![]() |
4cc687e2cd | ||
![]() |
ff1795fe96 | ||
![]() |
92e49efdc6 | ||
![]() |
f7a19e8b14 | ||
![]() |
1fa8d217f9 | ||
![]() |
09ec1ad864 | ||
![]() |
0eb1c7d419 | ||
![]() |
9824e18dbf | ||
![]() |
b95306348d | ||
![]() |
de43cc6cd5 | ||
![]() |
de435f8e7b | ||
![]() |
f2e006fde9 | ||
![]() |
5f7c3a41f1 | ||
![]() |
3fbe8c0b6c | ||
![]() |
3933f77968 | ||
![]() |
68fc8cd6ed | ||
![]() |
47fbae7e0d | ||
![]() |
82a4ffdc12 | ||
![]() |
6386f178d4 | ||
![]() |
102d226269 | ||
![]() |
b399247652 | ||
![]() |
263db42602 | ||
![]() |
8136387a75 | ||
![]() |
e65991aa03 | ||
![]() |
a7846a64d0 | ||
![]() |
5dfc6a663f | ||
![]() |
0c45a24f48 | ||
![]() |
762d5de441 | ||
![]() |
5bfb55a27d | ||
![]() |
87bb2f38db | ||
![]() |
fb1575d875 | ||
![]() |
c153bef170 | ||
![]() |
2fcf6c80e9 | ||
![]() |
2e6e71e3b6 | ||
![]() |
004b946716 | ||
![]() |
6400722712 | ||
![]() |
d9ec28459e | ||
![]() |
407c1d24af | ||
![]() |
de6d8d1153 | ||
![]() |
3eb10fc05b | ||
![]() |
1ab6f77f95 | ||
![]() |
c1b15b59db | ||
![]() |
3dae5a6d47 | ||
![]() |
ec3e2ab870 | ||
![]() |
a2810d65de | ||
![]() |
1713c04834 | ||
![]() |
dab2646054 | ||
![]() |
03bc0d2f22 | ||
![]() |
ad0485d651 | ||
![]() |
7764c4bdd7 | ||
![]() |
46bbbccdc9 | ||
![]() |
ee28417a4c | ||
![]() |
5332ab9cac | ||
![]() |
746ac1eec7 | ||
![]() |
13c763b0e8 | ||
![]() |
8b67c4fdd1 | ||
![]() |
c3e658d46a | ||
![]() |
5d0419075b | ||
![]() |
ebded1a73b | ||
![]() |
cf879a5c23 | ||
![]() |
99ed27ca61 | ||
![]() |
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 | ||
![]() |
3b482b265b |
5
.dockerignore
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
node_modules
|
||||||
|
.git
|
||||||
|
.DS_Store
|
||||||
|
*.log
|
||||||
|
engine
|
16
.editorconfig
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
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
|
21
.formal-git/components
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
split-view
|
||||||
|
kbs
|
||||||
|
folders
|
||||||
|
workspaces
|
||||||
|
mods
|
||||||
|
tests
|
||||||
|
glance
|
||||||
|
media
|
||||||
|
images
|
||||||
|
vendor
|
||||||
|
tabs
|
||||||
|
compact-mode
|
||||||
|
common
|
||||||
|
fonts
|
||||||
|
welcome
|
||||||
|
scripts
|
||||||
|
workflows
|
||||||
|
winsign
|
||||||
|
flatpak
|
||||||
|
configs
|
||||||
|
l10n
|
1
.formal-git/template
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{type}: {message}, b={bugId}, c={components}
|
7
.gitattributes
vendored
@@ -1 +1,8 @@
|
|||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
*.patch linguist-language=C++
|
*.patch linguist-language=C++
|
||||||
|
*.d.ts linguist-language=TypeScript
|
||||||
|
|
||||||
|
src/zen/tests/*.js linguist-language=Test
|
||||||
|
2
.github/FUNDING.yml
vendored
@@ -1,2 +0,0 @@
|
|||||||
patreon: zen_browser
|
|
||||||
ko_fi: zen_browser
|
|
113
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -4,42 +4,82 @@ body:
|
|||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thank you for filing a bug report.
|
<p align="center">
|
||||||
|
<a href="https://zen-browser.app">
|
||||||
|
<picture>
|
||||||
|
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/zen-browser/desktop/dev/docs/assets/zen-light.svg">
|
||||||
|
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/zen-browser/desktop/dev/docs/assets/zen-dark.svg">
|
||||||
|
<img src="https://raw.githubusercontent.com/zen-browser/desktop/dev/docs/assets/zen-light.svg" alt="Zen Logo" width="64" height="64">
|
||||||
|
</picture>
|
||||||
|
<img src="https://raw.githubusercontent.com/zen-browser/desktop/dev/docs/assets/zen-browser.svg" alt="Zen Browser Text" width="156" height="64">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
## Important
|
<p align="center"><em>Thank you for filing a bug report!</em></p>
|
||||||
- Please search existing issues to avoid creating duplicates.
|
|
||||||
- For enhancement requests, please use GitHub Discussions.
|
> [!IMPORTANT]
|
||||||
- Please fill out the template below to the best of your ability.
|
> - 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
|
- type: checkboxes
|
||||||
id: captchas
|
id: captchas
|
||||||
attributes:
|
attributes:
|
||||||
label: Captchas
|
label: Preliminary Checks
|
||||||
description: Just making sure you did actually read the instructions.
|
description: Please confirm the following before submitting a bug report. This helps us triage and resolve issues more efficiently.
|
||||||
options:
|
options:
|
||||||
- label: I have read the instructions.
|
- label: I have read and understood the important section above.
|
||||||
|
required: true
|
||||||
- label: I have searched existing issues and avoided creating duplicates.
|
- label: I have searched existing issues and avoided creating duplicates.
|
||||||
|
required: true
|
||||||
- label: I am not filing an enhancement request.
|
- label: I am not filing an enhancement request.
|
||||||
|
required: true
|
||||||
|
- label: I have checked that this issue cannot be reproduced on Mozilla Firefox.
|
||||||
|
required: true
|
||||||
|
- label: I have checked that this issue can be reproduced once I removed all my Mods and Custom CSS.
|
||||||
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: what-happened
|
id: what-happened
|
||||||
attributes:
|
attributes:
|
||||||
label: What happened?
|
label: What happened?
|
||||||
description: Also tell us, what did you expect to happen?
|
description: Describe the bug clearly and concisely.
|
||||||
placeholder: Tell us what you see!
|
placeholder: Tell us what you see!
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: checkboxes
|
- type: input
|
||||||
id: firefox
|
id: expected-behavior
|
||||||
attributes:
|
attributes:
|
||||||
label: Reproducible?
|
label: Expected behavior
|
||||||
description: Is this issue reproducible on Firefox?
|
description: Please write a description of what was supposed to happen.
|
||||||
options:
|
validations:
|
||||||
- label: I have checked that this issue cannot be reproduced on Mozilla Firefox.
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: actual-behavior
|
||||||
|
attributes:
|
||||||
|
label: Actual behavior
|
||||||
|
description: Please write a description of what actually happened.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: how-to-reproduce
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: Please Provide numbered steps to reproduce this issue so developers can replicate them easily.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: screenshots
|
||||||
|
attributes:
|
||||||
|
label: Screenshots and videos
|
||||||
|
description: |
|
||||||
|
If applicable, add screenshots or videos to help explain your problem.
|
||||||
- type: input
|
- type: input
|
||||||
id: version
|
id: version
|
||||||
attributes:
|
attributes:
|
||||||
label: Version
|
label: Version
|
||||||
description: What version of our software are you running? Please DO NOT report Classic bugs.
|
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.0
|
placeholder: 1.0.0b
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
@@ -48,15 +88,48 @@ body:
|
|||||||
label: What platform are you seeing the problem on?
|
label: What platform are you seeing the problem on?
|
||||||
multiple: true
|
multiple: true
|
||||||
options:
|
options:
|
||||||
- Linux
|
- Linux (AppImage)
|
||||||
|
- Linux (Flatpak)
|
||||||
|
- Linux (Tarball)
|
||||||
- macOS - aarch64
|
- macOS - aarch64
|
||||||
- macOS - Intel
|
- macOS - Intel
|
||||||
- Windows
|
- Windows - aarch64
|
||||||
|
- Windows - x64
|
||||||
|
- Other
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: component
|
||||||
|
attributes:
|
||||||
|
label: What component is this issue related to?
|
||||||
|
options:
|
||||||
|
- Other
|
||||||
|
- Bookmarks
|
||||||
|
- Compact Mode
|
||||||
|
- Customizable UI / Toolbars
|
||||||
|
- Extensions
|
||||||
|
- Glance
|
||||||
|
- Keyboard Shortcuts
|
||||||
|
- Localization
|
||||||
|
- Media Controler
|
||||||
|
- Mods / Themes
|
||||||
|
- Performance
|
||||||
|
- Privacy
|
||||||
|
- Security
|
||||||
|
- Settings
|
||||||
|
- Split View
|
||||||
|
- Sync
|
||||||
|
- Tab Folders
|
||||||
|
- Tab unloading
|
||||||
|
- Tabs
|
||||||
|
- URL Bar
|
||||||
|
- Workspaces
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: logs
|
id: logs
|
||||||
attributes:
|
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.
|
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
||||||
render: shell
|
render: shell
|
||||||
|
4
.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.
|
||||||
|
58
.github/advanced-issue-labeler.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
policy:
|
||||||
|
- section:
|
||||||
|
- id: [component]
|
||||||
|
label:
|
||||||
|
# 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']
|
594
.github/workflows/build.yml
vendored
@@ -16,11 +16,16 @@ on:
|
|||||||
update_branch:
|
update_branch:
|
||||||
description: 'Update branch with new version'
|
description: 'Update branch with new version'
|
||||||
required: true
|
required: true
|
||||||
default: 'alpha'
|
default: 'release'
|
||||||
type: 'choice'
|
type: 'choice'
|
||||||
options:
|
options:
|
||||||
- 'alpha'
|
- 'release'
|
||||||
- 'twilight'
|
- 'twilight'
|
||||||
|
use-sccache:
|
||||||
|
description: 'Use sccache'
|
||||||
|
required: true
|
||||||
|
type: 'boolean'
|
||||||
|
default: false
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
create_release:
|
create_release:
|
||||||
@@ -36,100 +41,126 @@ on:
|
|||||||
update_branch:
|
update_branch:
|
||||||
description: 'Update branch with new version'
|
description: 'Update branch with new version'
|
||||||
required: true
|
required: true
|
||||||
default: 'alpha'
|
default: 'release'
|
||||||
type: 'string'
|
type: 'string'
|
||||||
|
use-sccache:
|
||||||
|
description: 'Use sccache'
|
||||||
|
required: true
|
||||||
|
type: 'boolean'
|
||||||
|
default: false
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
debug-inputs:
|
buildid:
|
||||||
name: Debug inputs
|
name: Generate build ID
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
buildids: ${{ steps.get.outputs.bid }}
|
||||||
steps:
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
|
- id: get
|
||||||
|
shell: bash -xe {0}
|
||||||
|
run: |
|
||||||
|
bdat=`date +"%Y%m%d%I%M%S"`
|
||||||
|
echo "bid=${bdat}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Debug
|
- name: Debug
|
||||||
run: |
|
run: |
|
||||||
echo "create_release: ${{ inputs.create_release }}"
|
echo "create_release: ${{ inputs.create_release }}"
|
||||||
echo "update_version: ${{ inputs.update_version }}"
|
echo "update_version: ${{ inputs.update_version }}"
|
||||||
|
echo "use sccache: ${{ inputs.use-sccache }}"
|
||||||
echo "update_branch: ${{ inputs.update_branch }}"
|
echo "update_branch: ${{ inputs.update_branch }}"
|
||||||
echo "GITHUB_REPOSITORY: ${{ github.repository }}"
|
echo "GITHUB_REPOSITORY: ${{ github.repository }}"
|
||||||
echo "GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}"
|
echo "GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}"
|
||||||
echo "GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}"
|
|
||||||
echo "GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}"
|
echo "GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
|
||||||
check-build-is-correct:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [debug-inputs]
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Check if correct branch
|
- name: Check if correct branch
|
||||||
|
if: ${{ inputs.create_release }}
|
||||||
run: |
|
run: |
|
||||||
echo "Checking if we are on the correct branch"
|
echo "Checking if we are on the correct branch"
|
||||||
git branch
|
git branch
|
||||||
git status
|
git status
|
||||||
git branch --show-current
|
git branch --show-current
|
||||||
branch="${{ inputs.update_branch }}"
|
branch="${{ inputs.update_branch }}"
|
||||||
if [[ $branch == "alpha" ]]; then
|
if [[ $branch == "twilight" ]]; then
|
||||||
branch="stable"
|
|
||||||
elif [[ $branch == "twilight" ]]; then
|
|
||||||
branch="dev"
|
branch="dev"
|
||||||
|
elif [[ $branch == "release" ]]; then
|
||||||
|
branch="stable"
|
||||||
fi
|
fi
|
||||||
if [[ $(git branch --show-current) != $branch ]]; then
|
if [[ $(git branch --show-current) != $branch ]]; then
|
||||||
echo ">>> Branch mismatch"
|
echo ">>> Branch mismatch"
|
||||||
exit 1
|
# exit 1
|
||||||
else
|
else
|
||||||
echo ">>> Branch matches"
|
echo ">>> Branch matches"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
start-self-host:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
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
|
||||||
|
|
||||||
build-data:
|
build-data:
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
name: Generate build data
|
name: Generate build data
|
||||||
runs-on: ubuntu-latest
|
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||||
needs: check-build-is-correct
|
needs: buildid
|
||||||
outputs:
|
outputs:
|
||||||
build_date: ${{ steps.data.outputs.builddate }}
|
build_date: ${{ steps.data.outputs.builddate }}
|
||||||
version: ${{ steps.data.outputs.version }}
|
version: ${{ steps.data.outputs.version }}
|
||||||
build_time: ${{ steps.data.outputs.buildtime }}
|
build_time: ${{ steps.data.outputs.buildtime }}
|
||||||
steps:
|
steps:
|
||||||
- name: Install Node.js
|
- name: Checkout repository
|
||||||
uses: actions/setup-node@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Setup Node.js
|
||||||
run: npm install -g pnpm
|
uses: useblacksmith/setup-node@v5
|
||||||
|
with:
|
||||||
- name: Get pnpm store directory
|
node-version-file: '.nvmrc'
|
||||||
id: pnpm-cache
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: |
|
||||||
|
npm install
|
||||||
|
|
||||||
- name: Setup Surfer
|
- name: Setup Surfer
|
||||||
run: |
|
run: |
|
||||||
npm i -g @zen-browser/surfer
|
npm i -g @zen-browser/surfer
|
||||||
|
|
||||||
- name: Bump version
|
- name: Bump version
|
||||||
if: ${{ inputs.update_version && inputs.update_branch == 'alpha' }}
|
if: ${{ inputs.update_version && inputs.update_branch == 'release' }}
|
||||||
run: |
|
run: |
|
||||||
pnpm surfer ci --brand ${{ inputs.update_branch }} --bump prerelease
|
npm run surfer -- ci --brand ${{ inputs.update_branch }} --bump prerelease
|
||||||
|
|
||||||
- name: Bump version without new version
|
- name: Bump version without new version
|
||||||
if: ${{ !inputs.update_version || inputs.update_branch == 'twilight' }}
|
if: ${{ !inputs.update_version || inputs.update_branch == 'twilight' }}
|
||||||
run: |
|
run: |
|
||||||
pnpm surfer ci --brand ${{ inputs.update_branch }}
|
npm run surfer -- ci --brand ${{ inputs.update_branch }}
|
||||||
|
|
||||||
- name: Debug
|
- name: Debug
|
||||||
run: |
|
run: |
|
||||||
@@ -145,54 +176,52 @@ jobs:
|
|||||||
echo "version=$(surfer get version | xargs)" >> $GITHUB_OUTPUT
|
echo "version=$(surfer get version | xargs)" >> $GITHUB_OUTPUT
|
||||||
echo "buildtime=$(date +"%H:%M:%S")" >> $GITHUB_OUTPUT
|
echo "buildtime=$(date +"%H:%M:%S")" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
- name: Commit
|
||||||
|
uses: stefanzweifel/git-auto-commit-action@v5
|
||||||
if: ${{ inputs.update_version }}
|
if: ${{ inputs.update_version }}
|
||||||
with:
|
with:
|
||||||
commit_message: 🔖 Update version to ${{ steps.data.outputs.version }}
|
commit_message: 🔖 Update version to ${{ steps.data.outputs.version }}
|
||||||
commit_user_name: Zen Browser Robot
|
commit_user_name: Zen Browser Robot
|
||||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||||
|
|
||||||
|
lint:
|
||||||
|
uses: ./.github/workflows/code-linter.yml
|
||||||
|
needs: [build-data]
|
||||||
|
name: Lint
|
||||||
|
|
||||||
check-release:
|
check-release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||||
needs: [build-data]
|
needs: [build-data, lint]
|
||||||
steps:
|
steps:
|
||||||
- name: Install Node.js
|
- name: Checkout repository
|
||||||
uses: actions/setup-node@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Setup Node.js
|
||||||
run: npm install -g pnpm
|
uses: useblacksmith/setup-node@v5
|
||||||
|
with:
|
||||||
- name: Get pnpm store directory
|
node-version-file: '.nvmrc'
|
||||||
id: pnpm-cache
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: |
|
||||||
|
npm install
|
||||||
|
|
||||||
- name: Setup surfer
|
- name: Setup Surfer
|
||||||
run: |
|
run: |
|
||||||
npm i -g @zen-browser/surfer
|
npm i -g @zen-browser/surfer
|
||||||
|
|
||||||
- name: Activate surfer CLI
|
- name: Activate Surfer CLI
|
||||||
run: |
|
run: |
|
||||||
echo "There's a bug in the surfer CLI, we run this so that surfer sets everything up correctly"
|
npm run surfer -- ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }}
|
||||||
pnpm surfer ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }}
|
|
||||||
|
|
||||||
- name: Check version
|
- name: Check version
|
||||||
run: |
|
run: |
|
||||||
echo "$(pwd)"
|
echo "$(pwd)"
|
||||||
ls .
|
echo $(npm run --silent surfer -- get version | xargs)
|
||||||
echo "version=$(pnpm surfer get version | xargs)" >> $GITHUB_OUTPUT
|
echo "version=$(npm run --silent surfer -- get version | xargs)" >> $GITHUB_OUTPUT
|
||||||
if [[ $(pnpm surfer get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then
|
if [[ $(npm run --silent surfer -- get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then
|
||||||
echo ">>> Version matches"
|
echo ">>> Version matches"
|
||||||
else
|
else
|
||||||
echo ">>> Version mismatch"
|
echo ">>> Version mismatch"
|
||||||
@@ -202,71 +231,66 @@ jobs:
|
|||||||
source:
|
source:
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||||
needs: [build-data, check-release]
|
needs: [build-data, check-release]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Install Node.js
|
- name: Checkout repository
|
||||||
uses: actions/setup-node@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup Node.js
|
||||||
|
uses: useblacksmith/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
|
|
||||||
|
- name: Setup Git
|
||||||
run: |
|
run: |
|
||||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||||
git config --global user.name "mauro-balades"
|
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
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: |
|
||||||
|
npm install
|
||||||
|
|
||||||
- name: Load surfer CI setup
|
- name: Load Surfer CI setup
|
||||||
run: pnpm surfer ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }}
|
run: npm run surfer -- ci --brand ${{ inputs.update_branch }} --display-version ${{ needs.build-data.outputs.version }}
|
||||||
|
|
||||||
- name: Download firefox source and dependancies
|
- name: Download Firefox source and dependencies
|
||||||
run: pnpm surfer download --verbose
|
run: npm run download --verbose
|
||||||
|
|
||||||
- name: Import
|
- name: Import
|
||||||
run: pnpm surfer import --verbose
|
run: npm run import -- --verbose
|
||||||
|
|
||||||
- name: Compress
|
- name: Compress
|
||||||
run: |
|
run: |
|
||||||
cd engine
|
cd engine
|
||||||
# -h is used to dereference symlinks
|
tar --use-compress-program=zstd -hcf ../zen.source.tar.zst *
|
||||||
tar --use-compress-program=zstd -hcf ../zen.source.tar.gz *
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.source.tar.gz
|
retention-days: 5
|
||||||
path: ./zen.source.tar.gz
|
name: zen.source.tar.zst
|
||||||
|
path: ./zen.source.tar.zst
|
||||||
|
|
||||||
windows-step-1:
|
windows-step-1:
|
||||||
name: Windows build step 1 (PGO build)
|
name: Windows build step 1 (PGO build)
|
||||||
uses: ./.github/workflows/windows-release-build.yml
|
uses: ./.github/workflows/windows-release-build.yml
|
||||||
needs: [build-data]
|
needs: [build-data, buildid]
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
with:
|
with:
|
||||||
|
use-sccache: ${{ inputs.use-sccache }}
|
||||||
build-version: ${{ needs.build-data.outputs.version }}
|
build-version: ${{ needs.build-data.outputs.version }}
|
||||||
generate-gpo: true
|
generate-gpo: true
|
||||||
profile-data-path-archive: zen-windows-x86_64-profile-data-and-jarlog.zip
|
profile-data-path-archive: zen-windows-profile-data-and-jarlog.zip
|
||||||
release-branch: ${{ inputs.update_branch }}
|
release-branch: ${{ inputs.update_branch }}
|
||||||
|
MOZ_BUILD_DATE: ${{needs.buildid.outputs.buildids}}
|
||||||
|
|
||||||
windows-step-2:
|
windows-step-2:
|
||||||
name: Windows build step 2 (Generate profile data)
|
name: Windows build step 2 (Generate profile data)
|
||||||
@@ -286,11 +310,13 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
needs: [build-data, windows-step-2]
|
needs: [build-data, windows-step-2, start-self-host, buildid]
|
||||||
with:
|
with:
|
||||||
build-version: ${{ needs.build-data.outputs.version }}
|
build-version: ${{ needs.build-data.outputs.version }}
|
||||||
generate-gpo: false
|
generate-gpo: false
|
||||||
release-branch: ${{ inputs.update_branch }}
|
release-branch: ${{ inputs.update_branch }}
|
||||||
|
MOZ_BUILD_DATE: ${{needs.buildid.outputs.buildids}}
|
||||||
|
use-sccache: ${{ inputs.use-sccache }}
|
||||||
|
|
||||||
linux:
|
linux:
|
||||||
name: Linux build
|
name: Linux build
|
||||||
@@ -298,10 +324,12 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
needs: [build-data]
|
needs: [build-data, start-self-host, buildid]
|
||||||
with:
|
with:
|
||||||
build-version: ${{ needs.build-data.outputs.version }}
|
build-version: ${{ needs.build-data.outputs.version }}
|
||||||
release-branch: ${{ inputs.update_branch }}
|
release-branch: ${{ inputs.update_branch }}
|
||||||
|
MOZ_BUILD_DATE: ${{needs.buildid.outputs.buildids}}
|
||||||
|
use-sccache: ${{ inputs.use-sccache }}
|
||||||
|
|
||||||
mac:
|
mac:
|
||||||
name: macOS build
|
name: macOS build
|
||||||
@@ -309,107 +337,162 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
needs: [build-data]
|
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:
|
with:
|
||||||
build-version: ${{ needs.build-data.outputs.version }}
|
build-version: ${{ needs.build-data.outputs.version }}
|
||||||
release-branch: ${{ inputs.update_branch }}
|
release-branch: ${{ inputs.update_branch }}
|
||||||
|
|
||||||
appimage:
|
appimage:
|
||||||
name: AppImage build - Linux ${{ matrix.generic == true && 'generic' || 'specific' }}
|
name: AppImage build - Linux ${{ matrix.arch }}
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
generic: [true, false]
|
arch: [x86_64, aarch64]
|
||||||
needs: [linux]
|
needs: [linux]
|
||||||
steps:
|
steps:
|
||||||
- name: Install Node.js
|
- name: Checkout repository
|
||||||
uses: actions/setup-node@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: useblacksmith/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
npm install -g pnpm
|
npm install
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get -y install libfuse2 desktop-file-utils appstream
|
sudo apt-get -y install libfuse2 desktop-file-utils appstream
|
||||||
|
|
||||||
- name: Download linux build
|
- name: Download Linux build
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
name: zen.linux-${{ matrix.arch }}.tar.xz
|
||||||
|
|
||||||
- name: Execute AppImage build
|
- name: Execute AppImage build
|
||||||
run: |
|
run: |
|
||||||
set -eux
|
set -eux
|
||||||
rm AppDir/.DirIcon || true
|
export ARCH=${{ matrix.arch }}
|
||||||
cp configs/branding/${{ inputs.update_branch }}/logo128.png AppDir/usr/share/icons/hicolor/128x128/apps/zen.png
|
UPINFO="gh-releases-zsync|$GITHUB_REPOSITORY_OWNER|desktop|latest|zen-$ARCH.AppImage.zsync"
|
||||||
cp configs/branding/${{ inputs.update_branch }}/logo128.png AppDir/zen.png && ln -s zen.png AppDir/.DirIcon
|
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
|
if [ "${{ inputs.update_branch }}" = "twilight" ]; then
|
||||||
sed -i -e 's/Name=Zen Browser/Name=Zen Twilight/g' AppDir/zen.desktop
|
sed -i -e 's/Name=Zen Browser/Name=Zen Twilight/g' build/AppDir/zen.desktop
|
||||||
sed -i -e 's/StartupWMClass=zen-alpha/StartupWMClass=zen-twilight/g' AppDir/zen.desktop
|
sed -i -e 's/StartupWMClass=zen/StartupWMClass=zen-twilight/g' build/AppDir/zen.desktop
|
||||||
fi
|
fi
|
||||||
|
|
||||||
APPDIR=AppDir
|
APPDIR=build/AppDir
|
||||||
tar -xvf *.tar.* && rm -rf *.tar.*
|
tar -xvf *.tar.* && rm -rf *.tar.*
|
||||||
mv zen/* $APPDIR/
|
mv zen/* $APPDIR/
|
||||||
wget https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
|
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 *.AppImage
|
||||||
chmod +x ./AppDir/AppRun
|
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"
|
echo "AppDir: $APPDIR"
|
||||||
ls -al
|
ls -al
|
||||||
find .
|
find .
|
||||||
ls -al "$APPDIR"
|
ls -al "$APPDIR"
|
||||||
ARCH=x86_64 ./appimagetool-x86_64.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 10 \
|
./appimagetool-x86_64.AppImage -u "$UPINFO" "$APPDIR" zen-"$ARCH".AppImage --runtime-file ./uruntime-appimage-squashfs-lite-"$ARCH"
|
||||||
-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
|
mkdir dist
|
||||||
mv zen*AppImage* dist/.
|
mv zen*AppImage* dist/.
|
||||||
|
unset ARCH
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
retention-days: 5
|
||||||
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
|
name: zen-${{ matrix.arch }}.AppImage
|
||||||
|
path: ./dist/zen-${{ matrix.arch }}.AppImage
|
||||||
|
|
||||||
- name: Upload artifact (ZSync)
|
- name: Upload artifact (ZSync)
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync
|
retention-days: 5
|
||||||
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage.zsync
|
name: zen-${{ matrix.arch }}.AppImage.zsync
|
||||||
|
path: ./dist/zen-${{ matrix.arch }}.AppImage.zsync
|
||||||
|
|
||||||
|
stop-self-hosted:
|
||||||
|
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||||
|
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:
|
release:
|
||||||
if: ${{ inputs.create_release || inputs.update_branch == 'twilight' }}
|
if: ${{ inputs.create_release || inputs.update_branch == 'twilight' }}
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
name: Release
|
name: Release
|
||||||
needs: [build-data, linux, windows-step-3, check-release, mac, appimage, source]
|
needs:
|
||||||
runs-on: ubuntu-latest
|
[
|
||||||
|
build-data,
|
||||||
|
linux,
|
||||||
|
windows-step-3,
|
||||||
|
check-release,
|
||||||
|
mac-uni,
|
||||||
|
appimage,
|
||||||
|
source,
|
||||||
|
lint,
|
||||||
|
stop-self-hosted,
|
||||||
|
]
|
||||||
|
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||||
environment:
|
environment:
|
||||||
name: ${{ inputs.update_branch == 'alpha' && 'Deploy-Release' || 'Deploy-Twilight' }}
|
name: ${{ inputs.update_branch == 'release' && 'Deploy-Release' || 'Deploy-Twilight' }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Git Pull
|
- name: Download artifact
|
||||||
run: |
|
uses: actions/download-artifact@v4
|
||||||
git pull
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
- name: Checkout updates repository
|
||||||
|
|
||||||
- name: List
|
|
||||||
run: find .
|
|
||||||
|
|
||||||
- name: Clone updates repo
|
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
repository: zen-browser/updates-server
|
repository: zen-browser/updates-server
|
||||||
@@ -417,8 +500,9 @@ jobs:
|
|||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Download object files
|
- name: Download object files
|
||||||
|
if: ${{ inputs.update_branch == 'release' }}
|
||||||
run: |
|
run: |
|
||||||
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object
|
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object --depth 1
|
||||||
|
|
||||||
- name: Copy update manifests
|
- name: Copy update manifests
|
||||||
env:
|
env:
|
||||||
@@ -426,98 +510,105 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd updates-server
|
cd updates-server
|
||||||
mkdir -p updates
|
mkdir -p updates
|
||||||
cp -a ../linux_update_manifest_generic/. updates/
|
cp -a ../linux_update_manifest_x86_64/. updates/
|
||||||
cp -a ../linux_update_manifest_specific/. updates/
|
cp -a ../linux_update_manifest_aarch64/. updates/
|
||||||
|
|
||||||
if [[ $RELEASE_BRANCH == 'alpha' ]]; then
|
if [[ $RELEASE_BRANCH == 'release' ]]; then
|
||||||
cp -a ../.github/workflows/object/windows-x64-signed-generic/update_manifest/. updates/
|
cp -a ../.github/workflows/object/windows-x64-signed-x86_64/update_manifest/. updates/
|
||||||
cp -a ../.github/workflows/object/windows-x64-signed-specific/update_manifest/. updates/
|
cp -a ../.github/workflows/object/windows-x64-signed-arm64/update_manifest/. updates/
|
||||||
else
|
else
|
||||||
cp -a ../windows_update_manifest_generic/. updates/
|
cp -a ../windows_update_manifest_x86_64/. updates/
|
||||||
cp -a ../windows_update_manifest_specific/. updates/
|
cp -a ../windows_update_manifest_arm64/. updates/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp -a ../macos_update_manifest_aarch64/. updates/
|
cp -a ../macos_update_manifest/. updates/
|
||||||
cp -a ../macos_update_manifest_x64/. updates/
|
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
- name: Commit
|
||||||
|
uses: stefanzweifel/git-auto-commit-action@v5
|
||||||
with:
|
with:
|
||||||
commit_message: 🚀 Update update manifests
|
commit_message: 🚀 Update update manifests
|
||||||
commit_user_name: Zen Browser Robot
|
commit_user_name: Zen Browser Robot
|
||||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||||
repository: ./updates-server
|
repository: ./updates-server
|
||||||
|
|
||||||
# If we are on twilight, we want to just update the twilight tag's release
|
- name: Generate Release Notes
|
||||||
- name: Update twilight tag
|
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' }}
|
if: ${{ inputs.update_branch == 'twilight' }}
|
||||||
uses: 'marvinpinto/action-automatic-releases@latest'
|
uses: softprops/action-gh-release@v2.2.2
|
||||||
with:
|
with:
|
||||||
|
body_path: release_notes.md
|
||||||
files: |
|
files: |
|
||||||
zen.source.tar.gz
|
./zen.source.tar.zst/*
|
||||||
zen.linux-generic.tar.bz2
|
./zen.linux-x86_64.tar.xz/*
|
||||||
zen.linux-specific.tar.bz2
|
./zen.linux-aarch64.tar.xz/*
|
||||||
zen-generic.AppImage
|
./zen-x86_64.AppImage/*
|
||||||
zen-generic.AppImage.zsync
|
./zen-x86_64.AppImage.zsync/*
|
||||||
zen-specific.AppImage
|
./zen-aarch64.AppImage/*
|
||||||
zen-specific.AppImage.zsync
|
./zen-aarch64.AppImage.zsync/*
|
||||||
zen.win-generic.zip
|
./zen.win-x86_64.zip/*
|
||||||
zen.win-specific.zip
|
./zen.win-arm64.zip/*
|
||||||
linux.mar
|
./linux.mar/*
|
||||||
linux-generic.mar
|
./linux-aarch64.mar/*
|
||||||
windows-generic.mar
|
./windows.mar/*
|
||||||
windows.mar
|
./windows-arm64.mar/*
|
||||||
macos-x64.mar
|
./macos.mar/*
|
||||||
macos-aarch64.mar
|
./zen.installer.exe/*
|
||||||
zen.installer.exe
|
./zen.installer-arm64.exe/*
|
||||||
zen.installer-generic.exe
|
./zen.macos-universal.dmg/*
|
||||||
zen.macos-x64.dmg
|
tag_name: 'twilight'
|
||||||
zen.macos-aarch64.dmg
|
name: 'Twilight build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }} at ${{ needs.build-data.outputs.build_time }})'
|
||||||
automatic_release_tag: 'twilight'
|
|
||||||
title: 'Twilight build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }} at ${{ needs.build-data.outputs.build_time }})'
|
|
||||||
draft: false
|
draft: false
|
||||||
|
generate_release_notes: false
|
||||||
prerelease: true
|
prerelease: true
|
||||||
repo_token: ${{ github.token }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
fail_on_unmatched_files: false
|
||||||
env:
|
env:
|
||||||
GITHUB_REPOSITORY: ${{ github.repository }}
|
GITHUB_REPOSITORY: ${{ github.repository }}
|
||||||
|
|
||||||
- name: release-github
|
- name: Release
|
||||||
uses: 'marvinpinto/action-automatic-releases@latest'
|
uses: softprops/action-gh-release@v2.2.2
|
||||||
if: ${{ inputs.update_branch == 'alpha' }}
|
if: ${{ inputs.update_branch == 'release' }}
|
||||||
with:
|
with:
|
||||||
repo_token: '${{ secrets.DEPLOY_KEY }}'
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
automatic_release_tag: ${{ needs.build-data.outputs.version }}
|
tag_name: ${{ needs.build-data.outputs.version }}
|
||||||
prerelease: false
|
prerelease: false
|
||||||
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
|
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: |
|
files: |
|
||||||
zen.source.tar.gz
|
./zen.source.tar.zst/*
|
||||||
zen.linux-generic.tar.bz2
|
./zen.linux-x86_64.tar.xz/*
|
||||||
zen.linux-specific.tar.bz2
|
./zen.linux-aarch64.tar.xz/*
|
||||||
zen-generic.AppImage
|
./zen-x86_64.AppImage/*
|
||||||
zen-generic.AppImage.zsync
|
./zen-x86_64.AppImage.zsync/*
|
||||||
zen-specific.AppImage
|
./zen-aarch64.AppImage/*
|
||||||
zen-specific.AppImage.zsync
|
./zen-aarch64.AppImage.zsync/*
|
||||||
.github/workflows/object/windows-x64-signed-generic/zen.win-generic.zip
|
./.github/workflows/object/windows-x64-signed-x86_64/zen.win-x86_64.zip
|
||||||
.github/workflows/object/windows-x64-signed-specific/zen.win-specific.zip
|
./.github/workflows/object/windows-x64-signed-arm64/zen.win-arm64.zip
|
||||||
linux.mar
|
./linux.mar/*
|
||||||
linux-generic.mar
|
./linux-aarch64.mar/*
|
||||||
.github/workflows/object/windows-x64-signed-generic/windows-generic.mar
|
./.github/workflows/object/windows-x64-signed-x86_64/windows.mar
|
||||||
.github/workflows/object/windows-x64-signed-specific/windows.mar
|
./.github/workflows/object/windows-x64-signed-arm64/windows-arm64.mar
|
||||||
macos-x64.mar
|
./macos.mar/*
|
||||||
macos-aarch64.mar
|
./.github/workflows/object/windows-x64-signed-x86_64/zen.installer.exe
|
||||||
.github/workflows/object/windows-x64-signed-specific/zen.installer.exe
|
./.github/workflows/object/windows-x64-signed-arm64/zen.installer-arm64.exe
|
||||||
.github/workflows/object/windows-x64-signed-generic/zen.installer-generic.exe
|
./zen.macos-universal.dmg/*
|
||||||
zen.macos-x64.dmg
|
|
||||||
zen.macos-aarch64.dmg
|
|
||||||
|
|
||||||
prepare-flatpak:
|
prepare-flatpak:
|
||||||
if: ${{ inputs.create_release && inputs.update_branch == 'alpha' }}
|
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
name: Prepare Flatpak
|
name: Prepare Flatpak
|
||||||
needs: [release, linux, build-data]
|
needs: [release, linux, build-data]
|
||||||
runs-on: ubuntu-latest
|
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone flatpak repo
|
- name: Checkout Flatpak repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
repository: zen-browser/release-utils
|
repository: zen-browser/release-utils
|
||||||
@@ -529,18 +620,19 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
npm install
|
npm install
|
||||||
|
|
||||||
- name: Generate new flatpak release
|
- name: Generate new Flatpak release
|
||||||
run: |
|
run: |
|
||||||
npm run build-flatpak -- \
|
npm run build-flatpak -- \
|
||||||
--version ${{ needs.build-data.outputs.version }}
|
--version ${{ needs.build-data.outputs.version }}
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
- name: Commit
|
||||||
|
uses: stefanzweifel/git-auto-commit-action@v5
|
||||||
with:
|
with:
|
||||||
commit_message: 🚀 Update releases for flatpak
|
commit_message: 🚀 Update releases for Flatpak
|
||||||
commit_user_name: Zen Browser Robot
|
commit_user_name: Zen Browser Robot
|
||||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||||
|
|
||||||
- name: Clone flatpak repo
|
- name: Checkout Flatpak repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
repository: zen-browser/flatpak
|
repository: zen-browser/flatpak
|
||||||
@@ -552,82 +644,91 @@ jobs:
|
|||||||
pwd
|
pwd
|
||||||
ls .
|
ls .
|
||||||
ls ..
|
ls ..
|
||||||
mv releases.xml ./flatpak/io.github.zen_browser.zen.metainfo.xml
|
mv releases.xml ./flatpak/app.zen_browser.zen.metainfo.xml
|
||||||
# output the version to the file
|
# output the version to the file
|
||||||
echo -n ${{ needs.build-data.outputs.version }} > ./flatpak/version
|
echo -n ${{ needs.build-data.outputs.version }} > ./flatpak/version
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
- name: Commit
|
||||||
|
uses: stefanzweifel/git-auto-commit-action@v5
|
||||||
with:
|
with:
|
||||||
commit_message: '[release]: Update flatpak manifest'
|
commit_message: '[release]: Update Flatpak manifest'
|
||||||
commit_user_name: Zen Browser Robot
|
commit_user_name: Zen Browser Robot
|
||||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||||
repository: ./flatpak
|
repository: ./flatpak
|
||||||
|
|
||||||
- name: Wait 4 minutes for the flatpak repo to update
|
- name: Wait 2 minutes for the Flatpak repo to update
|
||||||
run: sleep 240
|
run: sleep 120
|
||||||
|
|
||||||
release-flatpak:
|
release-flatpak:
|
||||||
if: ${{ inputs.create_release && inputs.update_branch == 'alpha' }}
|
if: ${{ inputs.create_release && inputs.update_branch == 'release' }}
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
name: Release Flatpak
|
name: Release Flatpak
|
||||||
needs: [prepare-flatpak, build-data]
|
needs: [prepare-flatpak, build-data]
|
||||||
runs-on: ubuntu-latest
|
runs-on: blacksmith-2vcpu-ubuntu-2404
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clone flatpak repo
|
- name: Checkout Flatpak repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
repository: flathub/io.github.zen_browser.zen
|
repository: flathub/app.zen_browser.zen
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Download linux generic build
|
- name: Download Linux x86_64 build
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.linux-generic.tar.bz2
|
name: zen.linux-x86_64.tar.xz
|
||||||
|
|
||||||
- name: Update repo
|
- name: Download Linux aarch64 build
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: zen.linux-aarch64.tar.xz
|
||||||
|
|
||||||
|
- name: Update repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
path: zen-browser
|
path: zen-browser
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Download flatpak archive
|
- name: Download Flatpak archive
|
||||||
run: |
|
run: |
|
||||||
wget https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar -O archive.tar
|
wget https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar -O archive.tar
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup Git
|
||||||
run: |
|
run: |
|
||||||
git config --global user.name "github-actions[bot]"
|
git config --global user.name "github-actions[bot]"
|
||||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
|
||||||
- name: Prepare flatpak manifest
|
- name: Prepare Flatpak manifest
|
||||||
run: |
|
run: |
|
||||||
python3 ./zen-browser/scripts/prepare-flatpak-release.py \
|
python3 ./zen-browser/scripts/prepare-flatpak-release.py \
|
||||||
--flatpak-archive archive.tar \
|
--flatpak-archive archive.tar \
|
||||||
--version ${{ needs.build-data.outputs.version }} \
|
--version ${{ needs.build-data.outputs.version }} \
|
||||||
--linux-archive zen.linux-generic.tar.bz2 \
|
--linux-archive zen.linux-x86_64.tar.xz \
|
||||||
--output io.github.zen_browser.zen.yml \
|
--linux-aarch64-archive zen.linux-aarch64.tar.xz \
|
||||||
--template-root ./zen-browser/flatpak
|
--output app.zen_browser.zen.yml \
|
||||||
|
--template-root ./zen-browser/build/flatpak
|
||||||
|
|
||||||
- name: Commit changes
|
- name: Commit changes
|
||||||
run: |
|
run: |
|
||||||
git add io.github.zen_browser.zen.yml
|
git add app.zen_browser.zen.yml
|
||||||
git commit -m "Update to version ${{ needs.build-data.outputs.version }}"
|
git commit -m "Update to version ${{ needs.build-data.outputs.version }}"
|
||||||
|
|
||||||
- name: Clean up
|
- name: Clean up
|
||||||
run: |
|
run: |
|
||||||
rm -rf zen-browser
|
rm -rf zen-browser
|
||||||
rm -rf archive.tar
|
rm -rf archive.tar
|
||||||
rm -rf zen.linux-generic.tar.bz2
|
rm -rf zen.linux-x86_64.tar.xz
|
||||||
|
rm -rf zen.linux-aarch64.tar.xz
|
||||||
|
|
||||||
- name: Upload flatpak manifest
|
- name: Upload Flatpak manifest
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: io.github.zen_browser.zen.yml
|
retention-days: 5
|
||||||
path: ./io.github.zen_browser.zen.yml
|
name: app.zen_browser.zen.yml
|
||||||
|
path: ./app.zen_browser.zen.yml
|
||||||
|
|
||||||
- name: Create pull request
|
- name: Create pull request
|
||||||
uses: peter-evans/create-pull-request@v6
|
uses: peter-evans/create-pull-request@v7
|
||||||
env:
|
env:
|
||||||
GIT_TRACE: 1
|
GIT_TRACE: 1
|
||||||
GIT_CURL_VERBOSE: 1
|
GIT_CURL_VERBOSE: 1
|
||||||
@@ -643,28 +744,3 @@ jobs:
|
|||||||
base: master
|
base: master
|
||||||
git-token: ${{ secrets.DEPLOY_KEY }}
|
git-token: ${{ secrets.DEPLOY_KEY }}
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
|
|
||||||
release-homebrew:
|
|
||||||
if: ${{ inputs.create_release && inputs.update_branch == 'alpha' }}
|
|
||||||
permissions: write-all
|
|
||||||
name: Homebrew release
|
|
||||||
needs: [release, mac, build-data]
|
|
||||||
runs-on: macos-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Set up Homebrew
|
|
||||||
uses: Homebrew/actions/setup-homebrew@master
|
|
||||||
with:
|
|
||||||
cask: true
|
|
||||||
test-bot: false
|
|
||||||
|
|
||||||
- name: Setup git
|
|
||||||
uses: Homebrew/actions/git-user-config@master
|
|
||||||
with:
|
|
||||||
username: zen-browser-bot
|
|
||||||
|
|
||||||
- name: Bump zen-browser
|
|
||||||
uses: Homebrew/actions/bump-packages@master
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
|
||||||
casks: zen-browser
|
|
||||||
|
24
.github/workflows/check-candidate-release.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
name: Check Firefox Candidate Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '59 4 * * 2'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
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")
|
|
37
.github/workflows/code-linter.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: Code Linter
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
workflow_call:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ !contains(github.event.head_commit.message, '[no-lint]') }}
|
||||||
|
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
|
34
.github/workflows/issue-labeler.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
name: Issue labeler
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [opened]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
label-component:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
# required for all workflows
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
# only required for workflows in private repositories
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Parse issue form
|
||||||
|
uses: stefanbuck/github-issue-parser@v3
|
||||||
|
id: issue-parser
|
||||||
|
with:
|
||||||
|
template-path: .github/ISSUE_TEMPLATE/bug_report.yml
|
||||||
|
|
||||||
|
- 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.DEPLOY_KEY }}
|
67
.github/workflows/issue-metrics.yml
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
name: Monthly issue metrics
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
issues: read
|
||||||
|
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: 'docs: Update monthly issue metrics, b=(no bug), c={docs}'
|
||||||
|
commit_user_name: Zen Browser Robot
|
||||||
|
commit_user_email: zen-browser-auto@users.noreply.github.com
|
173
.github/workflows/linux-release-build.yml
vendored
@@ -1,4 +1,5 @@
|
|||||||
name: Linux Release Build
|
name: Linux Release Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
@@ -10,38 +11,64 @@ on:
|
|||||||
description: 'The branch to build'
|
description: 'The branch to build'
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
MOZ_BUILD_DATE:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ''
|
||||||
|
use-sccache:
|
||||||
|
description: 'Use sccache'
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-linux:
|
build-linux:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
runs-on: ubuntu-latest
|
# aarch64 does not need full 16x
|
||||||
|
runs-on: ${{ (inputs.release-branch == 'release' && matrix.arch == 'x86_64') && 'self-hosted' || 'blacksmith-8vcpu-ubuntu-2404' }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
generic: [true, false]
|
arch: [x86_64, aarch64]
|
||||||
name: Build Linux - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
|
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:
|
steps:
|
||||||
- name: Free Disk Space (Ubuntu)
|
- name: Free Disk Space (Ubuntu)
|
||||||
uses: jlumbroso/free-disk-space@main
|
uses: jlumbroso/free-disk-space@main
|
||||||
with:
|
with:
|
||||||
# this might remove tools that are actually needed,
|
|
||||||
# if set to "true" but frees about 6 GB
|
|
||||||
tool-cache: false
|
tool-cache: false
|
||||||
|
|
||||||
- name: Install Node.js
|
- name: Checkout repository
|
||||||
uses: actions/setup-node@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup Node.js
|
||||||
|
uses: useblacksmith/setup-node@v5
|
||||||
|
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: |
|
run: |
|
||||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||||
git config --global user.name "mauro-balades"
|
git config --global user.name "mauro-balades"
|
||||||
@@ -51,61 +78,36 @@ jobs:
|
|||||||
set -x
|
set -x
|
||||||
sudo apt-get update --fix-missing
|
sudo apt-get update --fix-missing
|
||||||
sudo apt-get update
|
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
|
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: 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
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: |
|
||||||
|
npm install
|
||||||
|
|
||||||
- name: Load surfer CI setup
|
- name: Load Surfer CI setup
|
||||||
run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
||||||
|
|
||||||
- name: Download firefox source and dependencies
|
- name: Download Firefox source and dependencies
|
||||||
run: pnpm surfer download
|
run: npm run download
|
||||||
|
|
||||||
- name: Fix rust version
|
- name: Fix Rust version
|
||||||
run: |
|
run: |
|
||||||
# Install a rust version compatible with LLVM 18
|
# Install a rust version compatible with LLVM 18
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.79
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain $(cat .rust-toolchain)
|
||||||
source $HOME/.cargo/env
|
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
|
- name: Import
|
||||||
env:
|
env:
|
||||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
SURFER_COMPAT: ${{ matrix.arch }}
|
||||||
run: pnpm surfer import
|
run: |
|
||||||
|
. "$HOME/.cargo/env"
|
||||||
|
npm run import
|
||||||
|
|
||||||
- name: Build language packs
|
- name: Build language packs
|
||||||
run: sh scripts/download-language-packs.sh
|
run: sh scripts/download-language-packs.sh
|
||||||
@@ -113,45 +115,62 @@ jobs:
|
|||||||
- name: Bootstrap
|
- name: Bootstrap
|
||||||
run: |
|
run: |
|
||||||
cd engine
|
cd engine
|
||||||
|
export SURFER_PLATFORM="linux"
|
||||||
./mach --no-interactive bootstrap --application-choice browser
|
./mach --no-interactive bootstrap --application-choice browser
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
|
- name: Insert API Keys
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.zen-keys
|
||||||
|
echo "${{ secrets.ZEN_SAFEBROWSING_API_KEY }}" > ~/.zen-keys/safebrowsing.dat
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
env:
|
env:
|
||||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
SURFER_COMPAT: ${{ matrix.arch }}
|
||||||
|
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: sh .github/workflows/src/release-build.sh
|
run: |
|
||||||
|
export SURFER_PLATFORM="linux"
|
||||||
- name: Build again if it failed
|
if [[ -n ${{ inputs.MOZ_BUILD_DATE }} ]];then
|
||||||
if: failure()
|
export MOZ_BUILD_DATE=${{ inputs.MOZ_BUILD_DATE }}
|
||||||
env:
|
fi
|
||||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
bash .github/workflows/src/release-build.sh
|
||||||
run: sh .github/workflows/src/release-build.sh
|
|
||||||
|
|
||||||
- name: Package
|
- name: Package
|
||||||
env:
|
env:
|
||||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
SURFER_COMPAT: ${{ matrix.arch }}
|
||||||
run: pnpm package
|
ZEN_GA_DISABLE_PGO: true
|
||||||
|
run: |
|
||||||
|
export SURFER_PLATFORM="linux"
|
||||||
|
export ZEN_RELEASE=1
|
||||||
|
npm run package
|
||||||
|
|
||||||
|
- name: Remove API Keys
|
||||||
|
run: |
|
||||||
|
rm -rf ~/.zen-keys
|
||||||
|
|
||||||
- name: Rename artifacts
|
- name: Rename artifacts
|
||||||
run: |
|
run: |
|
||||||
mv dist/zen-*.tar.bz2 "zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2"
|
mv dist/zen-*.tar.xz "zen.linux-${{ matrix.arch }}.tar.xz"
|
||||||
mv dist/output.mar linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
mv dist/output.mar linux${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.mar
|
||||||
|
|
||||||
- name: Upload binary
|
- name: Upload build artifact (binary)
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
retention-days: 5
|
||||||
path: ./zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
|
name: zen.linux-${{ matrix.arch }}.tar.xz
|
||||||
|
path: ./zen.linux-${{ matrix.arch }}.tar.xz
|
||||||
|
|
||||||
- name: Upload mar
|
- name: Upload build artifact (.mar)
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
retention-days: 5
|
||||||
path: ./linux${{ matrix.generic == true && '-generic' || '' }}.mar
|
name: linux${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.mar
|
||||||
|
path: ./linux${{ matrix.arch == 'aarch64' && '-aarch64' || '' }}.mar
|
||||||
|
|
||||||
- name: Upload update manifests
|
- name: Upload build artifact (update manifests)
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: linux_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }}
|
retention-days: 5
|
||||||
|
name: linux_update_manifest_${{ matrix.arch }}
|
||||||
path: ./dist/update
|
path: ./dist/update
|
||||||
|
214
.github/workflows/macos-release-build.yml
vendored
@@ -1,4 +1,7 @@
|
|||||||
name: macOS Release Build
|
name: macOS Release Build
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
@@ -10,37 +13,60 @@ on:
|
|||||||
description: 'The branch to build'
|
description: 'The branch to build'
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
MOZ_BUILD_DATE:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ''
|
||||||
|
use-sccache:
|
||||||
|
description: 'Use sccache'
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
mac-build:
|
mac-build:
|
||||||
name: Build macOS - ${{ matrix.arch }}
|
name: Build macOS - ${{ matrix.arch }}
|
||||||
|
runs-on: macos-15
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
arch: [x86_64, aarch64]
|
||||||
- arch: aarch64
|
env:
|
||||||
os: macos-14
|
SCCACHE_GHA_ENABLED: ${{ inputs.use-sccache && 'true' || 'false' }}
|
||||||
- arch: x64
|
CARGO_TERM_COLOR: always
|
||||||
os: macos-13
|
RUSTC_WRAPPER: ${{ inputs.use-sccache && 'sccache' || '' }}
|
||||||
|
CARGO_INCREMENTAL: 0
|
||||||
steps:
|
steps:
|
||||||
- name: Install Node.js
|
- name: Checkout repository
|
||||||
uses: actions/setup-node@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: '3.11'
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Setup git
|
- 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: |
|
run: |
|
||||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||||
git config --global user.name "mauro-balades"
|
git config --global user.name "mauro-balades"
|
||||||
@@ -48,132 +74,120 @@ jobs:
|
|||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
run: |
|
run: |
|
||||||
brew update
|
brew update
|
||||||
|
brew install cairo gnu-tar mercurial
|
||||||
brew install cairo sccache gnu-tar mercurial
|
|
||||||
sudo pip install setuptools
|
sudo pip install setuptools
|
||||||
|
|
||||||
# completly uninstall python3 and python3.12
|
|
||||||
brew uninstall --ignore-dependencies python3.12 -f
|
brew uninstall --ignore-dependencies python3.12 -f
|
||||||
|
|
||||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||||
python3 -m pip install --user mercurial
|
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.11' '/usr/local/bin/2to3-3.12' '/usr/local/bin/2to3'
|
||||||
rm '/usr/local/bin/2to3-3.12' # fix Could not symlink bin/2to3-3.12
|
rm '/usr/local/bin/idle3.11' '/usr/local/bin/idle3.12' '/usr/local/bin/idle3'
|
||||||
rm /usr/local/bin/2to3 # fix Could not symlink bin/2to3
|
rm '/usr/local/bin/pydoc3.11' '/usr/local/bin/pydoc3.12' '/usr/local/bin/pydoc3'
|
||||||
rm '/usr/local/bin/idle3.11' #fix Could not symlink bin/idle3.11
|
rm '/usr/local/bin/python3.11' '/usr/local/bin/python3.12' '/usr/local/bin/python3'
|
||||||
rm '/usr/local/bin/idle3.12' # fix Could not symlink bin/idle3.12
|
rm '/usr/local/bin/python3.11-config' '/usr/local/bin/python3.12-config' '/usr/local/bin/python3-config'
|
||||||
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
|
brew install watchman
|
||||||
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.79
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain $(cat .rust-toolchain)
|
||||||
|
source $HOME/.cargo/env
|
||||||
|
|
||||||
- name: Force usage fo gnu-tar
|
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: |
|
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"' >> ~/.bash_profile
|
||||||
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
|
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
|
||||||
source ~/.bash_profile
|
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
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: |
|
||||||
- name: Load surfer CI setup
|
npm install
|
||||||
run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
|
||||||
|
|
||||||
- name: Download firefox source and dependancies
|
- name: Load surfer CI setup
|
||||||
run: pnpm surfer download
|
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: Import
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.arch }}
|
||||||
|
run: npm run import -- --verbose
|
||||||
|
|
||||||
- name: Bootstrap
|
- name: Bootstrap
|
||||||
run: |
|
run: |
|
||||||
cd engine
|
cd engine
|
||||||
|
export SURFER_PLATFORM="darwin"
|
||||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
|
# Always exist with 0, even if bootstrap fails
|
||||||
|
./mach --no-interactive bootstrap --application-choice browser --no-system-changes --exclude macos-sdk || true
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
- name: Import
|
|
||||||
env:
|
|
||||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
|
||||||
run: |
|
|
||||||
pnpm surfer import --verbose
|
|
||||||
|
|
||||||
- name: Build language packs
|
- name: Build language packs
|
||||||
run: sh scripts/download-language-packs.sh
|
run: sh scripts/download-language-packs.sh
|
||||||
|
|
||||||
- name: build Zen
|
- name: Insert API Keys
|
||||||
env:
|
|
||||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
|
||||||
run: |
|
run: |
|
||||||
if test "${{ matrix.arch }}" = "x64"; then
|
mkdir -p ~/.zen-keys
|
||||||
export ZEN_DISABLE_LTO=1
|
echo "${{ secrets.ZEN_SAFEBROWSING_API_KEY }}" > ~/.zen-keys/safebrowsing.dat
|
||||||
|
|
||||||
|
- 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
|
fi
|
||||||
sh .github/workflows/src/release-build.sh
|
bash .github/workflows/src/release-build.sh
|
||||||
|
|
||||||
- name: Rebuild Zen if failed
|
|
||||||
if: failure()
|
|
||||||
run: sh .github/workflows/src/release-build.sh
|
|
||||||
|
|
||||||
- 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: Package
|
- name: Package
|
||||||
env:
|
env:
|
||||||
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
|
SURFER_COMPAT: ${{ matrix.arch }}
|
||||||
|
ZEN_GA_DISABLE_PGO: true
|
||||||
run: |
|
run: |
|
||||||
export MACOS_APPLE_DEVELOPER_ID="${{ secrets.macOS_AppleDeveloperId }}"
|
export SURFER_PLATFORM="darwin"
|
||||||
pnpm package
|
export ZEN_RELEASE=1
|
||||||
|
npm run package
|
||||||
|
|
||||||
|
- name: Remove API Keys
|
||||||
|
run: |
|
||||||
|
rm -rf ~/.zen-keys
|
||||||
|
|
||||||
- name: Rename artifacts
|
- name: Rename artifacts
|
||||||
run: |
|
run: |
|
||||||
mv ./dist/output.mar macos-${{ matrix.arch }}.mar
|
echo "Tarballing DMG"
|
||||||
|
|
||||||
- name: Sign to .dmg
|
|
||||||
run: |
|
|
||||||
set -ex
|
set -ex
|
||||||
hdiutil convert ./dist/*.dmg -format UDZO -imagekey zlib-level=9 -o zen.macos-${{ matrix.arch }}.dmg
|
mv ./dist/*.dmg ./zen-${{ matrix.arch }}-apple-darwin-dist.dmg
|
||||||
xattr -cr zen.macos-${{ matrix.arch }}.dmg
|
mv ./engine/obj-${{ matrix.arch }}-apple-darwin/dist/host/bin/mar ./zen-macos-host-mar
|
||||||
codesign -s "${{ secrets.macOS_AppleDeveloperId }}" zen.macos-${{ matrix.arch }}.dmg
|
mv ./engine/obj-${{ matrix.arch }}-apple-darwin/dist/bin/platform.ini ./platform.ini
|
||||||
xcrun notarytool submit "zen.macos-${{ matrix.arch }}.dmg" \
|
|
||||||
--apple-id "${{ secrets.macOS_AppleAccountId }}" \
|
|
||||||
--team-id "${{ secrets.macOS_AppleDeveloperIdTeamId }}" \
|
|
||||||
--password "${{ secrets.macOS_AppleDeveloperIdPassword }}" \
|
|
||||||
--wait
|
|
||||||
xcrun stapler staple "zen.macos-${{ matrix.arch }}.dmg"
|
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload dist dmg
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.macos-${{ matrix.arch }}.dmg
|
retention-days: 1
|
||||||
path: ./zen.macos-${{ matrix.arch }}.dmg
|
name: zen-${{ matrix.arch }}-apple-darwin-dist.dmg
|
||||||
|
path: ./zen-${{ matrix.arch }}-apple-darwin-dist.dmg
|
||||||
|
|
||||||
- name: Upload mar
|
- name: Upload host mar
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
if: matrix.arch == 'aarch64'
|
||||||
with:
|
with:
|
||||||
name: macos-${{ matrix.arch }}.mar
|
retention-days: 1
|
||||||
path: ./macos-${{ matrix.arch }}.mar
|
name: zen-macos-host-mar
|
||||||
|
path: ./zen-macos-host-mar
|
||||||
|
|
||||||
- name: Upload update manifests
|
- name: Upload platform.ini
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
if: matrix.arch == 'x86_64'
|
||||||
with:
|
with:
|
||||||
name: macos_update_manifest_${{ matrix.arch }}
|
retention-days: 1
|
||||||
path: ./dist/update
|
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-15'
|
||||||
|
|
||||||
|
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 || true
|
||||||
|
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
|
30
.github/workflows/pr-test.yml
vendored
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
name: Pull request test
|
name: Pull request test
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
@@ -11,26 +12,23 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: 'recursive'
|
submodules: recursive
|
||||||
|
|
||||||
- name: Install Node.js and pnpm
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version-file: '.nvmrc'
|
||||||
|
|
||||||
- name: Install pnpm
|
|
||||||
run: npm install -g pnpm
|
|
||||||
|
|
||||||
- name: Install Surfer
|
- name: Install Surfer
|
||||||
run: |
|
run: npm i -g @zen-browser/surfer
|
||||||
npm i -g @zen-browser/surfer
|
|
||||||
|
|
||||||
- name: Download firefox
|
- name: Install dependencies
|
||||||
run: |
|
run: npm install
|
||||||
surfer download
|
|
||||||
|
- name: Download Firefox and dependencies
|
||||||
|
run: surfer download
|
||||||
|
|
||||||
- name: Import patches
|
- name: Import patches
|
||||||
run: |
|
run: surfer i
|
||||||
surfer i
|
|
||||||
|
79
.github/workflows/src/generate_release_notes.sh
vendored
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/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 --retry 5 --retry-delay 5 "$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
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "# Zen ${RELEASE_TYPE} Release"
|
||||||
|
|
||||||
|
if [ "$RELEASE_TYPE" = "Twilight" ]; then
|
||||||
|
echo
|
||||||
|
echo "> [!NOTE]"
|
||||||
|
echo "> You're currently in Twilight mode, this means you're downloading the latest experimental features and updates."
|
||||||
|
echo ">"
|
||||||
|
echo "> If you encounter any issues, please report them on the [issues page](https://github.com/zen-browser/desktop/issues)."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$RELEASE_TYPE" = "Stable" ]; then
|
||||||
|
echo "${EXTRA_NOTES}"
|
||||||
|
|
||||||
|
if echo "$LATEST_RELEASE" | jq -e '.security != null and .security != ""' > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo "## Security"
|
||||||
|
echo "[Various security fixes]($(echo "$LATEST_RELEASE" | jq -r '.security'))"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$LATEST_RELEASE" | jq -e '(.features // []) | length > 0' > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo "## New Features"
|
||||||
|
echo "$LATEST_RELEASE" | jq -r '.features[] | "- " + .'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$LATEST_RELEASE" | jq -e '(.fixes // []) | length > 0' > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo "## Fixes"
|
||||||
|
echo "$LATEST_RELEASE" | jq -r '.fixes[] | if type=="object" then "- " + .description + " ([#" + (.issue|tostring) + "](" + "https://github.com/zen-browser/desktop/issues/" + (.issue|tostring) + "))" else "- " + . end'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$LATEST_RELEASE" | jq -e '(.breakingChanges // []) | length > 0' > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo "## Breaking Changes"
|
||||||
|
echo "$LATEST_RELEASE" | jq -r '.breakingChanges[] | if type=="string" then "- " + . else "- " + .description + " [Learn more](" + .link + ")" end'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$LATEST_RELEASE" | jq -e '(.themeChanges // []) | length > 0' > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo "## Theme Changes"
|
||||||
|
echo "$LATEST_RELEASE" | jq -r '.themeChanges[] | "- " + .'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$LATEST_RELEASE" | jq -e '(.changes // []) | length > 0' > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo "## Changes"
|
||||||
|
echo "$LATEST_RELEASE" | jq -r '.changes[] | "- " + .'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$LATEST_RELEASE" | jq -e '(.knownIssues // []) | length > 0' > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo "## Known Issues"
|
||||||
|
echo "$LATEST_RELEASE" | jq -r '.knownIssues[] | "- " + .'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
} > "release_notes.md"
|
||||||
|
|
||||||
|
echo "Release notes generated: release_notes.md"
|
22
.github/workflows/src/release-build.sh
vendored
@@ -1,26 +1,30 @@
|
|||||||
set -ex
|
#!/bin/bash
|
||||||
|
|
||||||
if command -v apt-get &> /dev/null
|
set -xe
|
||||||
then
|
|
||||||
|
if command -v apt-get &> /dev/null; then
|
||||||
|
sudo apt-get install python3-launchpadlib
|
||||||
sudo apt-get update
|
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
|
fi
|
||||||
|
|
||||||
|
. $HOME/.cargo/env
|
||||||
|
|
||||||
ulimit -n 4096
|
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
|
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 LLVM_PROFDATA=$HOME/.mozbuild/clang/bin/llvm-profdata
|
||||||
export DISPLAY=:2
|
export DISPLAY=:2
|
||||||
fi
|
fi
|
||||||
export ZEN_RELEASE=1
|
export ZEN_RELEASE=1
|
||||||
pnpm build
|
npm run build
|
||||||
else
|
else
|
||||||
echo "Xvfb could not be found, running without it"
|
echo "Xvfb could not be found, running without it"
|
||||||
echo "ASSUMING YOU ARE RUNNING THIS ON MACOS"
|
echo "ASSUMING YOU ARE RUNNING THIS ON MACOS"
|
||||||
|
|
||||||
set -v
|
set -v
|
||||||
export ZEN_RELEASE=1
|
export ZEN_RELEASE=1
|
||||||
pnpm build
|
npm run build
|
||||||
fi
|
fi
|
||||||
|
22
.github/workflows/twilight-release-schedule.yml
vendored
@@ -1,8 +1,15 @@
|
|||||||
name: Zen Twilight Scheduled Releases
|
name: Zen Twilight Scheduled Releases
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * *'
|
- cron: '0 23 * * *'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
create_release:
|
||||||
|
description: 'Whether to do a release'
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
twilight-release-schedule:
|
twilight-release-schedule:
|
||||||
@@ -11,8 +18,9 @@ jobs:
|
|||||||
secrets: inherit
|
secrets: inherit
|
||||||
uses: ./.github/workflows/build.yml
|
uses: ./.github/workflows/build.yml
|
||||||
with:
|
with:
|
||||||
create_release: true
|
create_release: ${{ github.event_name != 'workflow_dispatch' && true || inputs.create_release }}
|
||||||
update_branch: twilight
|
update_branch: twilight
|
||||||
|
use-sccache: false
|
||||||
update_version: false
|
update_version: false
|
||||||
|
|
||||||
post-build:
|
post-build:
|
||||||
@@ -20,12 +28,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: twilight-release-schedule
|
needs: twilight-release-schedule
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Node.js and pnpm
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version-file: '.nvmrc'
|
||||||
|
|
||||||
# TODO:
|
|
||||||
|
30
.github/workflows/update-submodules.yml
vendored
@@ -1,30 +0,0 @@
|
|||||||
|
|
||||||
name: Update Components Submodules
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- dev
|
|
||||||
workflow_dispatch:
|
|
||||||
workflow_call: # This is a custom event that we will trigger manually
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-submodules:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: "!contains(github.event.head_commit.message, '[skip ci]')"
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: 'recursive'
|
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
|
||||||
|
|
||||||
- name: Update submodules
|
|
||||||
run: |
|
|
||||||
git submodule update --remote --merge
|
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
|
||||||
with:
|
|
||||||
commit_message: "[skip ci] 📦 Update Submodules!"
|
|
||||||
commit_user_name: Zen Browser Robot
|
|
||||||
commit_user_email: zen-browser-bot@users.noreply.github.com
|
|
65
.github/workflows/windows-profile-build.yml
vendored
@@ -1,4 +1,8 @@
|
|||||||
name: Windows PGO Builds
|
name: Windows PGO Builds
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
@@ -17,59 +21,69 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
windows-profile-build:
|
windows-profile-build:
|
||||||
name: Windows Profile Build - ${{ matrix.generic == true && 'generic' || 'specific' }}
|
name: |
|
||||||
|
Windows Profile Build - ${{ matrix.arch }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
generic: [true, false]
|
arch: [x86_64, aarch64]
|
||||||
runs-on: windows-latest
|
|
||||||
# Script edited from https://github.com/Floorp-Projects/Floorp/blob/ESR115/.github/workflows/window-generate-profile-data-and-jarlog.yml
|
runs-on: ${{ inputs.release-branch == 'release' && 'windows-latest' || 'windows-latest' }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Node.js and pnpm
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version-file: '.nvmrc'
|
||||||
|
|
||||||
- name: Setup git
|
- name: Setup Git
|
||||||
run: |
|
run: |
|
||||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||||
git config --global user.name "mauro-balades"
|
git config --global user.name "mauro-balades"
|
||||||
- name: Install pnpm
|
|
||||||
run: npm install -g pnpm
|
|
||||||
|
|
||||||
- name: Install Surfer
|
- name: Install Surfer
|
||||||
run: |
|
run: npm i -g @zen-browser/surfer
|
||||||
npm i -g @zen-browser/surfer
|
|
||||||
- uses: actions/download-artifact@v4
|
- name: Load Surfer CI setup
|
||||||
name: Download artifact
|
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:
|
with:
|
||||||
path: C:\artifact
|
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: |
|
run: |
|
||||||
cd C:\artifact
|
cd C:\artifact
|
||||||
ls
|
ls
|
||||||
Expand-Archive -Path .\${{ inputs.profile-data-path-archive }} -DestinationPath C:\artifact
|
Expand-Archive -Path .\${{ inputs.profile-data-path-archive }} -DestinationPath C:\artifact
|
||||||
ls
|
ls
|
||||||
|
|
||||||
- name: Setup
|
- name: Setup
|
||||||
run: |
|
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
|
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
||||||
- name: Download firefox
|
|
||||||
|
- name: Download Firefox and dependencies
|
||||||
|
if: ${{ matrix.arch == 'x86_64' }}
|
||||||
run: |
|
run: |
|
||||||
git config --global core.safecrlf false
|
git config --global core.safecrlf false
|
||||||
pnpm surfer download
|
npm run download
|
||||||
|
|
||||||
- name: Import patches
|
- name: Import patches
|
||||||
|
if: ${{ matrix.arch == 'x86_64' }}
|
||||||
env:
|
env:
|
||||||
SURFER_NO_BRANDING_PATCH: true
|
SURFER_NO_BRANDING_PATCH: true
|
||||||
run: pnpm surfer import
|
run: npm run import
|
||||||
|
|
||||||
- name: Generate
|
- name: Generate
|
||||||
|
if: ${{ matrix.arch == 'x86_64' }}
|
||||||
run: |
|
run: |
|
||||||
ls
|
ls
|
||||||
$Env:USE_MINTTY = "0"
|
$Env:USE_MINTTY = "0"
|
||||||
@@ -79,26 +93,23 @@ jobs:
|
|||||||
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
||||||
echo 'export PATH=/c/mozilla-build/msys2/usr/bin:$PATH' '' >> 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 './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
|
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
|
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: Move profile data
|
- name: Move profile data
|
||||||
|
if: ${{ matrix.arch == 'x86_64' }}
|
||||||
run: |
|
run: |
|
||||||
dir
|
dir
|
||||||
dir engine
|
dir engine
|
||||||
mv engine/merged.profdata merged.profdata
|
mv engine/merged.profdata merged.profdata
|
||||||
mv engine/en-US.log en-US.log
|
mv engine/en-US.log en-US.log
|
||||||
|
|
||||||
- name: Publish artifacts
|
- name: Upload artifacts
|
||||||
|
if: ${{ matrix.arch == 'x86_64' }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
retention-days: 1
|
||||||
path: |
|
path: |
|
||||||
merged.profdata
|
merged.profdata
|
||||||
en-US.log
|
en-US.log
|
||||||
name: windows-profdata-${{ matrix.generic == true && 'generic' || 'specific' }}
|
name: windows-profdata-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||||
|
274
.github/workflows/windows-release-build.yml
vendored
@@ -1,4 +1,8 @@
|
|||||||
name: Windows Release Build
|
name: Windows Release Build
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
@@ -17,151 +21,219 @@ on:
|
|||||||
description: 'The branch to build'
|
description: 'The branch to build'
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
MOZ_BUILD_DATE:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ''
|
||||||
|
use-sccache:
|
||||||
|
description: 'Use sccache'
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
windows-build:
|
windows-build:
|
||||||
name: Build Windows - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
|
name: Build Windows - ${{ matrix.arch }}
|
||||||
runs-on: ubuntu-latest
|
# 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' || 'blacksmith-8vcpu-ubuntu-2404' }}
|
||||||
|
env:
|
||||||
|
SCCACHE_GHA_ENABLED: ${{ inputs.use-sccache && 'true' || 'false' }}
|
||||||
|
CARGO_TERM_COLOR: always
|
||||||
|
RUSTC_WRAPPER: ${{ inputs.use-sccache && 'sccache' || '' }}
|
||||||
|
CARGO_INCREMENTAL: 0
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
generic: [true, false]
|
arch: [x86_64, aarch64]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Free Disk Space (Ubuntu)
|
- name: Free Disk Space (Ubuntu)
|
||||||
uses: jlumbroso/free-disk-space@main
|
uses: jlumbroso/free-disk-space@main
|
||||||
|
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||||
with:
|
with:
|
||||||
# this might remove tools that are actually needed,
|
|
||||||
# if set to "true" but frees about 6 GB
|
|
||||||
tool-cache: false
|
tool-cache: false
|
||||||
|
|
||||||
- name: Install Node.js and pnpm
|
- name: Checkout repository
|
||||||
uses: actions/setup-node@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
token: ${{ secrets.DEPLOY_KEY }}
|
token: ${{ secrets.DEPLOY_KEY }}
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Setup Node.js
|
||||||
run: npm install -g pnpm
|
uses: useblacksmith/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
|
|
||||||
- name: Setup git
|
- 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: |
|
run: |
|
||||||
git config --global user.email "mauro-balades@users.noreply.github.com"
|
git config --global user.email "mauro-balades@users.noreply.github.com"
|
||||||
git config --global user.name "mauro-balades"
|
git config --global user.name "mauro-balades"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
pnpm i
|
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
|
- name: Load Surfer CI setup
|
||||||
run: pnpm surfer ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
run: npm run surfer -- ci --brand ${{ inputs.release-branch }} --display-version ${{ inputs.build-version }}
|
||||||
|
|
||||||
- name: Download
|
- name: Download Firefox and dependencies
|
||||||
run: pnpm surfer download
|
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||||
|
run: npm run download
|
||||||
|
|
||||||
- name: 'win-cross Cache'
|
- name: win-cross Cache
|
||||||
env:
|
env:
|
||||||
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
||||||
id: cache-win-cross
|
id: cache-win-cross
|
||||||
uses: actions/cache@v4
|
uses: useblacksmith/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${HOME}/win-cross
|
path: ${HOME}/win-cross
|
||||||
key: win-cross
|
key: win-cross
|
||||||
|
|
||||||
- name: Configure sccache
|
- name: Setup for Windows
|
||||||
uses: actions/github-script@v7
|
if: steps.cache-win-cross.outputs.cache-hit != 'true' && !(inputs.generate-gpo && matrix.arch == 'aarch64')
|
||||||
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: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
mkdir -p ~/win-cross
|
mkdir -p ~/win-cross
|
||||||
cd engine/
|
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
|
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
|
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
|
tar --zstd -xf wine.tar.zst -C ~/win-cross
|
||||||
rm wine.tar.zst
|
rm wine.tar.zst
|
||||||
|
|
||||||
echo Setup Visual Studio
|
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
|
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
|
||||||
|
|
||||||
|
- name: Import
|
||||||
|
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||||
|
env:
|
||||||
|
SURFER_COMPAT: ${{ matrix.arch }}
|
||||||
|
run: |
|
||||||
|
. "$HOME/.cargo/env"
|
||||||
|
npm run import -- --verbose
|
||||||
|
|
||||||
- name: Bootstrap
|
- name: Bootstrap
|
||||||
|
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
cd engine/
|
cd engine/
|
||||||
|
|
||||||
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
|
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
npm install -g pnpm
|
|
||||||
export SURFER_PLATFORM="win32"
|
export SURFER_PLATFORM="win32"
|
||||||
pnpm surfer bootstrap
|
npm run bootstrap
|
||||||
|
|
||||||
cd engine/
|
cd engine/
|
||||||
ls ~/.mozbuild/clang/lib/clang/
|
ls ~/.mozbuild/clang/lib/clang/
|
||||||
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
|
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
|
||||||
cat ../configs/common/mozconfig
|
cat ../configs/common/mozconfig
|
||||||
|
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install dos2unix
|
sudo apt-get install dos2unix
|
||||||
|
|
||||||
ls ~/win-cross/wine || true
|
ls ~/win-cross/wine || true
|
||||||
ls ~/win-cross/vs2022 || true
|
ls ~/win-cross/vs2022 || true
|
||||||
|
|
||||||
- name: setup Rust
|
- name: Setup Rust
|
||||||
|
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||||
run: |
|
run: |
|
||||||
cd engine/
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain $(cat .rust-toolchain)
|
||||||
# Install a rust version compatible with 17
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.79
|
|
||||||
source $HOME/.cargo/env
|
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
|
rustup target add x86_64-pc-windows-msvc
|
||||||
cargo install cargo-download
|
fi
|
||||||
|
cd engine/
|
||||||
|
cargo install cargo-download --locked
|
||||||
cargo download -x windows=0.58.0
|
cargo download -x windows=0.58.0
|
||||||
#? https://github.com/mozilla/sccache#known-caveats
|
|
||||||
export CARGO_INCREMENTAL=0
|
export CARGO_INCREMENTAL=0
|
||||||
|
|
||||||
echo "" >> ../configs/common/mozconfig
|
echo "" >> ../configs/common/mozconfig
|
||||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.58.0" >> ../configs/common/mozconfig
|
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.58.0" >> ../configs/common/mozconfig
|
||||||
|
|
||||||
- name: Import
|
|
||||||
env:
|
|
||||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
|
||||||
run: pnpm surfer import --verbose
|
|
||||||
|
|
||||||
- name: Build language packs
|
- name: Build language packs
|
||||||
|
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||||
run: sh scripts/download-language-packs.sh
|
run: sh scripts/download-language-packs.sh
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
- name: Download artifact (if use profdata)
|
||||||
name: Download artifact if use profdata
|
uses: actions/download-artifact@v4
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo && matrix.arch == 'x86_64' }}
|
||||||
with:
|
with:
|
||||||
path: ~/artifact
|
path: ~/artifact
|
||||||
name: windows-profdata-${{ matrix.generic == true && 'generic' || 'specific' }}
|
name: windows-profdata-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||||
|
|
||||||
- name: Show artifact info
|
- name: Show artifact info
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo && matrix.arch == 'x86_64' }}
|
||||||
run: |
|
run: |
|
||||||
ls ~/artifact
|
ls ~/artifact
|
||||||
ls ~/artifact/en-US.log
|
ls ~/artifact/en-US.log
|
||||||
ls ~/artifact/merged.profdata
|
ls ~/artifact/merged.profdata
|
||||||
|
|
||||||
chmod +x ~/artifact/en-US.log
|
chmod +x ~/artifact/en-US.log
|
||||||
chmod +x ~/artifact/merged.profdata
|
chmod +x ~/artifact/merged.profdata
|
||||||
|
|
||||||
|
- name: Insert API Keys
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.zen-keys
|
||||||
|
echo "${{ secrets.ZEN_SAFEBROWSING_API_KEY }}" > ~/.zen-keys/safebrowsing.dat
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
|
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||||
env:
|
env:
|
||||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
SURFER_COMPAT: ${{ matrix.arch }}
|
||||||
|
ZEN_RELEASE_BRANCH: ${{ inputs.release-branch }}
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
dos2unix configs/windows/mozconfig
|
dos2unix configs/windows/mozconfig
|
||||||
@@ -170,26 +242,32 @@ jobs:
|
|||||||
if test ${{ inputs.generate-gpo }} = true; then
|
if test ${{ inputs.generate-gpo }} = true; then
|
||||||
export ZEN_GA_GENERATE_PROFILE=1
|
export ZEN_GA_GENERATE_PROFILE=1
|
||||||
fi
|
fi
|
||||||
sh .github/workflows/src/release-build.sh
|
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
|
- name: Package
|
||||||
|
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||||
env:
|
env:
|
||||||
SURFER_COMPAT: ${{ matrix.generic == true }}
|
SURFER_COMPAT: ${{ matrix.arch }}
|
||||||
|
ZEN_GA_DISABLE_PGO: true
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
export SURFER_PLATFORM="win32"
|
export SURFER_PLATFORM="win32"
|
||||||
pnpm package
|
export ZEN_CROSS_COMPILING=1
|
||||||
mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64.zip zen.win64.zip
|
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 ./dist
|
||||||
ls .
|
ls .
|
||||||
|
|
||||||
- name: 🐛 Debug Session
|
- name: Remove API Keys
|
||||||
if: ${{ failure() }}
|
run: |
|
||||||
uses: Warpbuilds/gha-debug@v1.3
|
rm -rf ~/.zen-keys
|
||||||
timeout-minutes: 15
|
|
||||||
|
|
||||||
- name: Move package for PGO upload
|
- name: Move package for PGO upload
|
||||||
if: ${{ inputs.generate-gpo }}
|
if: ${{ inputs.generate-gpo && matrix.arch == 'x86_64' }}
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
|
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
|
||||||
@@ -197,55 +275,69 @@ jobs:
|
|||||||
- name: Rename artifacts
|
- name: Rename artifacts
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo }}
|
||||||
run: |
|
run: |
|
||||||
mv ./zen.win64.zip zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
mv ./zen.win64.zip zen.win-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}.zip
|
||||||
mv ./dist/output.mar windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
mv ./dist/output.mar windows${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.mar
|
||||||
mv ./dist/zen.installer.exe ./zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
mv ./dist/zen.installer.exe ./zen.installer${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.exe
|
||||||
|
|
||||||
- name: Upload PGO build
|
- name: Upload artifact (PGO)
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: ${{ inputs.generate-gpo }}
|
if: ${{ inputs.generate-gpo && matrix.arch == 'x86_64' }}
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.generic == true && 'generic' || 'specific' }}-${{ inputs.profile-data-path-archive }}
|
retention-days: 5
|
||||||
|
name: ${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}-${{ inputs.profile-data-path-archive }}
|
||||||
path: ./zen.win64-pgo-stage-1.zip
|
path: ./zen.win64-pgo-stage-1.zip
|
||||||
|
|
||||||
- name: Remove unnecessary files from obj
|
- name: Remove unnecessary files from obj
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo }}
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
find engine/obj-x86_64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type d -not -name 'dist' -exec rm -rf {} \;
|
mkdir obj-${{ matrix.arch }}-pc-windows-msvc/
|
||||||
find engine/obj-x86_64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type f -not -name 'dist' -exec rm -f {} \;
|
|
||||||
|
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
|
- name: Upload dist object
|
||||||
if: ${{ !inputs.generate-gpo }}
|
if: ${{ !inputs.generate-gpo }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: windows-x64-obj-${{ matrix.generic == true && 'generic' || 'specific' }}
|
retention-days: 2
|
||||||
path: engine/obj-x86_64-pc-windows-msvc/
|
name: windows-x64-obj-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||||
|
path: obj-${{ matrix.arch }}-pc-windows-msvc
|
||||||
|
|
||||||
- name: Upload zip file if twilight branch
|
- name: Upload artifact (if Twilight branch, binary)
|
||||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
retention-days: 5
|
||||||
path: ./zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
|
name: zen.win-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}.zip
|
||||||
|
path: ./zen.win-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}.zip
|
||||||
|
|
||||||
- name: Upload installer if twilight branch
|
- name: Upload artifact (if Twilight branch, installer)
|
||||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
retention-days: 5
|
||||||
path: ./zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
|
name: zen.installer${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.exe
|
||||||
|
path: ./zen.installer${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.exe
|
||||||
|
|
||||||
- name: Upload mar if twilight branch
|
- name: Upload artifact (if Twilight branch, .mar)
|
||||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
retention-days: 5
|
||||||
path: ./windows${{ matrix.generic == true && '-generic' || '' }}.mar
|
name: windows${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.mar
|
||||||
|
path: ./windows${{ matrix.arch == 'aarch64' && '-arm64' || '' }}.mar
|
||||||
|
|
||||||
- name: Upload update manifests if twilight branch
|
- name: Upload artifact (if Twilight branch, update manifests)
|
||||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: windows_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }}
|
retention-days: 5
|
||||||
|
name: windows_update_manifest_${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||||
path: ./dist/update
|
path: ./dist/update
|
||||||
|
13
.gitignore
vendored
@@ -1,3 +1,6 @@
|
|||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
.dotbuild/
|
.dotbuild/
|
||||||
engine/
|
engine/
|
||||||
@@ -9,3 +12,13 @@ __pycache__/
|
|||||||
dist/
|
dist/
|
||||||
|
|
||||||
windsign-temp/
|
windsign-temp/
|
||||||
|
venv/
|
||||||
|
|
||||||
|
!firefox-cache/
|
||||||
|
win-cross/
|
||||||
|
|
||||||
|
!firefox-patches/
|
||||||
|
target/
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
locales/firefox-l10n/
|
||||||
|
3
.gitmodules
vendored
@@ -1,3 +0,0 @@
|
|||||||
[submodule "l10n"]
|
|
||||||
path = l10n
|
|
||||||
url = https://github.com/zen-browser/l10n-packs
|
|
@@ -1 +1 @@
|
|||||||
# npx lint-staged
|
npx lint-staged
|
||||||
|
@@ -1,12 +1,37 @@
|
|||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
engine/
|
engine/
|
||||||
|
|
||||||
**/*.html
|
**/*.html
|
||||||
**/*.xhtml
|
**/*.xhtml
|
||||||
**/*.inc.xhtml
|
**/*.inc.xhtml
|
||||||
|
**/*.bundle.min.js
|
||||||
|
**/*.min.js
|
||||||
|
**/*.min.mjs
|
||||||
|
|
||||||
**/*.svg
|
**/*.svg
|
||||||
|
|
||||||
|
**/*.inc.css
|
||||||
|
|
||||||
|
surfer.json
|
||||||
|
|
||||||
src/browser/app/profile/*.js
|
src/browser/app/profile/*.js
|
||||||
pnpm-lock.yaml
|
pnpm-lock.yaml
|
||||||
|
|
||||||
**/engine/
|
**/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.css
|
||||||
|
src/zen/compact-mode/zen-compact-mode.css
|
||||||
|
src/zen/common/ZenEmojis.mjs
|
||||||
|
|
||||||
|
src/zen/workspaces/zen-workspaces.css
|
||||||
|
|
||||||
|
*.inc
|
||||||
|
@@ -7,6 +7,6 @@
|
|||||||
"useTabs": false,
|
"useTabs": false,
|
||||||
"jsxSingleQuote": false,
|
"jsxSingleQuote": false,
|
||||||
"semi": true,
|
"semi": true,
|
||||||
"printWidth": 128,
|
"printWidth": 100,
|
||||||
"plugins": []
|
"plugins": ["prettier-plugin-sh"]
|
||||||
}
|
}
|
||||||
|
1
.python-version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
3.11
|
1
.rust-toolchain
Normal file
@@ -0,0 +1 @@
|
|||||||
|
1.82
|
30
.vscode/settings.json
vendored
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"files.associations": {
|
|
||||||
"*.inc": "cpp",
|
|
||||||
"typeindex": "cpp",
|
|
||||||
"typeinfo": "cpp",
|
|
||||||
"functional": "cpp",
|
|
||||||
"array": "cpp",
|
|
||||||
"*.tcc": "cpp",
|
|
||||||
"memory": "cpp",
|
|
||||||
"future": "cpp",
|
|
||||||
"istream": "cpp",
|
|
||||||
"tuple": "cpp",
|
|
||||||
"utility": "cpp",
|
|
||||||
"variant": "cpp",
|
|
||||||
"compare": "cpp",
|
|
||||||
"thread": "cpp",
|
|
||||||
"string": "cpp",
|
|
||||||
"string_view": "cpp",
|
|
||||||
"span": "cpp",
|
|
||||||
"vector": "cpp",
|
|
||||||
"charconv": "cpp",
|
|
||||||
"chrono": "cpp",
|
|
||||||
"optional": "cpp",
|
|
||||||
"format": "cpp",
|
|
||||||
"ratio": "cpp",
|
|
||||||
"system_error": "cpp",
|
|
||||||
"regex": "cpp",
|
|
||||||
"type_traits": "cpp"
|
|
||||||
}
|
|
||||||
}
|
|
1
.well-known/funding-manifest-urls
Normal file
@@ -0,0 +1 @@
|
|||||||
|
https://zen-browser.app/funding.json
|
@@ -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 +1 @@
|
|||||||
* @mauro-balades
|
* @mr-cheffy
|
||||||
|
@@ -1,3 +1,9 @@
|
|||||||
|
<!--
|
||||||
|
- This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
-->
|
||||||
|
|
||||||
# Contributor Covenant Code of Conduct
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
## Our Pledge
|
## Our Pledge
|
||||||
@@ -17,23 +23,23 @@ diverse, inclusive, and healthy community.
|
|||||||
Examples of behavior that contributes to a positive environment for our
|
Examples of behavior that contributes to a positive environment for our
|
||||||
community include:
|
community include:
|
||||||
|
|
||||||
* Demonstrating empathy and kindness toward other people
|
- Demonstrating empathy and kindness toward other people
|
||||||
* Being respectful of differing opinions, viewpoints, and experiences
|
- Being respectful of differing opinions, viewpoints, and experiences
|
||||||
* Giving and gracefully accepting constructive feedback
|
- Giving and gracefully accepting constructive feedback
|
||||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
and learning from the experience
|
and learning from the experience
|
||||||
* Focusing on what is best not just for us as individuals, but for the
|
- Focusing on what is best not just for us as individuals, but for the
|
||||||
overall community
|
overall community
|
||||||
|
|
||||||
Examples of unacceptable behavior include:
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
* The use of sexualized language or imagery, and sexual attention or
|
- The use of sexualized language or imagery, and sexual attention or
|
||||||
advances of any kind
|
advances of any kind
|
||||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
* Public or private harassment
|
- Public or private harassment
|
||||||
* Publishing others' private information, such as a physical or email
|
- Publishing others' private information, such as a physical or email
|
||||||
address, without their explicit permission
|
address, without their explicit permission
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
- Other conduct which could reasonably be considered inappropriate in a
|
||||||
professional setting
|
professional setting
|
||||||
|
|
||||||
## Enforcement Responsibilities
|
## Enforcement Responsibilities
|
||||||
|
116
README.md
@@ -1,12 +1,18 @@
|
|||||||
<img src="./docs/assets/zen-black.svg" width="100px" align="left">
|
<!--
|
||||||
|
- This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
-->
|
||||||
|
<!-- TODO: Get a job -->
|
||||||
|
<img src="./docs/assets/zen-dark.svg" width="100px" align="left">
|
||||||
|
|
||||||
### `Zen Browser`
|
### `Zen Browser`
|
||||||
|
|
||||||
[](https://github.com/zen-browser/desktop/releases)
|
[](https://github.com/zen-browser/desktop/releases)
|
||||||
[](https://crowdin.com/project/zen-browser)
|
[](https://crowdin.com/project/zen-browser)
|
||||||
|
[](https://github.com/zen-browser/desktop/actions/workflows/build.yml)
|
||||||
|
|
||||||
|
Zen is a firefox-based browser with the aim of pushing your productivity to a new level!
|
||||||
✨ Experience tranquillity while browsing the web without people tracking you! Zen is a privacy-focused browser that blocks trackers, ads, and other unwanted content while offering the best browsing experience!
|
|
||||||
|
|
||||||
<div flex="true">
|
<div flex="true">
|
||||||
<a href="https://zen-browser.app/download">
|
<a href="https://zen-browser.app/download">
|
||||||
@@ -26,107 +32,21 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## 🖥️ Compatibility
|
### Firefox Versions
|
||||||
|
|
||||||
Zen is currently built using firefox version `132.0.1`! 🚀
|
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `142.0.1`! 🚀
|
||||||
|
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 142.0.1`!
|
||||||
|
|
||||||
- Check out the latest [release notes](https://zen-browser.app/release-notes)!
|
### Contributing
|
||||||
- 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!
|
|
||||||
|
|
||||||
## 🤝 Contribution
|
If you'd like to report a bug, please do so on our [GitHub Issues page](https://github.com/zen-browser/desktop/issues/) and for feature requests, you can use [Github Discussions](https://github.com/zen-browser/desktop/discussions).
|
||||||
|
|
||||||
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!
|
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!
|
||||||
|
|
||||||
## ⚡ Performance
|
#### Partners
|
||||||
|
|
||||||
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)!
|
Thanks to all the partners of Zen for their support and contributions:
|
||||||
|
|
||||||
## 📥 Installation
|
<a href="https://blacksmith.sh">
|
||||||
|
<img src="./docs/assets/blacksmith-yellow.png" width="350px"/>
|
||||||
### 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 dont 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
|
|
||||||
# Generic version
|
|
||||||
winget install --id Zen-Team.Zen-Browser
|
|
||||||
|
|
||||||
# Optimized version
|
|
||||||
winget install --id Zen-Team.Zen-Browser.Optimized
|
|
||||||
```
|
|
||||||
|
|
||||||
#### macOS
|
|
||||||
|
|
||||||
- Requires macOS 10.15 or later
|
|
||||||
- Available for ARM and Intel architectures
|
|
||||||
|
|
||||||
You can also install Zen using Homebrew:
|
|
||||||
|
|
||||||
```
|
|
||||||
brew install --cask zen-browser
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Linux
|
|
||||||
|
|
||||||
##### Arch-based distributions
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# For generic version
|
|
||||||
yay -S zen-browser-bin
|
|
||||||
|
|
||||||
# For optimized version
|
|
||||||
yay -S zen-browser-avx2-bin
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Other Linux distributions (AppImage with automated system integration)
|
|
||||||
|
|
||||||
- `zsync` is required for the Update feature of the script below
|
|
||||||
|
|
||||||
```sh
|
|
||||||
bash <(curl https://updates.zen-browser.app/appimage.sh)
|
|
||||||
```
|
|
||||||
|
|
||||||
* 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/components).
|
|
||||||
|
|
||||||
#### `Run Locally`
|
|
||||||
|
|
||||||
In order to download and run zen locally, please follow [these instructions](https://docs.zen-browser.app/contribute/desktop).
|
|
||||||
|
|
||||||
#### `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)
|
|
||||||
|
|
||||||
### 🖥️ Comparison with other browsers
|
|
||||||
|
|
||||||
As you can see, chromium based browsers are the most popular browsers, help us change that by starring the project and spreading the word! 🌟
|
|
||||||
|
|
||||||
<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,chromium/chromium,brave/brave-browser&type=Date&theme=dark" />
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zen-browser/desktop,chromium/chromium,brave/brave-browser&type=Date" />
|
|
||||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=chromium/chromium,zen-browser/desktop,brave/brave-browser&type=Date" />
|
|
||||||
</picture>
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
## 📄 License
|
|
||||||
|
|
||||||
Zen browser is under the [MPL LICENSE](./LICENSE). All the code is open-source and free to use! Attributions are appreciated but not required.
|
|
||||||
|
@@ -3,4 +3,9 @@
|
|||||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
-->
|
-->
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 -960 960 960"><path d="M200-446.667v-66.666h560v66.666H200Z"/></svg>
|
|
||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
Please report security vulnerabilities [here](https://github.com/zen-browser/desktop/security/advisories/new)
|
Before Width: | Height: | Size: 395 B After Width: | Height: | Size: 380 B |
3
babel.config.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"presets": ["@babel/preset-typescript"]
|
||||||
|
}
|
10
build/AppDir/AppRun
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
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" "$@"
|
@@ -5,7 +5,7 @@ Exec=zen %u
|
|||||||
Icon=zen
|
Icon=zen
|
||||||
Type=Application
|
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;
|
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;
|
Categories=Network;WebBrowser;
|
||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
Terminal=false
|
Terminal=false
|
@@ -1,32 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<!--
|
|
||||||
Entitlements to apply to the main browser process executable during
|
|
||||||
codesigning of production channel builds.
|
|
||||||
-->
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<!-- Firefox needs to create executable pages (without MAP_JIT) -->
|
|
||||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key><true/>
|
|
||||||
|
|
||||||
<!-- Firefox needs to create executable pages with MAP_JIT on aarch64 -->
|
|
||||||
<key>com.apple.security.cs.allow-jit</key><true/>
|
|
||||||
|
|
||||||
<!-- Allow loading third party libraries. Needed for Flash and CDMs -->
|
|
||||||
<key>com.apple.security.cs.disable-library-validation</key><true/>
|
|
||||||
|
|
||||||
<!-- Firefox needs to access the microphone on sites the user allows -->
|
|
||||||
<key>com.apple.security.device.audio-input</key><true/>
|
|
||||||
|
|
||||||
<!-- Firefox needs to access the camera on sites the user allows -->
|
|
||||||
<key>com.apple.security.device.camera</key><true/>
|
|
||||||
|
|
||||||
<!-- Firefox needs to access the location on sites the user allows -->
|
|
||||||
<key>com.apple.security.personal-information.location</key><true/>
|
|
||||||
|
|
||||||
<!-- Allow Firefox to send Apple events to other applications. Needed
|
|
||||||
for native messaging webextension helper applications launched by
|
|
||||||
Firefox which rely on Apple Events to signal other processes. -->
|
|
||||||
<key>com.apple.security.automation.apple-events</key><true/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@@ -1,169 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
||||||
#
|
|
||||||
# Runs codesign commands to codesign a Firefox .app bundle and enable macOS
|
|
||||||
# Hardened Runtime. Intended to be manually run by developers working on macOS
|
|
||||||
# 10.14+ who want to enable Hardened Runtime for manual testing. This is
|
|
||||||
# provided as a stop-gap until automated build tooling is available that signs
|
|
||||||
# binaries with a certificate generated during builds (bug 1522409). This
|
|
||||||
# script requires macOS 10.14 because Hardened Runtime is only available for
|
|
||||||
# applications running on 10.14 despite support for the codesign "-o runtime"
|
|
||||||
# option being available in 10.13.6 and newer.
|
|
||||||
#
|
|
||||||
# The script requires an identity string (-i option) from an Apple Developer
|
|
||||||
# ID certificate. This can be found in the macOS KeyChain after configuring an
|
|
||||||
# Apple Developer ID certificate.
|
|
||||||
#
|
|
||||||
# Example usage on macOS 10.14:
|
|
||||||
#
|
|
||||||
# $ ./mach build
|
|
||||||
# $ ./mach build package
|
|
||||||
# $ open </PATH/TO/DMG/FILE.dmg>
|
|
||||||
# <Drag Nightly.app to ~>
|
|
||||||
# $ ./security/mac/hardenedruntime/codesign.bash \
|
|
||||||
# -a ~/Nightly.app \
|
|
||||||
# -i <MY-IDENTITY-STRING> \
|
|
||||||
# -b security/mac/hardenedruntime/browser.developer.entitlements.xml
|
|
||||||
# -p security/mac/hardenedruntime/plugin-container.developer.entitlements.xml
|
|
||||||
# $ open ~/Nightly.app
|
|
||||||
#
|
|
||||||
|
|
||||||
usage ()
|
|
||||||
{
|
|
||||||
echo "Usage: $0 "
|
|
||||||
echo " -a <PATH-TO-BROWSER.app>"
|
|
||||||
echo " -i <IDENTITY>"
|
|
||||||
echo " -b <ENTITLEMENTS-FILE>"
|
|
||||||
echo " -p <CHILD-ENTITLEMENTS-FILE>"
|
|
||||||
echo " [-o <OUTPUT-DMG-FILE>]"
|
|
||||||
exit -1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Make sure we are running on macOS with the sw_vers command available.
|
|
||||||
SWVERS=/usr/bin/sw_vers
|
|
||||||
if [ ! -x ${SWVERS} ]; then
|
|
||||||
echo "ERROR: macOS 10.14 or later is required"
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Require macOS 10.14 or newer.
|
|
||||||
#OSVERSION=`${SWVERS} -productVersion|sed -En 's/[0-9]+\.([0-9]+)\.[0-9]+/\1/p'`;
|
|
||||||
#if [ ${OSVERSION} \< 14 ]; then
|
|
||||||
# echo "ERROR: macOS 10.14 or later is required"
|
|
||||||
# exit -1
|
|
||||||
#fi
|
|
||||||
|
|
||||||
while getopts "a:i:b:o:p:" opt; do
|
|
||||||
case ${opt} in
|
|
||||||
a ) BUNDLE=$OPTARG ;;
|
|
||||||
i ) IDENTITY=$OPTARG ;;
|
|
||||||
b ) BROWSER_ENTITLEMENTS_FILE=$OPTARG ;;
|
|
||||||
p ) PLUGINCONTAINER_ENTITLEMENTS_FILE=$OPTARG ;;
|
|
||||||
o ) OUTPUT_DMG_FILE=$OPTARG ;;
|
|
||||||
\? ) usage; exit -1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "${BUNDLE}" ] ||
|
|
||||||
[ -z "${IDENTITY}" ] ||
|
|
||||||
[ -z "${PLUGINCONTAINER_ENTITLEMENTS_FILE}" ] ||
|
|
||||||
[ -z "${BROWSER_ENTITLEMENTS_FILE}" ]; then
|
|
||||||
usage
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d "${BUNDLE}" ]; then
|
|
||||||
echo "Invalid bundle. Bundle should be a .app directory"
|
|
||||||
usage
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -e "${PLUGINCONTAINER_ENTITLEMENTS_FILE}" ]; then
|
|
||||||
echo "Invalid entitlements file"
|
|
||||||
usage
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -e "${BROWSER_ENTITLEMENTS_FILE}" ]; then
|
|
||||||
echo "Invalid entitlements file"
|
|
||||||
usage
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# DMG file output flag is optional
|
|
||||||
if [ ! -z "${OUTPUT_DMG_FILE}" ] &&
|
|
||||||
[ -e "${OUTPUT_DMG_FILE}" ]; then
|
|
||||||
echo "Output dmg file ${OUTPUT_DMG_FILE} exists. Please delete it first."
|
|
||||||
usage
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "-------------------------------------------------------------------------"
|
|
||||||
echo "bundle: $BUNDLE"
|
|
||||||
echo "identity: $IDENTITY"
|
|
||||||
echo "browser entitlements file: $BROWSER_ENTITLEMENTS_FILE"
|
|
||||||
echo "plugin-container entitlements file: $PLUGINCONTAINER_ENTITLEMENTS_FILE"
|
|
||||||
echo "output dmg file (optional): $OUTPUT_DMG_FILE"
|
|
||||||
echo "-------------------------------------------------------------------------"
|
|
||||||
|
|
||||||
set -x
|
|
||||||
|
|
||||||
# Clear extended attributes which cause codesign to fail
|
|
||||||
xattr -cr "${BUNDLE}"
|
|
||||||
|
|
||||||
# Sign these binaries first. Signing of some binaries has an ordering
|
|
||||||
# requirement where other binaries must be signed first.
|
|
||||||
codesign --force -o runtime --verbose --sign "$IDENTITY" \
|
|
||||||
"${BUNDLE}/Contents/Library/LaunchServices/org.mozilla.updater" \
|
|
||||||
"${BUNDLE}/Contents/MacOS/XUL" \
|
|
||||||
"${BUNDLE}/Contents/MacOS/pingsender" \
|
|
||||||
"${BUNDLE}/Contents/MacOS/*.dylib" \
|
|
||||||
|
|
||||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
|
||||||
"${BUNDLE}"/Contents/MacOS/updater.app
|
|
||||||
|
|
||||||
# Sign zen main executable
|
|
||||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
|
||||||
--entitlements ${BROWSER_ENTITLEMENTS_FILE} \
|
|
||||||
"${BUNDLE}"/Contents/MacOS/zen
|
|
||||||
|
|
||||||
# Sign Library/LaunchServices
|
|
||||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
|
||||||
"${BUNDLE}"/Contents/Library/LaunchServices/org.mozilla.updater
|
|
||||||
|
|
||||||
# Sign gmp-clearkey files
|
|
||||||
find "${BUNDLE}"/Contents/Resources/gmp-clearkey -type f -exec \
|
|
||||||
codesign --force -o runtime --verbose --sign "$IDENTITY" {} \;
|
|
||||||
|
|
||||||
# Sign the main bundle
|
|
||||||
codesign --force -o runtime --verbose --sign "$IDENTITY" \
|
|
||||||
--entitlements ${BROWSER_ENTITLEMENTS_FILE} "${BUNDLE}"
|
|
||||||
|
|
||||||
# Sign the plugin-container bundle with deep
|
|
||||||
codesign --force -o runtime --verbose --sign "$IDENTITY" --deep \
|
|
||||||
--entitlements ${PLUGINCONTAINER_ENTITLEMENTS_FILE} \
|
|
||||||
"${BUNDLE}"/Contents/MacOS/plugin-container.app
|
|
||||||
|
|
||||||
# Validate
|
|
||||||
codesign -vvv --deep --strict "${BUNDLE}"
|
|
||||||
|
|
||||||
# Create a DMG
|
|
||||||
if [ ! -z "${OUTPUT_DMG_FILE}" ]; then
|
|
||||||
DISK_IMAGE_DIR=`mktemp -d`
|
|
||||||
TEMP_FILE=`mktemp`
|
|
||||||
TEMP_DMG=${TEMP_FILE}.dmg
|
|
||||||
NAME=`basename "${BUNDLE}"`
|
|
||||||
|
|
||||||
ditto "${BUNDLE}" "${DISK_IMAGE_DIR}/${NAME}"
|
|
||||||
hdiutil create -size 400m -fs HFS+ \
|
|
||||||
-volname Firefox -srcfolder "${DISK_IMAGE_DIR}" "${TEMP_DMG}"
|
|
||||||
hdiutil convert -format UDZO \
|
|
||||||
-o "${OUTPUT_DMG_FILE}" "${TEMP_DMG}"
|
|
||||||
|
|
||||||
rm ${TEMP_FILE}
|
|
||||||
rm ${TEMP_DMG}
|
|
||||||
rm -rf "${DISK_IMAGE_DIR}"
|
|
||||||
fi
|
|
@@ -1,32 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<!--
|
|
||||||
Entitlements to apply to the plugin-container.app bundle during
|
|
||||||
codesigning of production channel builds.
|
|
||||||
-->
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<!-- Firefox needs to create executable pages (without MAP_JIT) -->
|
|
||||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key><true/>
|
|
||||||
|
|
||||||
<!-- Firefox needs to create executable pages with MAP_JIT on aarch64 -->
|
|
||||||
<key>com.apple.security.cs.allow-jit</key><true/>
|
|
||||||
|
|
||||||
<!-- Allow loading third party libraries. Needed for Flash and CDMs -->
|
|
||||||
<key>com.apple.security.cs.disable-library-validation</key><true/>
|
|
||||||
|
|
||||||
<!-- Firefox needs to access the microphone on sites the user allows -->
|
|
||||||
<key>com.apple.security.device.audio-input</key><true/>
|
|
||||||
|
|
||||||
<!-- Firefox needs to access the camera on sites the user allows -->
|
|
||||||
<key>com.apple.security.device.camera</key><true/>
|
|
||||||
|
|
||||||
<!-- Firefox needs to access the location on sites the user allows -->
|
|
||||||
<key>com.apple.security.personal-information.location</key><true/>
|
|
||||||
|
|
||||||
<!-- Allow Firefox to send Apple events to other applications. Needed
|
|
||||||
for native messaging webextension helper applications launched by
|
|
||||||
Firefox which rely on Apple Events to signal other processes. -->
|
|
||||||
<key>com.apple.security.automation.apple-events</key><true/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
1
build/firefox-cache/l10n-last-commit-hash
Normal file
@@ -0,0 +1 @@
|
|||||||
|
df0d5e625b9e55c502d3e9e81b29a0d52d0f8d20
|
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
|
14
build/ts/transform-ts.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
const MJS_FILES = ['src/zen/split-view/ZenViewSplitter.ts'];
|
||||||
|
|
||||||
|
for (const file of MJS_FILES) {
|
||||||
|
const code = fs.readFileSync(file, 'utf8');
|
||||||
|
require('@babel/core').transformSync(code, {
|
||||||
|
presets: ['@babel/preset-typescript'],
|
||||||
|
filename: file,
|
||||||
|
});
|
||||||
|
}
|
13
build/winsign/bootstrap.ps1
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
(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 ..
|
15
build/winsign/firefox_update.ps1
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
Remove-Item -Recurse -Force engine
|
||||||
|
Remove-Item -Recurse -Force .surfer
|
||||||
|
|
||||||
|
npm run init
|
||||||
|
|
||||||
|
$job = Start-Job -ScriptBlock {
|
||||||
|
npm run build
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wait for job to complete with timeout (in seconds)
|
||||||
|
$job | Wait-Job -Timeout 5
|
@@ -1,3 +1,7 @@
|
|||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
param(
|
param(
|
||||||
[string][Parameter(Mandatory=$true)]$SignIdentity,
|
[string][Parameter(Mandatory=$true)]$SignIdentity,
|
||||||
[string][Parameter(Mandatory=$true)]$GithubRunId
|
[string][Parameter(Mandatory=$true)]$GithubRunId
|
||||||
@@ -6,105 +10,204 @@ param(
|
|||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
echo "Preparing environment"
|
echo "Preparing environment"
|
||||||
git pull --recurse-submodules
|
git pull origin dev --recurse
|
||||||
mkdir windsign-temp -ErrorAction SilentlyContinue
|
mkdir windsign-temp -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
# Download in parallel
|
# Download in parallel
|
||||||
|
|
||||||
#show output too
|
#show output too
|
||||||
Start-Job -Name "DownloadGitObjectsRepo" -ScriptBlock {
|
#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)
|
param($PWD)
|
||||||
echo "Downloading git objects repo to $PWD\windsign-temp\windows-binaries"
|
cd $PWD
|
||||||
git clone https://github.com/zen-browser/windows-binaries.git $PWD\windsign-temp\windows-binaries
|
$env:ZEN_L10N_CURR_DIR=[regex]::replace($PWD, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\", "/"
|
||||||
echo "Downloaded git objects repo to"
|
C:\mozilla-build\start-shell.bat $PWD\scripts\download-language-packs.sh
|
||||||
|
echo "Fetched l10n and Firefox's one"
|
||||||
} -Verbose -ArgumentList $PWD -Debug
|
} -Verbose -ArgumentList $PWD -Debug
|
||||||
|
|
||||||
gh run download $GithubRunId --name windows-x64-obj-specific -D windsign-temp\windows-x64-obj-specific
|
Start-Job -Name "SurferInit" -ScriptBlock {
|
||||||
echo "Downloaded specific artifacts"
|
param($PWD)
|
||||||
gh run download $GithubRunId --name windows-x64-obj-generic -D windsign-temp\windows-x64-obj-generic
|
cd $PWD
|
||||||
echo "Downloaded generic artifacts"
|
npm run import -- --verbose
|
||||||
|
npm run surfer -- ci --brand release
|
||||||
|
} -Verbose -ArgumentList $PWD -Debug
|
||||||
|
|
||||||
Wait-Job -Name "DownloadGitObjectsRepo"
|
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
|
mkdir engine\obj-x86_64-pc-windows-msvc\ -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
pnpm surfer ci --brand alpha
|
# 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"
|
||||||
|
$env:SCCACHE_GHA_ENABLED="false"
|
||||||
|
Wait-Job -Name "SurferInit"
|
||||||
|
Wait-Job -Name "DownloadGitl10n"
|
||||||
|
|
||||||
function SignAndPackage($name) {
|
function SignAndPackage($name) {
|
||||||
echo "Executing on $name"
|
echo "Executing on $name"
|
||||||
rmdir .\dist -Recurse -ErrorAction SilentlyContinue
|
rmdir .\dist -Recurse -ErrorAction SilentlyContinue
|
||||||
rmdir engine\obj-x86_64-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
rmdir engine\obj-$name-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||||
cp windsign-temp\windows-x64-obj-$name engine\obj-x86_64-pc-windows-msvc\ -Recurse
|
$objName=$name
|
||||||
echo "Signing $name"
|
# instead of arm, use aarch64
|
||||||
|
if ($name -eq "arm64") {
|
||||||
# Collect all .exe and .dll files into a list
|
$objName="aarch64"
|
||||||
$files = Get-ChildItem engine\obj-x86_64-pc-windows-msvc\ -Recurse -Include *.exe
|
|
||||||
$files += Get-ChildItem engine\obj-x86_64-pc-windows-msvc\ -Recurse -Include *.dll
|
|
||||||
|
|
||||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
|
||||||
echo "Packaging $name"
|
|
||||||
$env:SURFER_SIGNING_MODE="sign"
|
|
||||||
$env:MAR="$PWD\\build\\winsign\\mar.exe"
|
|
||||||
if ($name -eq "generic") {
|
|
||||||
$env:SURFER_COMPAT="true"
|
|
||||||
} else {
|
|
||||||
rm env:SURFER_COMPAT -ErrorAction SilentlyContinue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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"
|
echo "Compat Mode? $env:SURFER_COMPAT"
|
||||||
pnpm surfer package --verbose
|
|
||||||
|
# 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:
|
# In the release script, we do the following:
|
||||||
# tar -xvf .github/workflows/object/windows-x64-signed-generic.tar.gz -C windows-x64-signed-generic
|
# 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
|
# We need to create a tar with the same structure and no top-level directory
|
||||||
# Inside, we need:
|
# Inside, we need:
|
||||||
# - update_manifest/*
|
# - update_manifest/*
|
||||||
# - windows.mar or windows-generic.mar
|
# - windows.mar
|
||||||
# - zen.installer.exe or zen.installer-generic.exe
|
# - zen.installer.exe
|
||||||
# - zen.win-generic.zip or zen.win-specific.zip
|
|
||||||
echo "Creating tar for $name"
|
echo "Creating tar for $name"
|
||||||
rm .\windsign-temp\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
rm .\windsign-temp\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
||||||
mkdir windsign-temp\windows-x64-signed-$name
|
mkdir windsign-temp\windows-x64-signed-$name
|
||||||
|
|
||||||
# Move the MAR, add the `-generic` suffix if needed
|
# Move the MAR, add the `-arm64` suffix if needed
|
||||||
if ($name -eq "generic") {
|
echo "Moving MAR for $name"
|
||||||
mv .\dist\output.mar windsign-temp\windows-x64-signed-$name\windows-generic.mar
|
if ($name -eq "arm64") {
|
||||||
|
mv .\dist\output.mar windsign-temp\windows-x64-signed-$name\windows-$name.mar
|
||||||
} else {
|
} else {
|
||||||
mv .\dist\output.mar windsign-temp\windows-x64-signed-$name\windows.mar
|
mv .\dist\output.mar windsign-temp\windows-x64-signed-$name\windows.mar
|
||||||
}
|
}
|
||||||
|
|
||||||
# Move the installer
|
# Move the installer
|
||||||
if ($name -eq "generic") {
|
echo "Moving installer for $name"
|
||||||
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer-generic.exe
|
if ($name -eq "arm64") {
|
||||||
|
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer-$name.exe
|
||||||
} else {
|
} else {
|
||||||
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer.exe
|
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer.exe
|
||||||
}
|
}
|
||||||
|
|
||||||
# Move the zip
|
|
||||||
mv (Get-Item .\dist\*.en-US.win64.zip) windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
|
||||||
|
|
||||||
# Extract the zip, sign everything inside, and repackage it
|
|
||||||
Expand-Archive -Path windsign-temp\windows-x64-signed-$name\zen.win-$name.zip -DestinationPath windsign-temp\windows-x64-signed-$name\zen.win-$name
|
|
||||||
rm windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
|
||||||
$files = Get-ChildItem windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -Include *.exe
|
|
||||||
$files += Get-ChildItem windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -Include *.dll
|
|
||||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
|
||||||
Compress-Archive -Path windsign-temp\windows-x64-signed-$name\zen.win-$name -DestinationPath windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
|
||||||
rmdir windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -ErrorAction SilentlyContinue
|
|
||||||
|
|
||||||
# Move the manifest
|
# Move the manifest
|
||||||
mv .\dist\update\. windsign-temp\windows-x64-signed-$name\update_manifest
|
mv .\dist\update\. windsign-temp\windows-x64-signed-$name\update_manifest
|
||||||
|
|
||||||
echo "Invoking tar for $name"
|
|
||||||
# note: We need to sign it into a parent folder, called windows-x64-signed-$name
|
# 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
|
rmdir .\windsign-temp\windows-binaries\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
||||||
mv windsign-temp\windows-x64-signed-$name .\windsign-temp\windows-binaries -Force
|
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"
|
echo "Finished $name"
|
||||||
}
|
}
|
||||||
|
|
||||||
SignAndPackage specific
|
SignAndPackage arm64
|
||||||
SignAndPackage generic
|
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 "All artifacts signed and packaged, ready for release!"
|
||||||
echo "Commiting the changes to the repository"
|
echo "Commiting the changes to the repository"
|
||||||
@@ -117,11 +220,12 @@ cd ..\..
|
|||||||
# Cleaning up
|
# Cleaning up
|
||||||
|
|
||||||
echo "All done!"
|
echo "All done!"
|
||||||
echo "All the artifacts (Generic and Specific) are signed and packaged, get a rest now!"
|
echo "All the artifacts (x86_64 and arm46) are signed and packaged, get a rest now!"
|
||||||
Read-Host "Press Enter to continue"
|
Read-Host "Press Enter to continue"
|
||||||
|
|
||||||
echo "Cleaning up"
|
echo "Cleaning up"
|
||||||
rmdir windsign-temp -Recurse -ErrorAction SilentlyContinue
|
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"
|
echo "Opening visual studio code"
|
||||||
code .
|
code .
|
||||||
|
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 3.3 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.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 80 80"><defs><style>.g{fill:#000;}.g,.h,.i{stroke-width:0px;}.h{fill:url(#e);}.i{fill:#fef9fe;}</style><linearGradient id="e" x1="40" y1="80" x2="40" 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" width="80" height="80" rx="18.25" ry="18.25"/></g><g id="d"><rect class="h" width="80" height="80" rx="18.25" ry="18.25"/></g><g id="f"><path class="i" d="M63.4352,57.677c-.0536,3.2125-2.7416,5.7589-5.9546,5.7589h-22.0762c-1.1221,0-1.8295-1.2103-1.2751-2.1859,1.4628-2.5738,4.3202-6.7829,8.5529-9.1539.4406-.2468.9366-.3783,1.4416-.3783h13.4532c3.2692,0,5.9129,2.6774,5.8582,5.9591Z"/><path class="i" d="M45.8707,18.7498c-1.4628,2.5738-4.3202,6.7829-8.5529,9.1539-.4406.2468-.9366.3783-1.4416.3783h-13.3567c-3.213,0-5.901-2.5464-5.9546-5.7589-.0547-3.2817,2.589-5.9591,5.8582-5.9591h22.1726c1.1221,0,1.8295,1.2103,1.2751,2.1859Z"/><path class="i" d="M22.4207,63.4375c-.7473,0-1.5065-.1438-2.2398-.4475-2.9896-1.2383-4.4093-4.6657-3.171-7.6551,1.9045-4.5977,4.6342-8.7196,8.1136-12.2511,3.6044-3.6585,7.8551-6.5172,12.6343-8.4968,6.5691-2.7211,11.6853-7.8373,14.4061-14.4061,1.2383-2.9896,4.6658-4.409,7.6551-3.171,2.9896,1.2383,4.4093,4.6657,3.171,7.6551-1.9045,4.5977-4.6342,8.7196-8.1136,12.2511-3.6044,3.6585-7.8551,6.5172-12.6343,8.4968-6.5691,2.7211-11.6853,7.8373-14.4061,14.4061-.9345,2.2562-3.1164,3.6185-5.4153,3.6185Z"/></g></svg>
|
|
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 500 B |
Before Width: | Height: | Size: 682 B |
Before Width: | Height: | Size: 748 B |
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 946 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 219 B |
BIN
configs/branding/release/PrivateBrowsing_150.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
BIN
configs/branding/release/PrivateBrowsing_70.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
configs/branding/release/VisualElements_150.png
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
configs/branding/release/VisualElements_70.png
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
configs/branding/release/content/about-logo-private.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
1
configs/branding/release/content/about-logo-private.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?><svg id="e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><defs><style>.h{filter:url(#f);}.i{fill:#202020;}.j{fill:#f2f0e3;}</style><filter id="f" x="-.4" y="1.68" width="256.8" height="256.8" filterUnits="userSpaceOnUse"><feOffset dx="0" dy="2"/><feGaussianBlur result="g" stdDeviation="2"/><feFlood flood-color="#000" flood-opacity=".5"/><feComposite in2="g" operator="in"/><feComposite in="SourceGraphic"/></filter></defs><g class="h"><rect class="i" x="5.75" y="5.7717" width="244.5" height="244.5" rx="46" ry="46"/></g><path class="j" d="M165.9933,146.3748c-15.6335,0-28.7244,11.028-31.9466,25.7088h-12.0935c-3.2222-14.6808-16.313-25.7088-31.9466-25.7088-18.0431,0-32.7232,14.68-32.7232,32.7232s14.68,32.7232,32.7232,32.7232c15.6335,0,28.7244-11.028,31.9466-25.7088h12.0935c3.2222,14.6808,16.313,25.7088,31.9466,25.7088,18.0431,0,32.7232-14.68,32.7232-32.7232s-14.68-32.7232-32.7232-32.7232ZM90.0067,197.7925c-10.3086,0-18.6945-8.3859-18.6945-18.6945s8.3859-18.6945,18.6945-18.6945,18.6945,8.3859,18.6945,18.6945-8.3859,18.6945-18.6945,18.6945ZM165.9933,197.7925c-10.3086,0-18.6945-8.3859-18.6945-18.6945s8.3859-18.6945,18.6945-18.6945,18.6945,8.3859,18.6945,18.6945-8.3859,18.6945-18.6945,18.6945Z"/><path class="j" d="M214.577,115.6777h-21.8838l-9.2611-65.4244c-.3037-2.145-1.5845-4.0301-3.4665-5.1073-1.882-1.0741-4.1554-1.2212-6.1595-.3914l-45.8062,18.9293-45.8062-18.9293c-2.0041-.8298-4.2775-.6826-6.1595.3914-1.882,1.0772-3.1627,2.9623-3.4665,5.1073l-9.2611,65.4244h-21.8838c-3.8735,0-7.0143,3.1408-7.0143,7.0143s3.1408,7.0143,7.0143,7.0143h173.1541c3.8735,0,7.0143-3.1408,7.0143-7.0143s-3.1408-7.0143-7.0143-7.0143ZM85.1906,61.1725l40.1289,16.5839c1.716.7077,3.645.7077,5.361,0l40.1289-16.5839,7.7142,54.5052h-101.0473l7.7142-54.5052Z"/></svg>
|
After Width: | Height: | Size: 1.8 KiB |
BIN
configs/branding/release/content/about-logo-private@2x.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
configs/branding/release/content/about-logo.png
Normal file
After Width: | Height: | Size: 16 KiB |
12
configs/branding/release/content/about-logo.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_109_1042)">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M512 627.385C575.725 627.385 627.385 575.725 627.385 512C627.385 448.275 575.725 396.615 512 396.615C448.275 396.615 396.615 448.275 396.615 512C396.615 575.725 448.275 627.385 512 627.385ZM604.308 512C604.308 562.98 562.98 604.308 512 604.308C461.02 604.308 419.692 562.98 419.692 512C419.692 461.02 461.02 419.692 512 419.692C562.98 419.692 604.308 461.02 604.308 512Z" fill="#F76F53"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M712 512C712 622.457 622.457 712 512 712C401.543 712 312 622.457 312 512C312 401.543 401.543 312 512 312C622.457 312 712 401.543 712 512ZM512 673.538C601.215 673.538 673.538 601.215 673.538 512C673.538 422.785 601.215 350.462 512 350.462C422.785 350.462 350.462 422.785 350.462 512C350.462 601.215 422.785 673.538 512 673.538Z" fill="#F76F53"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M812 512C812 677.685 677.685 812 512 812C346.315 812 212 677.685 212 512C212 346.315 346.315 212 512 212C677.685 212 812 346.315 812 512ZM512 758.154C647.947 758.154 758.154 647.947 758.154 512C758.154 376.053 647.947 265.846 512 265.846C376.053 265.846 265.846 376.053 265.846 512C265.846 647.947 376.053 758.154 512 758.154Z" fill="#F76F53"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_109_1042">
|
||||||
|
<rect width="1024" height="1024" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
BIN
configs/branding/release/content/about-logo@2x.png
Normal file
After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
configs/branding/release/document.ico
Normal file
After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 104 KiB |
BIN
configs/branding/release/firefox.ico
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
configs/branding/release/firefox64.ico
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
configs/branding/release/logo-mac.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
configs/branding/release/logo.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
configs/branding/release/logo1024.png
Normal file
After Width: | Height: | Size: 46 KiB |