Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49a6f9bcbe | ||
|
|
5dff290a53 | ||
|
|
d40614e0ab | ||
|
|
5d1b443939 | ||
|
|
442520a535 | ||
|
|
0182457970 | ||
|
|
bee3014c37 | ||
|
|
686c13b6f4 | ||
|
|
6bf409b429 | ||
|
|
a9894304b0 | ||
|
|
c8b707d9b7 | ||
|
|
b4f10b08b1 | ||
|
|
d0784e7094 | ||
|
|
ecc2705074 | ||
|
|
88642067a1 | ||
|
|
5af05976d8 | ||
|
|
83d2e7f903 | ||
|
|
d9565fa489 | ||
|
|
412a71d758 | ||
|
|
f8f5c548c9 | ||
|
|
29d3add866 | ||
|
|
74f953ddd2 | ||
|
|
98c84babb9 | ||
|
|
d7d63bc184 | ||
|
|
04445a3487 | ||
|
|
2842b63cbe | ||
|
|
36608b503e | ||
|
|
2961d69a82 | ||
|
|
6557fb8132 | ||
|
|
43cf0c69ec | ||
|
|
60d1e4e95a | ||
|
|
75a98af64b | ||
|
|
6a1ce6a704 | ||
|
|
be748f35cd | ||
|
|
5eb4e82d27 | ||
|
|
ffc357c6a1 | ||
|
|
3ed70d8f53 | ||
|
|
ef4878b845 | ||
|
|
a49526d984 | ||
|
|
60004f5bf3 | ||
|
|
969f8edc5a | ||
|
|
ae3bb47708 | ||
|
|
eba3929ed1 | ||
|
|
214142f54a | ||
|
|
9c3f40d87c | ||
|
|
9f7db406f1 | ||
|
|
775474366e | ||
|
|
c989a1cbce | ||
|
|
4a27e79001 | ||
|
|
f46121dba9 | ||
|
|
ce26ecbd90 | ||
|
|
c0b57bd1c3 | ||
|
|
d34874cf2b | ||
|
|
e86d4d3c92 | ||
|
|
1283803844 | ||
|
|
effd73f2cc | ||
|
|
69b57016b3 | ||
|
|
3acda145f1 | ||
|
|
f63e66be01 | ||
|
|
649ff4dd61 | ||
|
|
1010294f2b | ||
|
|
a84d86fe26 | ||
|
|
d9a3c3e1dd | ||
|
|
591f266543 | ||
|
|
8f8c435d7c | ||
|
|
b245e66198 | ||
|
|
03b8d8f7f7 | ||
|
|
ae0eb4b8d9 | ||
|
|
8539dfd0ba | ||
|
|
188bb5cab2 | ||
|
|
7884df1ee2 | ||
|
|
cadb732713 | ||
|
|
4d9144eca5 | ||
|
|
cf20b3439c | ||
|
|
b06ab7d8e3 | ||
|
|
6443001cef | ||
|
|
860aa55d00 | ||
|
|
9e154d1a48 | ||
|
|
c900dd0b78 | ||
|
|
add2924ed1 | ||
|
|
9724abf090 | ||
|
|
f8d25612ba | ||
|
|
df79522160 | ||
|
|
80a6e25a98 | ||
|
|
eff4422d04 | ||
|
|
95cb30be4b | ||
|
|
d5b62d8d3e | ||
|
|
90c3e56d32 | ||
|
|
197c6e65ed | ||
|
|
902dafde48 | ||
|
|
6a4043d0f0 | ||
|
|
8e19f59dd2 | ||
|
|
7af82ae87d | ||
|
|
aaa4a7b371 | ||
|
|
14106f7bb2 | ||
|
|
87f2b93023 | ||
|
|
59c0e973a4 | ||
|
|
ee8b22dd29 | ||
|
|
2e17a9e94f | ||
|
|
7fccea1556 | ||
|
|
7ab37d2aae | ||
|
|
820f4b9cf0 | ||
|
|
2d3ff8c0dc | ||
|
|
9387c4c16f | ||
|
|
7ca6d8c880 | ||
|
|
6063f4ff04 | ||
|
|
b2ad74f94f | ||
|
|
8b047a521b | ||
|
|
0b20ace65d | ||
|
|
3fe240742a | ||
|
|
b4621d2f2a | ||
|
|
bc76cd4898 | ||
|
|
01e8231531 | ||
|
|
29f5d4aa41 | ||
|
|
dec241be4e | ||
|
|
b28fc1678e | ||
|
|
ed51b3b59c | ||
|
|
515b49d64a | ||
|
|
2f3bb5b169 | ||
|
|
c947be356c | ||
|
|
03c0d3722e | ||
|
|
785cfa6003 | ||
|
|
fd44943aaf | ||
|
|
602e85620c | ||
|
|
442d70c471 | ||
|
|
bf0d0d538e | ||
|
|
3e70dee89f | ||
|
|
58c0f2cc7d | ||
|
|
3c7a6513e8 | ||
|
|
30d3a96d61 | ||
|
|
8bd47f47cd | ||
|
|
552823f329 | ||
|
|
d385abd13b | ||
|
|
3ec77597bf | ||
|
|
5ca7326fbd | ||
|
|
07ce6b0a52 | ||
|
|
d070cf9257 | ||
|
|
6f27dc8be3 | ||
|
|
94df597107 | ||
|
|
7f9a03bfea | ||
|
|
517991d7bc | ||
|
|
f37b558042 | ||
|
|
76c17261d0 | ||
|
|
471da0d391 | ||
|
|
a59f691610 | ||
|
|
b98d4b43ba | ||
|
|
c186ea33ea | ||
|
|
e36c014290 | ||
|
|
494068b632 | ||
|
|
0f8a3b31d3 | ||
|
|
3daa038f5f | ||
|
|
b2a21f7166 | ||
|
|
a1993566c4 | ||
|
|
ea4e9a6403 | ||
|
|
d3da503edb | ||
|
|
a23825c23c | ||
|
|
ff025b78f3 | ||
|
|
efdeb9df05 | ||
|
|
4c2e818cd3 | ||
|
|
219c4a14b3 | ||
|
|
6d58566779 | ||
|
|
3a6dc1d24e | ||
|
|
db04ea40fb | ||
|
|
77bd7cf1c6 | ||
|
|
3a7d76cece | ||
|
|
dfde2adf27 | ||
|
|
bba1b14bf0 | ||
|
|
300ddaedf9 | ||
|
|
d0ffe9af7c | ||
|
|
6f6c37ec26 | ||
|
|
9ffcd6410e | ||
|
|
a0f0f698f4 | ||
|
|
9432bd88f5 | ||
|
|
77f58fc8fa | ||
|
|
113a8a381c | ||
|
|
9033e72679 | ||
|
|
24e6ec3dca | ||
|
|
6e443ad1eb | ||
|
|
29633e7d8c | ||
|
|
3a0391bbb9 | ||
|
|
f78f33d9aa | ||
|
|
4a0312243d | ||
|
|
863f8bbbcd | ||
|
|
fe9fbadade | ||
|
|
5f5a656835 | ||
|
|
b6d433de32 | ||
|
|
3391e29093 | ||
|
|
5400d30b20 | ||
|
|
39ac45351b | ||
|
|
5bd7fd7990 | ||
|
|
5e85f5c81f | ||
|
|
60abf7e2af | ||
|
|
9d3796828c | ||
|
|
3f9183a162 | ||
|
|
eb65cea971 | ||
|
|
8c32c6da16 | ||
|
|
90a3d685a0 | ||
|
|
9111eb9f30 | ||
|
|
596f5569be | ||
|
|
04f1c356a5 | ||
|
|
84ac72f550 | ||
|
|
6a3db35bb2 | ||
|
|
eb4b41233b | ||
|
|
aafb54d042 | ||
|
|
8450cca998 | ||
|
|
9c96519b67 | ||
|
|
51172ca1aa | ||
|
|
38f5e4d490 | ||
|
|
aa3c3c5aaa | ||
|
|
8437a235c9 | ||
|
|
67468c46c0 | ||
|
|
429e2a33c3 | ||
|
|
334e15997f | ||
|
|
578a899152 | ||
|
|
46e677823e | ||
|
|
3a6fe9f105 | ||
|
|
5df544b6fb | ||
|
|
136ad0ef4f | ||
|
|
1fbc762efa | ||
|
|
577565cd82 | ||
|
|
2ac28927a3 | ||
|
|
fca5b829df | ||
|
|
005cf5947b | ||
|
|
dbed64a2c6 | ||
|
|
07e5fe8a66 | ||
|
|
05d7060d83 | ||
|
|
d2adc858cb | ||
|
|
88fb342887 | ||
|
|
b4a35e624b | ||
|
|
3a04ac7720 | ||
|
|
f30f685eb5 | ||
|
|
39c6488463 | ||
|
|
f68dd8293f | ||
|
|
bf5b18ccb1 | ||
|
|
c8e69e2f9d | ||
|
|
4d4b19e8ba | ||
|
|
d2cce51ddf | ||
|
|
56fa2b29d3 | ||
|
|
386d4e0541 | ||
|
|
b287ca7f5b | ||
|
|
86304ab171 | ||
|
|
0b477e3f7c | ||
|
|
3ab27c6ec9 | ||
|
|
248586de6e | ||
|
|
fccde379b8 | ||
|
|
8644b1a319 | ||
|
|
b7a9c220e1 | ||
|
|
cdbbd83705 | ||
|
|
c033ca959d | ||
|
|
1b9e4ff9ab | ||
|
|
b2ea97a984 | ||
|
|
f405ba033e | ||
|
|
4f00404805 | ||
|
|
df0f663382 | ||
|
|
cff473f825 | ||
|
|
79be126189 | ||
|
|
d00c17dde2 | ||
|
|
f1a6b2f852 | ||
|
|
ee308fbc64 | ||
|
|
6a5a765689 | ||
|
|
ea1a96e8e1 | ||
|
|
a27a0df1a4 | ||
|
|
b9aaf0fc05 | ||
|
|
af58784040 | ||
|
|
7223633da6 | ||
|
|
0d2e85517c | ||
|
|
9a13ec6d5f | ||
|
|
f3b0706507 | ||
|
|
6447529ee4 | ||
|
|
849ca64ba8 | ||
|
|
91a8b69d36 | ||
|
|
d20f96f8d0 | ||
|
|
4fc2758e6a | ||
|
|
aad67e43db | ||
|
|
57d61df44d | ||
|
|
07bcfa9b5f | ||
|
|
984c278c4c | ||
|
|
b1f521263d | ||
|
|
fef82789b1 | ||
|
|
6359086779 | ||
|
|
2b88225ee1 | ||
|
|
843c7ab58a | ||
|
|
260d561b9a | ||
|
|
630734b908 | ||
|
|
bd8951e958 | ||
|
|
97121465dd | ||
|
|
07551dc3d4 | ||
|
|
68e5e1afea | ||
|
|
f934278fef | ||
|
|
25a737e83c | ||
|
|
9452664079 | ||
|
|
adb86d35ec | ||
|
|
f99c874962 | ||
|
|
fbc66a8177 | ||
|
|
b5e7e707b3 | ||
|
|
1af5fbbd6a | ||
|
|
bba7763825 | ||
|
|
dd58b31cc4 | ||
|
|
e7797b65d1 | ||
|
|
e2bfb1216b | ||
|
|
628cd345f2 | ||
|
|
e1d73d5420 | ||
|
|
92ac6b2c15 | ||
|
|
8d73ab9955 | ||
|
|
411dba240b | ||
|
|
2499a1cf5a | ||
|
|
5942d8bf68 | ||
|
|
bece2ea3e4 | ||
|
|
326ac4a6c4 | ||
|
|
e7a1876807 | ||
|
|
5fccf67cdc | ||
|
|
210f1f8f95 | ||
|
|
97d89d7340 | ||
|
|
7f0c3b20ad | ||
|
|
d20b60edd4 | ||
|
|
aee94b39ba | ||
|
|
63b8172321 | ||
|
|
f22ae2dc51 | ||
|
|
5e1c4057a0 | ||
|
|
f18fb24b3d | ||
|
|
f6ba75a185 | ||
|
|
6b7761ecf2 | ||
|
|
007d22199d | ||
|
|
5def416f63 | ||
|
|
99d4f8931a | ||
|
|
6d8424c104 | ||
|
|
8d8e1bb637 | ||
|
|
943696a87f | ||
|
|
3bff1a00b6 | ||
|
|
c3249dd97d | ||
|
|
b430b5a172 | ||
|
|
d95c200e69 | ||
|
|
478ca904ae | ||
|
|
84a894c2c7 | ||
|
|
b6fb36f22b | ||
|
|
83b7fa92af | ||
|
|
33d8078a83 | ||
|
|
581d3c7108 | ||
|
|
10205d0b50 | ||
|
|
a698587e8c | ||
|
|
2bd611916d | ||
|
|
90e210892b | ||
|
|
e03691917b | ||
|
|
784a478268 | ||
|
|
458be8c848 | ||
|
|
b0da5cef70 | ||
|
|
6f92007a85 | ||
|
|
4402f5c5cd | ||
|
|
a97bf6494e | ||
|
|
cdb18e04ff | ||
|
|
06ffcd29e2 | ||
|
|
1d0b86ae94 | ||
|
|
80caba3fd1 | ||
|
|
3ee22667a7 | ||
|
|
d6fde3cdd5 | ||
|
|
5e5a9c601f | ||
|
|
268c1dcdad | ||
|
|
887be5dd32 | ||
|
|
7536dd12cd | ||
|
|
30cd422331 | ||
|
|
fb35bac070 | ||
|
|
916f7bcbba | ||
|
|
80cf710dbe | ||
|
|
60e1526f6a | ||
|
|
ae619b169c | ||
|
|
24a2213445 | ||
|
|
d619078d25 | ||
|
|
8061d5cce9 | ||
|
|
ff8bc3c426 | ||
|
|
c3f3ec56d6 | ||
|
|
508721bd97 | ||
|
|
5690946b1a | ||
|
|
b58cc24bd4 | ||
|
|
aaf7d6b7e4 | ||
|
|
6ace22da87 | ||
|
|
a3686459a9 | ||
|
|
a249e418b3 | ||
|
|
f265b2c1ae | ||
|
|
e1eb985aa8 | ||
|
|
3f28eebb20 | ||
|
|
1e37f0b417 | ||
|
|
2177a50c7a | ||
|
|
1eba7121aa | ||
|
|
d2f511abba | ||
|
|
8737a8a546 | ||
|
|
7804d1451e | ||
|
|
ae703b48fc | ||
|
|
5e6d05b3fd | ||
|
|
0f01d9b08f | ||
|
|
74dbada473 | ||
|
|
5659c87ed2 | ||
|
|
ed14f36c55 | ||
|
|
bda43ac0f6 | ||
|
|
2a2bc82a8b | ||
|
|
c7f8d11a7e | ||
|
|
cee8532733 | ||
|
|
e2fe967788 | ||
|
|
27a06f57e1 | ||
|
|
419d122816 | ||
|
|
861ee8b3c6 | ||
|
|
e4173d90c8 | ||
|
|
cbbf2bed6e | ||
|
|
4aef771072 | ||
|
|
ed87470bcc | ||
|
|
4ac8f826f2 | ||
|
|
9972ac6908 | ||
|
|
8fb0c8da56 | ||
|
|
75a7431379 | ||
|
|
ee23690196 | ||
|
|
def7cd1b89 | ||
|
|
505678b37b | ||
|
|
39ad3226c7 | ||
|
|
dfff3c1cba | ||
|
|
da42bf2dbb | ||
|
|
07796b7528 | ||
|
|
e29e2684d0 | ||
|
|
bac5a85541 | ||
|
|
1d37f3a15b | ||
|
|
4e94fc4cff | ||
|
|
e7cdfeeb2c | ||
|
|
26498fc099 | ||
|
|
be82657940 | ||
|
|
dc06fb8b11 | ||
|
|
8b32b2abd3 | ||
|
|
a27a809f07 | ||
|
|
32e37d8cda | ||
|
|
16cc089b19 | ||
|
|
deef3b04eb | ||
|
|
150e5c90f7 | ||
|
|
f473d13d0d | ||
|
|
cb963585ad | ||
|
|
1991d240bf | ||
|
|
51c56dd2a0 | ||
|
|
e58a3aba54 | ||
|
|
18a1c8d7d8 | ||
|
|
a0a0d8043f | ||
|
|
8c6bd4ef04 | ||
|
|
99f79f5143 | ||
|
|
56f74e5215 | ||
|
|
e8783033f8 | ||
|
|
5054b9fade | ||
|
|
9074f72959 | ||
|
|
b370c66308 | ||
|
|
4a01b6006c | ||
|
|
bfcca8cbab | ||
|
|
59fc5a6184 | ||
|
|
a520124a78 | ||
|
|
003001f19f | ||
|
|
e56e0de458 | ||
|
|
ef1807cd7e | ||
|
|
2dc5c5f53f | ||
|
|
62bffaf935 | ||
|
|
63964bb520 | ||
|
|
b97f8f03ac | ||
|
|
f556ef53f3 | ||
|
|
be3714e131 | ||
|
|
d0f2c5581d | ||
|
|
1f20214244 | ||
|
|
52f631a038 | ||
|
|
eb9cd2a2a5 | ||
|
|
3f85239053 | ||
|
|
cef68f8a9a | ||
|
|
050543ae1b | ||
|
|
a6d0e6f37a | ||
|
|
d1ba4dc284 | ||
|
|
593daac614 | ||
|
|
549abb542b | ||
|
|
512fb9a0bd | ||
|
|
42d0474cc2 | ||
|
|
e0a7488005 | ||
|
|
178607093f | ||
|
|
58fcd292a9 | ||
|
|
17792a507c | ||
|
|
0c40bea064 | ||
|
|
89b05993a3 | ||
|
|
4532079c71 | ||
|
|
dcfebfce9d | ||
|
|
34f99708d4 | ||
|
|
c81c60c91f | ||
|
|
50b0816e37 | ||
|
|
1fb2c62c02 | ||
|
|
5ab1e7eae4 | ||
|
|
af661ceee2 | ||
|
|
87c8e872ee | ||
|
|
ba541e8022 | ||
|
|
b92957e510 | ||
|
|
dab18250d7 | ||
|
|
ff95d0face | ||
|
|
53013395d7 | ||
|
|
3e63c82ecc | ||
|
|
dbe0838f8f | ||
|
|
e3244e9056 | ||
|
|
7a88ad3c02 | ||
|
|
23996b59a1 | ||
|
|
789e6b76ae | ||
|
|
c52c206d05 | ||
|
|
db7f5fed31 | ||
|
|
36ed617090 | ||
|
|
0d0a81c0d2 | ||
|
|
8553b06155 | ||
|
|
6aed5887e5 | ||
|
|
b33d152a5b | ||
|
|
e36e0fdf25 | ||
|
|
a14fcc95e7 | ||
|
|
ddde178e3b | ||
|
|
85251f8cae | ||
|
|
0cebffd59a | ||
|
|
7eab59af51 | ||
|
|
0735680674 | ||
|
|
3e0c70d018 | ||
|
|
041197b6df | ||
|
|
b9b557a761 | ||
|
|
e83a76a586 | ||
|
|
7cf96cd843 | ||
|
|
1a759ce56d | ||
|
|
11b49a6ceb | ||
|
|
a0eeb4d767 | ||
|
|
ba5e2f634a | ||
|
|
f0080f9c55 | ||
|
|
463962a58b | ||
|
|
1716b9f8f6 | ||
|
|
a4d8f36863 | ||
|
|
40ba3c2d57 | ||
|
|
893b45feef | ||
|
|
296ff17f19 | ||
|
|
52eba11d6a | ||
|
|
f6ce40d246 | ||
|
|
d76ff39766 | ||
|
|
e1a91e2228 | ||
|
|
0c083bdc1a | ||
|
|
9bd97ef4f2 | ||
|
|
5ebcd2a5f6 | ||
|
|
5b3910db97 | ||
|
|
16f31f8090 | ||
|
|
515452c7e2 | ||
|
|
a971a28a34 | ||
|
|
7aaae06c9d | ||
|
|
b722a95bab | ||
|
|
f672d5da5c | ||
|
|
a724850c84 | ||
|
|
5cc0feb647 | ||
|
|
090ae64dfa | ||
|
|
6e799e37f4 | ||
|
|
fba66c6250 | ||
|
|
c8c94825ce | ||
|
|
e11012d426 | ||
|
|
d54e827bb9 | ||
|
|
4ddd56f788 | ||
|
|
06c0a5bba9 | ||
|
|
52faa2e17d | ||
|
|
78cbdc3e42 | ||
|
|
14c324950a | ||
|
|
467e062e8e | ||
|
|
ec61910232 | ||
|
|
bb002d6147 | ||
|
|
e1ddba9c0f | ||
|
|
426aa777fb | ||
|
|
8eff5a75b4 | ||
|
|
a747eaa740 | ||
|
|
a9512c1eef | ||
|
|
242921bb4c | ||
|
|
55ac01b675 | ||
|
|
baf713aad5 | ||
|
|
37742c40ca | ||
|
|
83fc553841 | ||
|
|
ea21e800a7 | ||
|
|
894f250229 | ||
|
|
6f4e63162f | ||
|
|
0668d12e3b | ||
|
|
710e111c5e | ||
|
|
33624289fe | ||
|
|
0e17e4b06f | ||
|
|
09e9cb484b | ||
|
|
749274e635 | ||
|
|
cfda30c81a | ||
|
|
47518cb002 | ||
|
|
2f68010729 | ||
|
|
8be8014504 | ||
|
|
2d4de5146b | ||
|
|
a40e9a4d06 | ||
|
|
251ce2ed2a | ||
|
|
78b8e9421e | ||
|
|
e605d6dddf | ||
|
|
d8496425e2 | ||
|
|
d0305445b2 | ||
|
|
f2523b26fa | ||
|
|
8b2a408dea | ||
|
|
e391a1b49e | ||
|
|
aea916782d | ||
|
|
1f5cec94bd | ||
|
|
2c4629a77d | ||
|
|
bbfaeb074e | ||
|
|
de9515c294 | ||
|
|
06bf44a823 | ||
|
|
321d968504 | ||
|
|
62f9e54c8f | ||
|
|
0b780d55bb | ||
|
|
15d6508407 | ||
|
|
e18294463e | ||
|
|
1144ac15c9 | ||
|
|
9df1b26654 | ||
|
|
846c79ef55 | ||
|
|
eeecd59c9d | ||
|
|
66e2807009 | ||
|
|
067bfbf950 | ||
|
|
46a0a6e08a | ||
|
|
00550d7c02 | ||
|
|
e642361399 | ||
|
|
29355577f1 | ||
|
|
e585db85b6 | ||
|
|
72150ebadf | ||
|
|
e4b54c3c01 | ||
|
|
da89feeb16 | ||
|
|
7d418f3dce | ||
|
|
2b8d8da22a | ||
|
|
b240b795b5 | ||
|
|
b5bac6c876 | ||
|
|
4c4fedc452 | ||
|
|
fcd045f84a | ||
|
|
c2a21d2da0 | ||
|
|
69fb309ec3 | ||
|
|
5168475826 | ||
|
|
da172bf8cf | ||
|
|
b3424266cd | ||
|
|
04bb73cf27 | ||
|
|
7402379346 | ||
|
|
4d9e9a4b1c | ||
|
|
6ac906f388 | ||
|
|
f584c8462b | ||
|
|
8d3340045c | ||
|
|
63f24ea57e | ||
|
|
60c2ac3268 | ||
|
|
0d5be8e3f6 | ||
|
|
3630d6844c | ||
|
|
80fcbfab7c | ||
|
|
adaab3550c | ||
|
|
0dadf06245 | ||
|
|
a9efd4b2e3 | ||
|
|
c92a975e4b | ||
|
|
60889d27ed | ||
|
|
7317d9c0b2 | ||
|
|
6975084ea5 | ||
|
|
c7a3bf0f4b | ||
|
|
eaa86d89e9 | ||
|
|
b339613844 | ||
|
|
5e56871fd9 | ||
|
|
969cd664cb | ||
|
|
66eabc253f | ||
|
|
357986103b | ||
|
|
6b660c86a4 | ||
|
|
bbf0aaec5d | ||
|
|
0be1754666 | ||
|
|
3f93755be2 | ||
|
|
52c7186b56 | ||
|
|
b428b06217 | ||
|
|
258e56285a | ||
|
|
4a59a265fb | ||
|
|
62cbc0c95c | ||
|
|
35eb66a322 | ||
|
|
712e1f760c | ||
|
|
269c99293f | ||
|
|
10abb68288 | ||
|
|
2eb0a255d9 | ||
|
|
bc1c5c2f84 | ||
|
|
48fdc8103a | ||
|
|
2b63577046 | ||
|
|
f94dc49fd0 | ||
|
|
0a8881b3c1 | ||
|
|
155cf54c15 | ||
|
|
025e4d4772 | ||
|
|
cacad56172 | ||
|
|
0879b9215c | ||
|
|
12f2b0f8e7 | ||
|
|
55eaa25216 | ||
|
|
be11556799 | ||
|
|
a44c99899a | ||
|
|
ed0d288ccd | ||
|
|
a3d72e0ec7 | ||
|
|
b54b4e5e9b | ||
|
|
b96a30e8a4 | ||
|
|
b621ee92c9 | ||
|
|
a1e32dbfa6 | ||
|
|
7b56c27383 | ||
|
|
9703490129 | ||
|
|
4bc46003b5 | ||
|
|
f5ed4072e4 | ||
|
|
6f24a4e7a8 | ||
|
|
aca006f38b | ||
|
|
41ca4a00b9 | ||
|
|
ce65a3b9cd | ||
|
|
bcd24936bc | ||
|
|
55014bf58b | ||
|
|
94c595093b | ||
|
|
284c12697b | ||
|
|
764f0f79ca | ||
|
|
9c54280d85 | ||
|
|
f6c3f0cbbb | ||
|
|
34586648a5 | ||
|
|
cdf5652e5f | ||
|
|
5522facdc6 | ||
|
|
ec9e9a46f2 | ||
|
|
81bf2f01e2 | ||
|
|
340bfd88ae | ||
|
|
eb7c14561e | ||
|
|
85a7d5cb3e | ||
|
|
3b81538e02 | ||
|
|
569d07db23 | ||
|
|
f7e3b8b9f4 | ||
|
|
07992c11e7 | ||
|
|
7397ab36f2 | ||
|
|
9f7f2c60d6 | ||
|
|
8d1fd269e0 | ||
|
|
d23b20ea75 | ||
|
|
554ef07eed | ||
|
|
868f55372f | ||
|
|
7edcbc974c | ||
|
|
031e660506 | ||
|
|
6ff7fae0b0 | ||
|
|
aee2695413 | ||
|
|
371bffbfea | ||
|
|
f05638ba84 | ||
|
|
cfadbeb353 | ||
|
|
b71541fb7f | ||
|
|
bf1b1a4c46 | ||
|
|
f7e76d02b7 | ||
|
|
1a9c559a8f | ||
|
|
434db0d686 | ||
|
|
44e4fb1090 | ||
|
|
1c5971d3af | ||
|
|
ea17dd637c | ||
|
|
7f9b0380e0 | ||
|
|
14a27b1ba3 | ||
|
|
5f103072b0 | ||
|
|
77889b29fb | ||
|
|
caffe3cb1f | ||
|
|
64ced60f62 | ||
|
|
e2d5046bb7 | ||
|
|
5bb8e0da89 | ||
|
|
a50c43e0fa | ||
|
|
7cd317fe2e | ||
|
|
a1396d00aa | ||
|
|
7e26dc8c5b | ||
|
|
3b46511439 | ||
|
|
d26ea980ac | ||
|
|
ba508a786c | ||
|
|
e5d626c304 | ||
|
|
4b1f1d49d6 | ||
|
|
77505173ae | ||
|
|
83ad291053 | ||
|
|
d1eb9ea982 | ||
|
|
af4a35741c | ||
|
|
165afee55a | ||
|
|
a9c4472d25 | ||
|
|
ff7c1528db | ||
|
|
761fec2574 | ||
|
|
4a81284056 | ||
|
|
fc89718d48 | ||
|
|
c17accc0b4 | ||
|
|
c43674e8f3 | ||
|
|
6089b5fdae | ||
|
|
b8a3eeffdb | ||
|
|
0631a8086c | ||
|
|
e06004292a | ||
|
|
f856ba246e | ||
|
|
abb8e28e49 | ||
|
|
e210da963d | ||
|
|
d642288092 | ||
|
|
a80ec15f4c | ||
|
|
ac19f58cf6 | ||
|
|
341b8d41c5 | ||
|
|
22a0fe555c | ||
|
|
9b6ed315f8 | ||
|
|
7675e0db10 | ||
|
|
b2831b419e | ||
|
|
df106aa708 | ||
|
|
91e6f5cb9f | ||
|
|
05e724f3d7 | ||
|
|
317aa989c2 | ||
|
|
4086514fa5 | ||
|
|
d1d5ff6f9f | ||
|
|
cb9b865a53 | ||
|
|
1a9724582f | ||
|
|
5878c117f2 | ||
|
|
2d58dddbdc | ||
|
|
5f49e0fdd0 | ||
|
|
837e3c55ca | ||
|
|
4c5ada421c | ||
|
|
2b0ffb01b6 | ||
|
|
11bb8c35b0 | ||
|
|
b7dcc9f7e3 | ||
|
|
2785b8f11e | ||
|
|
068864b9ea | ||
|
|
aa01b51177 | ||
|
|
1b5a6790f0 | ||
|
|
9c6d53567c | ||
|
|
0328dd2704 | ||
|
|
65fb8e10ba | ||
|
|
ca68250adf | ||
|
|
9844b15e07 | ||
|
|
a3db5844f0 | ||
|
|
146b5c839c | ||
|
|
6e59f11f4c | ||
|
|
a156816064 | ||
|
|
6ae6fc60f8 | ||
|
|
767afef398 | ||
|
|
6b7b3ab069 | ||
|
|
abf31ad3dc | ||
|
|
8230ac7b4a | ||
|
|
462418ba82 | ||
|
|
ea968e47cc | ||
|
|
88418fc609 | ||
|
|
1473d97055 | ||
|
|
ae00489779 | ||
|
|
b4d08aecdb | ||
|
|
ca8c8d2ad3 | ||
|
|
7aa9f35808 | ||
|
|
057539037b | ||
|
|
8c6f5fe1d3 | ||
|
|
2d2a76a8ac | ||
|
|
cbf39650d0 | ||
|
|
7476f7af73 | ||
|
|
4caf33b41d | ||
|
|
2e4d9f2e2a | ||
|
|
bbffc4c1f8 | ||
|
|
0efb88479e | ||
|
|
65291a00c6 | ||
|
|
117435f0d8 | ||
|
|
7b957369fc | ||
|
|
fbe49c21a2 | ||
|
|
294e522c09 | ||
|
|
4881328fbf | ||
|
|
e6e8276a20 | ||
|
|
fe2c14ff3a | ||
|
|
b809815436 | ||
|
|
d2489c5ac7 | ||
|
|
fe9b0bf29b | ||
|
|
5097688e6c | ||
|
|
6e2c5e0af4 | ||
|
|
c53b249998 | ||
|
|
d74d7eca23 | ||
|
|
c573cfcd12 | ||
|
|
a6e749da87 | ||
|
|
781a20423a | ||
|
|
572562719e | ||
|
|
93ba4ade09 | ||
|
|
333a5a6fef | ||
|
|
3f6920a4ad | ||
|
|
ec2007577b | ||
|
|
6657353bca | ||
|
|
d041648ad4 | ||
|
|
64d728f80f | ||
|
|
7409289762 | ||
|
|
52ab974bff | ||
|
|
ce96deb331 | ||
|
|
7081a0e73d | ||
|
|
383dac6a5e | ||
|
|
0836000f9f | ||
|
|
04ae259f3d | ||
|
|
a4880cabd4 | ||
|
|
226c7f807d | ||
|
|
946aacc12e | ||
|
|
5bdb774504 | ||
|
|
c238d9733a | ||
|
|
a740c2c06e | ||
|
|
aa6870b23c | ||
|
|
be9eb0f3a3 | ||
|
|
8ba0b81957 | ||
|
|
19deb9141d | ||
|
|
2b1275d8c4 | ||
|
|
2dfb50b83a | ||
|
|
89225d3938 | ||
|
|
b543756957 | ||
|
|
0d976765ec | ||
|
|
6a8f60f9fd | ||
|
|
46159fd190 | ||
|
|
bf9338129a | ||
|
|
38df1a873f | ||
|
|
bb1db9e86f | ||
|
|
66f59e5797 | ||
|
|
75543af550 | ||
|
|
f1b003f109 | ||
|
|
1e7ee8c4ad | ||
|
|
0d72e63491 | ||
|
|
c81975eed3 | ||
|
|
71f3fcab74 | ||
|
|
83ff4cd86a | ||
|
|
e402c94a9f | ||
|
|
0986423d30 | ||
|
|
cdbe4f3fa7 | ||
|
|
a90f740a81 | ||
|
|
262b769d19 | ||
|
|
a846e8a58d | ||
|
|
750113441c | ||
|
|
3f17945745 | ||
|
|
0ddc0a6738 | ||
|
|
036294a191 | ||
|
|
ba3bdc077c | ||
|
|
cd8418496f | ||
|
|
e20b69587f | ||
|
|
b9824d687e | ||
|
|
e6f7c73f54 | ||
|
|
291a10fefe | ||
|
|
c5b4ecdca5 | ||
|
|
51a34d7d58 | ||
|
|
2a4ef5cccf | ||
|
|
45901dafbb | ||
|
|
ea89949118 | ||
|
|
fb08e0ecfc | ||
|
|
d60040dbf7 | ||
|
|
652bf6454e | ||
|
|
92e2ee9d07 | ||
|
|
d5f88c18f6 | ||
|
|
6dba6e32f5 | ||
|
|
7a3a75ac28 | ||
|
|
54b0031389 | ||
|
|
86ce440833 | ||
|
|
93e1db4bd9 | ||
|
|
fdef9cbc96 | ||
|
|
c3b5d72f2b | ||
|
|
5af298e1f6 | ||
|
|
3e76736874 | ||
|
|
1bc7d63cab | ||
|
|
79a18d4c70 | ||
|
|
38ff5d38ba | ||
|
|
db65b74e4b | ||
|
|
884a8b52d6 | ||
|
|
4d15c65280 | ||
|
|
b70808d071 | ||
|
|
b68de27dc6 | ||
|
|
01689b4c94 | ||
|
|
20e0036336 | ||
|
|
d6a61c125a | ||
|
|
62364a4b15 | ||
|
|
6bb930ef4e | ||
|
|
23bb1c48a1 | ||
|
|
dc042c6c3d | ||
|
|
892de8a232 | ||
|
|
fa82ee1947 | ||
|
|
d2b0b8eac5 | ||
|
|
19a94009b0 | ||
|
|
17e79ace79 | ||
|
|
fcf7cba8fe | ||
|
|
c69634df27 | ||
|
|
62b4564c94 | ||
|
|
7227df13b9 | ||
|
|
eb05225f0d | ||
|
|
1328c56aab | ||
|
|
69984e6702 | ||
|
|
c8e958fb7e | ||
|
|
ca478bd5c4 | ||
|
|
c09b8c6ec8 | ||
|
|
6f145dfe36 | ||
|
|
c04bd4c6a7 | ||
|
|
93ba59d868 | ||
|
|
ebca20b800 | ||
|
|
dd77aacc51 | ||
|
|
2b364898a5 | ||
|
|
6f25275d76 | ||
|
|
cd78ccb2c2 | ||
|
|
e7b27f0778 | ||
|
|
a3aacf2527 | ||
|
|
c728cdf501 | ||
|
|
a7f7f6645d | ||
|
|
36ff5eb39a | ||
|
|
e4bb4a4771 | ||
|
|
e0253a4b25 | ||
|
|
2df699c99c | ||
|
|
3d9c7d4598 | ||
|
|
6d9df432c1 | ||
|
|
0e3f1f638c | ||
|
|
4e47771df1 | ||
|
|
9adb023880 | ||
|
|
bdb8bbef32 | ||
|
|
65bfe2e21d | ||
|
|
af8f7253e1 | ||
|
|
e791ba5876 | ||
|
|
c4242a3657 | ||
|
|
7e626c04cb | ||
|
|
e5b7f7c9b5 | ||
|
|
e922f0993d | ||
|
|
bcb145df99 | ||
|
|
6ce85921fc | ||
|
|
bf91ed98ee | ||
|
|
fd3effe712 | ||
|
|
69c2cd5f40 | ||
|
|
f5148ef728 | ||
|
|
af24092440 | ||
|
|
522eb97b65 | ||
|
|
e13b80aff1 | ||
|
|
46c2479db2 | ||
|
|
977e50014d | ||
|
|
2757fa5cf1 | ||
|
|
5d3c1d2222 | ||
|
|
9c7b8b8c78 | ||
|
|
ede6acdb3a | ||
|
|
8634af0a0f | ||
|
|
dd8836bddf | ||
|
|
6a1f365d9b | ||
|
|
cab34c2dbf | ||
|
|
8fab3dbff4 | ||
|
|
18d2257a47 | ||
|
|
40fffc396c | ||
|
|
c5ea40fb44 | ||
|
|
da05f2287a | ||
|
|
1d9a761de5 | ||
|
|
a4d5d7c6b9 | ||
|
|
7d7ce63970 | ||
|
|
f6e769ae94 | ||
|
|
f898c97ba8 | ||
|
|
541e461b77 | ||
|
|
e45be6adac | ||
|
|
6d79ced48e | ||
|
|
a3bbe35fb0 | ||
|
|
5853574b98 | ||
|
|
d1c57e0ddb | ||
|
|
7e70f19b68 | ||
|
|
9e3875cd9b | ||
|
|
674da1b209 | ||
|
|
6e7b93eb48 | ||
|
|
7b7e8f19dd | ||
|
|
7239721d01 | ||
|
|
636bdbf00d | ||
|
|
e52ec18717 | ||
|
|
953e4cfa9a | ||
|
|
8375baac99 | ||
|
|
f56c851ec8 | ||
|
|
50535e427e | ||
|
|
cc68d626bc | ||
|
|
85b3401be8 | ||
|
|
9df8d8dda5 | ||
|
|
f8ec5f280b | ||
|
|
218d1c7405 | ||
|
|
8b0c68c0d2 | ||
|
|
c54eedfdc0 | ||
|
|
779b372d89 | ||
|
|
8e45af43e1 | ||
|
|
f036adbc4f | ||
|
|
bc0079f2fb | ||
|
|
a7f9c66e57 | ||
|
|
7891cea7f7 | ||
|
|
c3b96d12de | ||
|
|
6a44e0ddd4 | ||
|
|
2b236cbbd6 | ||
|
|
455e23b014 | ||
|
|
71d0543f28 | ||
|
|
82d4249e17 | ||
|
|
fc8c537118 | ||
|
|
febc07aec3 | ||
|
|
09e399ae28 | ||
|
|
1583090623 | ||
|
|
66594ad647 | ||
|
|
6159ced86b | ||
|
|
5424b95138 | ||
|
|
8b4222ff9e | ||
|
|
0496779434 | ||
|
|
488ec02e70 | ||
|
|
ba0bb20be5 | ||
|
|
f817c10422 | ||
|
|
d0687d04eb | ||
|
|
d583ca9ef5 | ||
|
|
6b5459121f | ||
|
|
e856e35c53 | ||
|
|
515986172f | ||
|
|
2222073778 | ||
|
|
df4d16a7ee | ||
|
|
ea5d0cc74e | ||
|
|
8fb0d6e450 | ||
|
|
f0a26fd86a | ||
|
|
16bcfa12c8 | ||
|
|
7114bba718 | ||
|
|
66fb4867dc | ||
|
|
4ef9d25d58 | ||
|
|
614b0aa7fd | ||
|
|
51929255ba | ||
|
|
357745f418 | ||
|
|
de2d7af818 | ||
|
|
fe903c3dfd | ||
|
|
61418d2828 | ||
|
|
e3514054f9 | ||
|
|
36bcdfec97 | ||
|
|
4f3fbd354b | ||
|
|
fa0bf38694 | ||
|
|
58e1bcde9e | ||
|
|
2f0caf8a0d | ||
|
|
78bc0693d4 | ||
|
|
6baa552950 | ||
|
|
83401a6b16 | ||
|
|
2938c5dc03 | ||
|
|
de96372ba7 | ||
|
|
2f33c477e9 | ||
|
|
422e21eb16 | ||
|
|
33eb4c6b71 | ||
|
|
1670275571 | ||
|
|
97482c57b5 | ||
|
|
f7dd52b8f5 | ||
|
|
4a828f57f4 | ||
|
|
7fe0ca12c0 | ||
|
|
479be86596 | ||
|
|
7a55625243 | ||
|
|
c963416c09 | ||
|
|
c9a0694116 | ||
|
|
4497601ebc | ||
|
|
c8beaabab8 | ||
|
|
0788b5fdcc | ||
|
|
e3719a1b07 | ||
|
|
2a2f8a8e0a | ||
|
|
7757b61c22 | ||
|
|
7fb8b38cdf | ||
|
|
95fbbeb326 | ||
|
|
ce0a857906 | ||
|
|
33da642d26 | ||
|
|
20d439ac01 | ||
|
|
a35764839b | ||
|
|
543040b304 | ||
|
|
48f3db946e | ||
|
|
7a4117097a | ||
|
|
d96b72d46f | ||
|
|
2af76fc41f | ||
|
|
724fd82919 | ||
|
|
cf3410ad63 | ||
|
|
4dc5a922e6 | ||
|
|
9fd936c18c | ||
|
|
d23df35087 | ||
|
|
9681d85999 | ||
|
|
cfc70ea8b0 | ||
|
|
93789b8bec | ||
|
|
2a63b39f33 | ||
|
|
694f93326d | ||
|
|
841726d432 | ||
|
|
aabab5c456 | ||
|
|
308995f56a | ||
|
|
b4371f68b7 | ||
|
|
f3f5d926c1 | ||
|
|
b7689fbe53 | ||
|
|
3dc4de4216 | ||
|
|
f1fa1a733d | ||
|
|
10d640e940 | ||
|
|
2e1cf2446c | ||
|
|
ad19cd9fbd | ||
|
|
842659dbfe | ||
|
|
e639cebdd1 | ||
|
|
e5f512e348 | ||
|
|
d4b9c18271 | ||
|
|
3528f4140c | ||
|
|
a8e02cd851 | ||
|
|
a170ae4368 | ||
|
|
f2fc4a03dc | ||
|
|
3c381c5361 | ||
|
|
50d342c0c9 | ||
|
|
3a1fb9af40 | ||
|
|
839bc088f9 | ||
|
|
11dbe131d6 | ||
|
|
2a1a061a3e | ||
|
|
a994145e37 | ||
|
|
db9a9cfc62 | ||
|
|
78833bcc30 | ||
|
|
ba00dfa584 | ||
|
|
61d8a0bd12 | ||
|
|
fd3030fc14 | ||
|
|
707c626876 | ||
|
|
594d3e0e0c | ||
|
|
60046ca1cc | ||
|
|
31d33592ef | ||
|
|
689bc8ea04 | ||
|
|
4a3984e49f | ||
|
|
dab038c005 | ||
|
|
07381834f8 | ||
|
|
053dca10bd | ||
|
|
f3a6754858 | ||
|
|
f5b1711815 | ||
|
|
33bb27bc0f | ||
|
|
0bf8907f2f | ||
|
|
5f035499ac | ||
|
|
109f51bbbd | ||
|
|
369aafd9ae | ||
|
|
fa8f98472c | ||
|
|
40ae074ff0 | ||
|
|
e805dec141 | ||
|
|
aa2edfc506 | ||
|
|
09bd40bf15 | ||
|
|
ff126542d8 | ||
|
|
8a88ab3c4b | ||
|
|
314987f32d | ||
|
|
e8121b1cd2 | ||
|
|
6d559559cc | ||
|
|
ae0068692a | ||
|
|
60c2e7013d | ||
|
|
7e4be7d1ea | ||
|
|
742c2cd8fb | ||
|
|
71106cfd97 | ||
|
|
4873c0990a | ||
|
|
baec9ddba7 | ||
|
|
a9d0d70977 | ||
|
|
be5c1b0696 | ||
|
|
039740cdd4 | ||
|
|
90e2b839a3 | ||
|
|
f7810b6020 | ||
|
|
c536d92ade | ||
|
|
d4c0ae34f4 | ||
|
|
6ae5388dcf | ||
|
|
adde66785c | ||
|
|
669e1802a6 | ||
|
|
4b3e507e8b | ||
|
|
3193111d98 | ||
|
|
b92ace46b0 | ||
|
|
35f36a20ff | ||
|
|
b734a0f82e | ||
|
|
4d97ecec65 | ||
|
|
2f7229cae8 | ||
|
|
764c3c95cf | ||
|
|
0b43112873 | ||
|
|
b31efbae7c | ||
|
|
295975d16b | ||
|
|
a3c971cbda | ||
|
|
d0fda60c85 | ||
|
|
5bec1a65ae | ||
|
|
a09162bb37 | ||
|
|
3028d40333 | ||
|
|
c441a7050d | ||
|
|
7a6fb86cbb | ||
|
|
c9ca17220f | ||
|
|
171d93cee0 | ||
|
|
60c9d68403 | ||
|
|
b2b8c3e05b | ||
|
|
f80e738196 | ||
|
|
306fb22021 | ||
|
|
44557f5a23 | ||
|
|
818a1d482b | ||
|
|
d6b6d9eae6 | ||
|
|
0c0d2b38a6 | ||
|
|
8bd432274a | ||
|
|
2a01aa66d5 | ||
|
|
70f3cc0b27 | ||
|
|
0ad6c879b3 | ||
|
|
e9b4022787 | ||
|
|
37a78b14be | ||
|
|
5a6b777cf8 | ||
|
|
c197bf9e6d | ||
|
|
3d10296f4b | ||
|
|
810f52b924 | ||
|
|
6234888c69 | ||
|
|
b39edc1002 | ||
|
|
100ccb759c | ||
|
|
cbbcc8d2e1 | ||
|
|
47fd73255e | ||
|
|
da5f7155c6 | ||
|
|
d66e6e6d40 | ||
|
|
240b29220f | ||
|
|
19404bc13e | ||
|
|
26250173ab | ||
|
|
a04e635416 | ||
|
|
95d71fff04 | ||
|
|
536b1c4816 | ||
|
|
04bd528bed | ||
|
|
0974fa1172 | ||
|
|
40bf1a550b | ||
|
|
b35b5a6e05 | ||
|
|
976e33330f | ||
|
|
75021a1eac | ||
|
|
350723bff8 | ||
|
|
f49702feff | ||
|
|
587e7759b1 | ||
|
|
c8fa44e9e9 | ||
|
|
a5b6ccc1ec | ||
|
|
983acf7103 | ||
|
|
61ddfe6972 | ||
|
|
a6f74f10ad | ||
|
|
825006d906 | ||
|
|
02275587d1 | ||
|
|
8bd8276791 | ||
|
|
ca408a7159 | ||
|
|
e8f32c4bc4 | ||
|
|
a41f3ebea3 | ||
|
|
d581d698b6 | ||
|
|
b44d20348d | ||
|
|
ff784a610c | ||
|
|
b613167636 | ||
|
|
c5f93686d8 | ||
|
|
749c4fd503 | ||
|
|
f31d847774 | ||
|
|
389b29fdd8 | ||
|
|
1f3774da5a | ||
|
|
a8230336ff | ||
|
|
8f0328006b | ||
|
|
8ef49a5789 | ||
|
|
4c257d2ddb | ||
|
|
a7f306181e | ||
|
|
8d14420d14 | ||
|
|
290920c4fb | ||
|
|
83df609782 | ||
|
|
e2e0ad5ef5 | ||
|
|
739adcb93c | ||
|
|
0b01c934f4 | ||
|
|
326c0587fe | ||
|
|
f78798149a | ||
|
|
4c44dd84d2 | ||
|
|
d193765375 | ||
|
|
bccd2670cc | ||
|
|
30f210b842 | ||
|
|
adcb8cf0ac | ||
|
|
c5eecc7cc2 | ||
|
|
56dcf25cf8 | ||
|
|
8f4ed7014d | ||
|
|
f0237a5b75 | ||
|
|
5530daa0ce | ||
|
|
70344018b6 | ||
|
|
7a1aa6387c | ||
|
|
e8cfb31bff | ||
|
|
cd498c18ba | ||
|
|
3d7a5d282d | ||
|
|
6daca46782 | ||
|
|
b58d17f4b8 | ||
|
|
3cff2b0a58 | ||
|
|
117360cd57 | ||
|
|
9d2f43d312 | ||
|
|
61e71bb455 | ||
|
|
08375ca31a | ||
|
|
a4d4084d08 | ||
|
|
d966db61af | ||
|
|
4452a65095 | ||
|
|
95db6c04aa | ||
|
|
3bc496040d | ||
|
|
cdc7af11bf | ||
|
|
13ffb4b7c2 | ||
|
|
bd0609df58 | ||
|
|
a18e33b3bc | ||
|
|
b52efe0599 | ||
|
|
1ced7cdbbb | ||
|
|
ee9ef24509 | ||
|
|
bc2ec044b8 | ||
|
|
09757dc518 | ||
|
|
500d90058f | ||
|
|
f6b5b658e5 | ||
|
|
db9ca20737 | ||
|
|
330e79bc5d | ||
|
|
068163e2a1 | ||
|
|
81b32d1045 | ||
|
|
ce3ba67cf6 | ||
|
|
63751c6c0f | ||
|
|
41ad9442c0 | ||
|
|
de42c11f99 | ||
|
|
f2be53dd53 | ||
|
|
97b5cdd588 | ||
|
|
4220d32f3d | ||
|
|
9fbfd1c1d8 | ||
|
|
542bf25729 | ||
|
|
5d910aa2e2 | ||
|
|
80d1e4ffa3 | ||
|
|
439d687e1f | ||
|
|
8db5cb18c0 | ||
|
|
0cebe8bf18 | ||
|
|
a3ffc67238 | ||
|
|
21578f74b7 | ||
|
|
0fa421271e | ||
|
|
4530542ac4 | ||
|
|
8c374f391d | ||
|
|
be2eb3157c | ||
|
|
d1947f7354 | ||
|
|
8f846b7ad0 | ||
|
|
a15e833128 | ||
|
|
07a632891c | ||
|
|
b0773145d6 | ||
|
|
212b7330d6 | ||
|
|
88684caba8 | ||
|
|
832e8fb0ac | ||
|
|
ca4dd26648 | ||
|
|
b1526c14e0 | ||
|
|
fae3ad0462 | ||
|
|
499754a52e | ||
|
|
8588f81855 | ||
|
|
fb270cbbd5 | ||
|
|
9626a0d884 | ||
|
|
8ecf0b1c20 | ||
|
|
45f045def2 | ||
|
|
d01cf4300c | ||
|
|
226b60bc4f | ||
|
|
7ef06b0a60 | ||
|
|
2fa8f989ae | ||
|
|
65a3a4d908 | ||
|
|
aec91850e5 | ||
|
|
7160dcb054 | ||
|
|
b511d2c624 | ||
|
|
b021f6e05d | ||
|
|
ffc0a81e85 | ||
|
|
3277ea83ea | ||
|
|
b0d83e8c50 | ||
|
|
a5c31b2426 | ||
|
|
2c6f581fa6 | ||
|
|
f4035e096f | ||
|
|
8fa77adf9a | ||
|
|
022213972b | ||
|
|
d950eb85d7 | ||
|
|
067c2e35b2 | ||
|
|
7b1ba673f2 | ||
|
|
2feb599a0e | ||
|
|
42e8d1b498 | ||
|
|
d4657f6198 | ||
|
|
2fe695d3cf | ||
|
|
e3a7d2014d | ||
|
|
e13fa27074 | ||
|
|
635ac8e8a8 | ||
|
|
fe4f9d6232 | ||
|
|
a17028c7de | ||
|
|
ad72cd3171 | ||
|
|
870bf6d0b9 | ||
|
|
0c454c6442 | ||
|
|
da3791ad3d | ||
|
|
ec6318b379 | ||
|
|
24c472a4a3 | ||
|
|
9920ab3fd9 | ||
|
|
1874f9a3b6 | ||
|
|
1b95da7487 | ||
|
|
d2c1fb95ec | ||
|
|
df9a5bb6df | ||
|
|
db95a93f43 | ||
|
|
63513a5873 | ||
|
|
b90a11191f | ||
|
|
b820eb8235 | ||
|
|
9ae81b7c33 | ||
|
|
d415eed717 | ||
|
|
e83f4e6f79 | ||
|
|
3919ca6060 | ||
|
|
82cadccced | ||
|
|
b99d38dfef | ||
|
|
f3055fcaff | ||
|
|
78ee60e227 | ||
|
|
a591130e0b | ||
|
|
a8d5cb89a8 | ||
|
|
c2b282ac71 | ||
|
|
6311b40329 | ||
|
|
2cf75cc0ce | ||
|
|
33b758d716 | ||
|
|
989fe27a0f | ||
|
|
57db8f938b | ||
|
|
eb3d5602c2 | ||
|
|
0a588d11a5 | ||
|
|
56380027f4 | ||
|
|
9df7812e9c | ||
|
|
dae6a9f701 | ||
|
|
376ad39576 | ||
|
|
e0d976dcca | ||
|
|
a3d49ca335 | ||
|
|
ed11123709 | ||
|
|
f7e7652270 | ||
|
|
d16512b775 | ||
|
|
1b139d0748 | ||
|
|
71a9d0d403 | ||
|
|
42980a69a7 | ||
|
|
006f3dd88c | ||
|
|
7d8383cbd5 | ||
|
|
9d0eea9600 | ||
|
|
1f3eb56688 | ||
|
|
d3e698eb54 | ||
|
|
2ba9d1b79e | ||
|
|
134acba99a | ||
|
|
5f0c320415 | ||
|
|
022df93422 | ||
|
|
d16eda6e56 | ||
|
|
6076457b90 | ||
|
|
5a099e0762 | ||
|
|
b180319bbf | ||
|
|
7196e87833 | ||
|
|
aba6900994 | ||
|
|
ae8aa60844 | ||
|
|
473a69a704 | ||
|
|
0a7016df2e | ||
|
|
b479e93b49 | ||
|
|
42db7e562d | ||
|
|
88167772e9 | ||
|
|
8f972d6875 | ||
|
|
14879d93fb | ||
|
|
62634bd77b | ||
|
|
79274eb5bc | ||
|
|
ad5ee1ce38 | ||
|
|
dcd3e00f39 | ||
|
|
37766b9527 | ||
|
|
64ad70cc8d | ||
|
|
c80d6b1451 | ||
|
|
9f97c7d028 | ||
|
|
a9fe40d38b | ||
|
|
718f6877d1 | ||
|
|
9e9f9dcae5 | ||
|
|
7d4aee956e | ||
|
|
6a484b1553 | ||
|
|
cb9bff72d6 | ||
|
|
196e3eac8b | ||
|
|
218de6e6a4 | ||
|
|
a70b7ac3b0 | ||
|
|
3484e8ea7b | ||
|
|
967383853c | ||
|
|
d0c54cddb0 | ||
|
|
f0f27a486d | ||
|
|
89576f8a87 | ||
|
|
9a4839f45c | ||
|
|
6338ea5d42 | ||
|
|
ee1952e488 | ||
|
|
95eb8d79d0 | ||
|
|
871cab8cbe | ||
|
|
a0ca0c04ff | ||
|
|
fbf10c35a9 | ||
|
|
a40c12d63e | ||
|
|
eb8386e3f0 | ||
|
|
8f8fba2056 | ||
|
|
d4362a3676 | ||
|
|
c7823e32ff | ||
|
|
5482f78a9c | ||
|
|
f851e992cf | ||
|
|
22a648755b | ||
|
|
dec6ac49f6 |
@@ -66,12 +66,12 @@ github:
|
||||
- cypress-matrix (3, chrome)
|
||||
- docker-build
|
||||
- frontend-build
|
||||
- pre-commit (3.8)
|
||||
- python-lint (3.8)
|
||||
- test-mysql (3.8)
|
||||
- test-postgres (3.8)
|
||||
- pre-commit (3.9)
|
||||
- python-lint (3.9)
|
||||
- test-mysql (3.9)
|
||||
- test-postgres (3.9)
|
||||
- test-sqlite (3.8)
|
||||
- test-postgres (3.10)
|
||||
- test-sqlite (3.9)
|
||||
|
||||
required_pull_request_reviews:
|
||||
dismiss_stale_reviews: false
|
||||
|
||||
@@ -15,4 +15,4 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
FLASK_APP="superset.app:create_app()"
|
||||
FLASK_ENV="development"
|
||||
FLASK_DEBUG=true
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
|
||||
# Notify some committers of changes in the components
|
||||
|
||||
/superset-frontend/src/components/Select/ @michael-s-molina @geido @ktmud
|
||||
/superset-frontend/src/components/MetadataBar/ @michael-s-molina
|
||||
/superset-frontend/src/components/DropdownContainer/ @michael-s-molina
|
||||
/superset-frontend/src/components/Select/ @michael-s-molina @geido @kgabryje
|
||||
/superset-frontend/src/components/MetadataBar/ @michael-s-molina @geido @kgabryje
|
||||
/superset-frontend/src/components/DropdownContainer/ @michael-s-molina @geido @kgabryje
|
||||
|
||||
# Notify Helm Chart maintainers about changes in it
|
||||
|
||||
@@ -23,3 +23,7 @@
|
||||
# Notify E2E test maintainers of changes
|
||||
|
||||
/superset-frontend/cypress-base/ @jinghua-qa @geido @eschutho @rusackas @betodealmeida
|
||||
|
||||
# Notify PMC members of changes to GitHub Actions
|
||||
|
||||
/.github/ @villebro @geido @eschutho @rusackas @betodealmeida @nytai @mistercrunch @craig-rueda @john-bodley @kgabryje
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
name: Bug report
|
||||
description: Report a bug to improve Superset's stability
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Hello Superset Community member! Please keep things tidy by putting your post in the proper place:
|
||||
|
||||
🐛 Reporting a bug: use this form.
|
||||
🙏 Asking a question or getting help: post in the [Superset Slack chat](http://bit.ly/join-superset-slack) or [GitHub Discussions](https://github.com/apache/superset/discussions) under "Q&A / Help".
|
||||
💡 Requesting a new feature: Search [GitHub Discussions](https://github.com/apache/superset/discussions) to see if it exists already. If not, add a new post there under "Ideas".
|
||||
- type: textarea
|
||||
id: bug-description
|
||||
attributes:
|
||||
label: Bug description
|
||||
description: A clear and concise description of what the bug is.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: repro-steps
|
||||
attributes:
|
||||
label: How to reproduce the bug
|
||||
placeholder: |
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots-recordings
|
||||
attributes:
|
||||
label: Screenshots/recordings
|
||||
description: If applicable, add screenshots or recordings to help explain your problem.
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### Environment
|
||||
|
||||
Please specify your environment. If your environment does not match the alternatives, you need to upgrade your environment before submitting the issue as it may have already been fixed. For additional information about the releases, see [Release Process](https://github.com/apache/superset/wiki/Release-Process).
|
||||
- type: dropdown
|
||||
id: superset-version
|
||||
attributes:
|
||||
label: Superset version
|
||||
options:
|
||||
- master / latest-dev
|
||||
- "3.1.0"
|
||||
- "3.0.3"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: python-version
|
||||
attributes:
|
||||
label: Python version
|
||||
options:
|
||||
- "3.9"
|
||||
- "3.10"
|
||||
- "3.11"
|
||||
- Not applicable
|
||||
- I don't know
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: node-version
|
||||
attributes:
|
||||
label: Node version
|
||||
options:
|
||||
- "16"
|
||||
- "17"
|
||||
- "18 or greater"
|
||||
- Not applicable
|
||||
- I don't know
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: browser
|
||||
attributes:
|
||||
label: Browser
|
||||
options:
|
||||
- Chrome
|
||||
- Firefox
|
||||
- Safari
|
||||
- Not applicable
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: |
|
||||
Add any other context about the problem here such as the feature flags that you have enabled, any customizations you have made, the data source you are querying, etc.
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
description: Make sure to follow these steps before submitting your issue - thank you!
|
||||
options:
|
||||
- label: I have searched Superset docs and Slack and didn't find a solution to my problem.
|
||||
- label: I have searched the GitHub issue tracker and didn't find a similar bug report.
|
||||
- label: I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section.
|
||||
validations:
|
||||
required: true
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve Superset's stability! For feature requests please open a discussion at https://github.com/apache/superset/discussions/categories/ideas
|
||||
labels: "#bug"
|
||||
|
||||
---
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
#### How to reproduce the bug
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
### Expected results
|
||||
|
||||
what you expected to happen.
|
||||
|
||||
### Actual results
|
||||
|
||||
what actually happens.
|
||||
|
||||
#### Screenshots
|
||||
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
|
||||
### Environment
|
||||
|
||||
(please complete the following information):
|
||||
|
||||
- browser type and version:
|
||||
- superset version: `superset version`
|
||||
- python version: `python --version`
|
||||
- node.js version: `node -v`
|
||||
- any feature flags active:
|
||||
|
||||
### Checklist
|
||||
|
||||
Make sure to follow these steps before submitting your issue - thank you!
|
||||
|
||||
- [ ] I have checked the superset logs for python stacktraces and included it here as text if there are any.
|
||||
- [ ] I have reproduced the issue with at least the latest released version of superset.
|
||||
- [ ] I have checked the issue tracker for the same issue and I haven't found one similar.
|
||||
|
||||
### Additional context
|
||||
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Feature Request
|
||||
url: https://github.com/apache/superset/discussions/new?category=ideas
|
||||
about: Propose a feature request to the Superset community
|
||||
- name: Q&A
|
||||
url: https://github.com/apache/superset/discussions/new?category=q-a-help
|
||||
about: Open a community Q&A thread on GitHub Discussions
|
||||
- name: Slack
|
||||
url: https://bit.ly/join-superset-slack
|
||||
about: Join the Superset Community on Slack for other discussions and assistance
|
||||
@@ -2,7 +2,6 @@
|
||||
name: Cosmetic Issue
|
||||
about: Describe a cosmetic issue with CSS, positioning, layout, labeling, or similar
|
||||
labels: "cosmetic-issue"
|
||||
|
||||
---
|
||||
|
||||
## Screenshot
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
---
|
||||
name: SIP
|
||||
about: Superset Improvement Proposal (See SIP-0: https://github.com/apache/superset/issues/5602)
|
||||
labels: "#SIP"
|
||||
about: "Superset Improvement Proposal. See SIP-0 (https://github.com/apache/superset/issues/5602) for details. A SIP introduces any major change into Apache Superset's code or process."
|
||||
labels: sip
|
||||
title: "[SIP] Your Title Here (do not add SIP number)"
|
||||
asignees: "apache/superset-committers"
|
||||
|
||||
assignees: "apache/superset-committers"
|
||||
---
|
||||
|
||||
*Please make sure you are familiar with the SIP process documented*
|
||||
(here)[https://github.com/apache/superset/issues/5602]. The SIP will be numbered by a committer upon acceptance.
|
||||
[here](https://github.com/apache/superset/issues/5602). The SIP will be numbered by a committer upon acceptance.
|
||||
|
||||
## [SIP] Proposal for ...<title>
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# Security Policy
|
||||
|
||||
This is a project of the [Apache Software Foundation](https://apache.org) and follows the
|
||||
ASF [vulnerability handling process](https://apache.org/security/#vulnerability-handling).
|
||||
|
||||
## Reporting Vulnerabilities
|
||||
|
||||
**⚠️ Please do not file GitHub issues for security vulnerabilities as they are public! ⚠️**
|
||||
|
||||
|
||||
Apache Software Foundation takes a rigorous standpoint in annihilating the security issues
|
||||
in its software projects. Apache Superset is highly sensitive and forthcoming to issues
|
||||
pertaining to its features and functionality.
|
||||
If you have any concern or believe you have found a vulnerability in Apache Superset,
|
||||
please get in touch with the Apache Superset Security Team privately at
|
||||
e-mail address [security@superset.apache.org](mailto:security@superset.apache.org).
|
||||
|
||||
More details can be found on the ASF website at
|
||||
[ASF vulnerability reporting process](https://apache.org/security/#reporting-a-vulnerability)
|
||||
|
||||
We kindly ask you to include the following information in your report:
|
||||
- Apache Superset version that you are using
|
||||
- A sanitized copy of your `superset_config.py` file or any config overrides
|
||||
- Detailed steps to reproduce the vulnerability
|
||||
|
||||
Note that Apache Superset is not responsible for any third-party dependencies that may
|
||||
have security issues. Any vulnerabilities found in third-party dependencies should be
|
||||
reported to the maintainers of those projects. Results from security scans of Apache
|
||||
Superset dependencies found on its official Docker image can be remediated at release time
|
||||
by extending the image itself.
|
||||
|
||||
**Your responsible disclosure and collaboration are invaluable.**
|
||||
|
||||
## Extra Information
|
||||
|
||||
- [Apache Superset documentation](https://superset.apache.org/docs/security)
|
||||
- [Common Vulnerabilities and Exposures by release](https://superset.apache.org/docs/security/cves)
|
||||
- [How Security Vulnerabilities are Reported & Handled in Apache Superset (Blog)](https://preset.io/blog/how-security-vulnerabilities-are-reported-and-handled-in-apache-superset/)
|
||||
@@ -3,38 +3,40 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
open-pull-requests-limit: 30
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/requirements/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- pip
|
||||
- dependabot
|
||||
open-pull-requests-limit: 30
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: ".github/actions"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
open-pull-requests-limit: 0
|
||||
interval: "weekly"
|
||||
open-pull-requests-limit: 10
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/docs/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
open-pull-requests-limit: 0
|
||||
interval: "weekly"
|
||||
open-pull-requests-limit: 10
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-websocket/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
@@ -43,8 +45,330 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-websocket/utils/client-ws-app/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
open-pull-requests-limit: 10
|
||||
versioning-strategy: increase
|
||||
|
||||
# Now for all of our plugins and packages!
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-calendar/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-histogram/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-partition/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-world-map/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-pivot-table/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-chord/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-horizon/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-rose/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-preset-chart-deckgl/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-table/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-country-map/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-map-box/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sankey/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-preset-chart-nvd3/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-word-cloud/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-event-flow/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sankey-loop/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-echarts/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/preset-chart-xy/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-heatmap/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sunburst/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-handlebars/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/generator-superset/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/superset-ui-chart-controls/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/superset-ui-core/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/superset-ui-demo/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/superset-ui-switchboard/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
@@ -40,7 +40,8 @@ default-setup-command() {
|
||||
apt-get-install() {
|
||||
say "::group::apt-get install dependencies"
|
||||
sudo apt-get update && sudo apt-get install --yes \
|
||||
libsasl2-dev
|
||||
libsasl2-dev \
|
||||
libldap2-dev
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
@@ -159,11 +160,11 @@ cypress-run() {
|
||||
|
||||
say "::group::Run Cypress for [$page]"
|
||||
if [[ -z $CYPRESS_KEY ]]; then
|
||||
$cypress --spec "cypress/integration/$page" --browser "$browser"
|
||||
$cypress --spec "cypress/e2e/$page" --browser "$browser"
|
||||
else
|
||||
export CYPRESS_RECORD_KEY=$(echo $CYPRESS_KEY | base64 --decode)
|
||||
# additional flags for Cypress dashboard recording
|
||||
$cypress --spec "cypress/integration/$page" --browser "$browser" \
|
||||
$cypress --spec "cypress/e2e/$page" --browser "$browser" \
|
||||
--record --group "$group" --tag "${GITHUB_REPOSITORY},${GITHUB_EVENT_NAME}" \
|
||||
--parallel --ci-build-id "${GITHUB_SHA:0:8}-${NONCE}"
|
||||
fi
|
||||
@@ -232,7 +233,7 @@ cypress-run-applitools() {
|
||||
nohup flask run --no-debugger -p $port >"$flasklog" 2>&1 </dev/null &
|
||||
local flaskProcessId=$!
|
||||
|
||||
$cypress --spec "cypress/integration/*/**/*.applitools.test.ts" --browser "$browser" --headless --config ignoreTestFiles="[]"
|
||||
$cypress --spec "cypress/e2e/*/**/*.applitools.test.ts" --browser "$browser" --headless --config ignoreTestFiles="[]"
|
||||
|
||||
codecov -c -F "cypress" || true
|
||||
|
||||
|
||||
@@ -10,11 +10,14 @@ jobs:
|
||||
cancel-duplicate-runs:
|
||||
name: Cancel duplicate workflow runs
|
||||
runs-on: ubuntu-20.04
|
||||
permissions:
|
||||
actions: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Check number of queued tasks
|
||||
id: check_queued
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
GITHUB_REPO: ${{ github.repository }}
|
||||
run: |
|
||||
get_count() {
|
||||
@@ -28,12 +31,12 @@ jobs:
|
||||
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
if: steps.check_queued.outputs.count >= 20
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Cancel duplicate workflow runs
|
||||
if: steps.check_queued.outputs.count >= 20
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
GITHUB_REPOSITORY: ${{ github.repository }}
|
||||
run: |
|
||||
pip install click requests typing_extensions python-dateutil
|
||||
|
||||
@@ -8,13 +8,16 @@ jobs:
|
||||
check_db_migration_conflict:
|
||||
name: Check DB migration conflict
|
||||
runs-on: ubuntu-20.04
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
- name: Check and notify
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
github-token: ${{ github.token }}
|
||||
script: |
|
||||
// API reference: https://octokit.github.io/rest.js
|
||||
const currentBranch = context.ref.replace('refs/heads/', '');
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# .github/workflows/chromatic.yml
|
||||
# seee https://www.chromatic.com/docs/github-actions
|
||||
# see https://www.chromatic.com/docs/github-actions
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
@@ -32,12 +32,29 @@ on:
|
||||
|
||||
# List of jobs
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.CHROMATIC_PROJECT_TOKEN != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
chromatic-deployment:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
# Operating System
|
||||
runs-on: ubuntu-latest
|
||||
# Job steps
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # 👈 Required to retrieve git history
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
working-directory: superset-frontend
|
||||
|
||||
@@ -174,7 +174,7 @@ cat << EOF
|
||||
|
||||
-c Move discovered coverage reports to the trash
|
||||
-z FILE Upload specified file directly to Codecov and bypass all report generation.
|
||||
This is inteded to be used only with a pre-formatted Codecov report and is not
|
||||
This is intended to be used only with a pre-formatted Codecov report and is not
|
||||
expected to work under any other circumstances.
|
||||
-Z Exit with 1 if not successful. Default will Exit with 0
|
||||
|
||||
@@ -1152,7 +1152,7 @@ fi
|
||||
|
||||
if [ "$ft_search" = "1" ];
|
||||
then
|
||||
# detect bower comoponents location
|
||||
# detect bower components location
|
||||
bower_components="bower_components"
|
||||
bower_rc=$(cd "$git_root" && cat .bowerrc 2>/dev/null || echo "")
|
||||
if [ "$bower_rc" != "" ];
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
paths:
|
||||
- 'superset/**'
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "master" ]
|
||||
paths:
|
||||
- 'superset/**'
|
||||
schedule:
|
||||
- cron: '0 4 * * *'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'python', 'javascript' ]
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
@@ -0,0 +1,25 @@
|
||||
# Dependency Review Action
|
||||
#
|
||||
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
||||
#
|
||||
# Source repository: https://github.com/actions/dependency-review-action
|
||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
||||
name: "Dependency Review"
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout Repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Dependency Review"
|
||||
uses: actions/dependency-review-action@v2
|
||||
with:
|
||||
fail-on-severity: critical
|
||||
# compatible/incompatible licenses addressed here: https://www.apache.org/legal/resolved.html
|
||||
# find SPDX identifiers here: https://spdx.org/licenses/
|
||||
deny-licenses: MS-LPL, BUSL-1.1, QPL-1.0, Sleepycat, SSPL-1.0, CPOL-1.02, AGPL-3.0, GPL-1.0+, BSD-4-Clause-UC, NPL-1.0, NPL-1.1, JSON
|
||||
@@ -1,78 +0,0 @@
|
||||
name: Push ephmereral env image
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Docker"]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
docker_ephemeral_env:
|
||||
name: Push ephemeral env Docker image to ECR
|
||||
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 'Download artifact'
|
||||
uses: actions/github-script@v3.1.0
|
||||
with:
|
||||
script: |
|
||||
const artifacts = await github.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: ${{ github.event.workflow_run.id }},
|
||||
});
|
||||
|
||||
core.info('*** artifacts')
|
||||
core.info(JSON.stringify(artifacts))
|
||||
|
||||
const matchArtifact = artifacts.data.artifacts.filter((artifact) => {
|
||||
return artifact.name == "build"
|
||||
})[0];
|
||||
if(!matchArtifact) return core.setFailed("Build artifacts not found")
|
||||
|
||||
const download = await github.actions.downloadArtifact({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
artifact_id: matchArtifact.id,
|
||||
archive_format: 'zip',
|
||||
});
|
||||
var fs = require('fs');
|
||||
fs.writeFileSync('${{github.workspace}}/build.zip', Buffer.from(download.data));
|
||||
|
||||
- run: unzip build.zip
|
||||
|
||||
- name: Display downloaded files (debug)
|
||||
run: ls -la
|
||||
|
||||
- name: Get SHA
|
||||
id: get-sha
|
||||
run: echo "::set-output name=sha::$(cat ./SHA)"
|
||||
|
||||
- name: Get PR
|
||||
id: get-pr
|
||||
run: echo "::set-output name=num::$(cat ./PR-NUM)"
|
||||
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-west-2
|
||||
|
||||
- name: Login to Amazon ECR
|
||||
id: login-ecr
|
||||
uses: aws-actions/amazon-ecr-login@v1
|
||||
|
||||
- name: Load, tag and push image to ECR
|
||||
id: push-image
|
||||
env:
|
||||
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
|
||||
ECR_REPOSITORY: superset-ci
|
||||
SHA: ${{ steps.get-sha.outputs.sha }}
|
||||
IMAGE_TAG: pr-${{ steps.get-pr.outputs.num }}
|
||||
run: |
|
||||
docker load < $SHA.tar.gz
|
||||
docker tag $SHA $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
|
||||
docker tag $SHA $ECR_REGISTRY/$ECR_REPOSITORY:$SHA
|
||||
docker push -a $ECR_REGISTRY/$ECR_REPOSITORY
|
||||
@@ -4,20 +4,47 @@ on:
|
||||
release:
|
||||
types: [published]
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.DOCKERHUB_USER != '' && secrets.DOCKERHUB_TOKEN != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
docker-release:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: docker-release
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: ["dev", "lean", "lean310", "websocket", "dockerize"]
|
||||
platform: ["linux/amd64", "linux/arm64"]
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
ref: ${{ github.ref }}
|
||||
- shell: bash
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build Docker Image
|
||||
env:
|
||||
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
run: |
|
||||
GITHUB_RELEASE_TAG_NAME="${{ github.event.release.tag_name }}"
|
||||
./scripts/docker_build_push.sh "$GITHUB_RELEASE_TAG_NAME"
|
||||
./scripts/docker_build_push.sh "$GITHUB_RELEASE_TAG_NAME" ${{ matrix.target }} ${{ matrix.platform }}
|
||||
|
||||
@@ -10,7 +10,6 @@ on:
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
if: github.event.pull_request.draft == false
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
@@ -25,23 +24,52 @@ jobs:
|
||||
echo "has-secrets=0" >> "$GITHUB_OUTPUT"
|
||||
echo "no secrets!"
|
||||
fi
|
||||
|
||||
docker-build:
|
||||
if: github.event.pull_request.draft == false
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: docker-build
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: ["dev", "lean", "lean310", "websocket", "dockerize"]
|
||||
platform: ["linux/amd64", "linux/arm64"]
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- shell: bash
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build Docker Image
|
||||
shell: bash
|
||||
env:
|
||||
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
run: |
|
||||
./scripts/docker_build_push.sh
|
||||
./scripts/docker_build_push.sh "" ${{ matrix.target }} ${{ matrix.platform }}
|
||||
|
||||
ephemeral-docker-build:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: docker-build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build ephemeral env image
|
||||
if: github.event_name == 'pull_request'
|
||||
@@ -49,12 +77,19 @@ jobs:
|
||||
mkdir -p ./build
|
||||
echo ${{ github.sha }} > ./build/SHA
|
||||
echo ${{ github.event.pull_request.number }} > ./build/PR-NUM
|
||||
docker build --target ci -t ${{ github.sha }} -t "pr-${{ github.event.pull_request.number }}" .
|
||||
docker buildx build --target ci \
|
||||
--load \
|
||||
--cache-from=type=registry,ref=apache/superset:lean \
|
||||
-t ${{ github.sha }} \
|
||||
-t "pr-${{ github.event.pull_request.number }}" \
|
||||
--platform linux/amd64 \
|
||||
--label "build_actor=${GITHUB_ACTOR}" \
|
||||
.
|
||||
docker save ${{ github.sha }} | gzip > ./build/${{ github.sha }}.tar.gz
|
||||
|
||||
- name: Upload build artifacts
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: build
|
||||
path: build/
|
||||
|
||||
@@ -23,6 +23,14 @@
|
||||
{
|
||||
"name": "SUPERSET_PORT",
|
||||
"value": "8080"
|
||||
},
|
||||
{
|
||||
"name": "SUPERSET_SECRET_KEY",
|
||||
"value": "super-secret-for-ephemerals"
|
||||
},
|
||||
{
|
||||
"name": "TALISMAN_ENABLED",
|
||||
"value": "False"
|
||||
}
|
||||
],
|
||||
"mountPoints": [],
|
||||
|
||||
@@ -6,14 +6,29 @@ on:
|
||||
- 'master'
|
||||
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.NPM_TOKEN != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
build:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
runs-on: ubuntu-20.04
|
||||
defaults:
|
||||
run:
|
||||
working-directory: superset-embedded-sdk
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "16"
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
|
||||
@@ -8,14 +8,13 @@ on:
|
||||
|
||||
jobs:
|
||||
embedded-sdk-test:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
defaults:
|
||||
run:
|
||||
working-directory: superset-embedded-sdk
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "16"
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
|
||||
@@ -5,9 +5,26 @@ on:
|
||||
types: [closed]
|
||||
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.AWS_ACCESS_KEY_ID != '' && secrets.AWS_SECRET_ACCESS_KEY != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
ephemeral-env-cleanup:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: Cleanup ephemeral envs
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
@@ -48,7 +65,7 @@ jobs:
|
||||
if: steps.describe-services.outputs.active == 'true'
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
github-token: ${{github.token}}
|
||||
script: |
|
||||
github.issues.createComment({
|
||||
issue_number: ${{ github.event.number }},
|
||||
|
||||
@@ -5,10 +5,27 @@ on:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
ephemeral_env_comment:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
if: github.event.issue.pull_request
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.AWS_ACCESS_KEY_ID != '' && secrets.AWS_SECRET_ACCESS_KEY != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
ephemeral_env_comment:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: Evaluate ephemeral env comment trigger (/testenv)
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
outputs:
|
||||
slash-command: ${{ steps.eval-body.outputs.result }}
|
||||
feature-flags: ${{ steps.eval-feature-flags.outputs.result }}
|
||||
@@ -51,7 +68,7 @@ jobs:
|
||||
github.event.comment.author_association != 'OWNER'
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
github-token: ${{github.token}}
|
||||
script: |
|
||||
const errMsg = '@${{ github.event.comment.user.login }} Ephemeral environment creation is currently limited to committers.'
|
||||
github.issues.createComment({
|
||||
@@ -62,14 +79,91 @@ jobs:
|
||||
})
|
||||
core.setFailed(errMsg)
|
||||
|
||||
docker_ephemeral_env:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: Push ephemeral env Docker image to ECR
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: "Download artifact"
|
||||
uses: actions/github-script@v3.1.0
|
||||
with:
|
||||
script: |
|
||||
const artifacts = await github.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: ${{ github.event.workflow_run.id }},
|
||||
});
|
||||
|
||||
core.info('*** artifacts')
|
||||
core.info(JSON.stringify(artifacts))
|
||||
|
||||
const matchArtifact = artifacts.data.artifacts.filter((artifact) => {
|
||||
return artifact.name === "build";
|
||||
});
|
||||
|
||||
if (!matchArtifact.length) {
|
||||
return core.setFailed("Build artifacts not found");
|
||||
}
|
||||
|
||||
const download = await github.actions.downloadArtifact({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
artifact_id: matchArtifact[0].id,
|
||||
archive_format: 'zip',
|
||||
});
|
||||
var fs = require('fs');
|
||||
fs.writeFileSync('${{github.workspace}}/build.zip', Buffer.from(download.data));
|
||||
|
||||
- run: unzip build.zip
|
||||
|
||||
- name: Display downloaded files (debug)
|
||||
run: ls -la
|
||||
|
||||
- name: Get SHA
|
||||
id: get-sha
|
||||
run: echo "::set-output name=sha::$(cat ./SHA)"
|
||||
|
||||
- name: Get PR
|
||||
id: get-pr
|
||||
run: echo "::set-output name=num::$(cat ./PR-NUM)"
|
||||
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-west-2
|
||||
|
||||
- name: Login to Amazon ECR
|
||||
id: login-ecr
|
||||
uses: aws-actions/amazon-ecr-login@v1
|
||||
|
||||
- name: Load, tag and push image to ECR
|
||||
id: push-image
|
||||
env:
|
||||
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
|
||||
ECR_REPOSITORY: superset-ci
|
||||
SHA: ${{ steps.get-sha.outputs.sha }}
|
||||
IMAGE_TAG: pr-${{ steps.get-pr.outputs.num }}
|
||||
run: |
|
||||
docker load < $SHA.tar.gz
|
||||
docker tag $SHA $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
|
||||
docker tag $SHA $ECR_REGISTRY/$ECR_REPOSITORY:$SHA
|
||||
docker push -a $ECR_REGISTRY/$ECR_REPOSITORY
|
||||
|
||||
ephemeral_env_up:
|
||||
needs: ephemeral_env_comment
|
||||
if: needs.ephemeral_env_comment.outputs.slash-command == 'up'
|
||||
name: Spin up an ephemeral environment
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -97,7 +191,7 @@ jobs:
|
||||
if: steps.check-image.outcome == 'failure'
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
github-token: ${{github.token}}
|
||||
script: |
|
||||
const errMsg = '@${{ github.event.comment.user.login }} Container image not yet published for this PR. Please try again when build is complete.'
|
||||
github.issues.createComment({
|
||||
@@ -171,7 +265,7 @@ jobs:
|
||||
if: ${{ success() }}
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
github-token: ${{github.token}}
|
||||
script: |
|
||||
github.issues.createComment({
|
||||
issue_number: ${{ github.event.issue.number }},
|
||||
@@ -184,7 +278,7 @@ jobs:
|
||||
if: ${{ failure() }}
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
github-token: ${{github.token}}
|
||||
script: |
|
||||
github.issues.createComment({
|
||||
issue_number: ${{ github.event.issue.number }},
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
name: Label Migration PR
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'superset/migrations/**'
|
||||
|
||||
jobs:
|
||||
label:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Add label
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{github.token}}
|
||||
script: |
|
||||
github.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['risk:db-migration']
|
||||
})
|
||||
@@ -7,10 +7,12 @@ jobs:
|
||||
latest-release:
|
||||
name: Add/update tag to new release
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -27,4 +29,4 @@ jobs:
|
||||
description: Superset latest release
|
||||
tag-name: latest
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
|
||||
@@ -7,12 +7,27 @@ on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.FOSSA_API_KEY != '' ) || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
license_check:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: License Check
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
|
||||
@@ -11,9 +11,12 @@ on:
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -25,4 +28,4 @@ jobs:
|
||||
on-failed-regex-create-review: false
|
||||
on-failed-regex-comment:
|
||||
"Please format your PR title to match: `%regex%`!"
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
repo-token: "${{ github.token }}"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Prefer Typescript
|
||||
name: Prefer TypeScript
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -9,11 +9,14 @@ on:
|
||||
jobs:
|
||||
prefer_typescript:
|
||||
if: github.ref == 'ref/heads/master' && github.event_name == 'pull_request'
|
||||
name: Prefer Typescript
|
||||
name: Prefer TypeScript
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -21,7 +24,7 @@ jobs:
|
||||
id: changed
|
||||
uses: ./.github/actions/file-changes-action
|
||||
with:
|
||||
githubToken: ${{ secrets.GITHUB_TOKEN }}
|
||||
githubToken: ${{ github.token }}
|
||||
|
||||
- name: Determine if a .js or .jsx file was added
|
||||
id: check
|
||||
@@ -42,7 +45,7 @@ jobs:
|
||||
uses: ./.github/actions/comment-on-pr
|
||||
continue-on-error: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
with:
|
||||
msg: |
|
||||
### WARNING: Prefer TypeScript
|
||||
|
||||
@@ -6,7 +6,22 @@ on:
|
||||
- 'master'
|
||||
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.NPM_TOKEN != '' && secrets.GH_PERSONAL_ACCESS_TOKEN != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
build:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: Bump version and publish package(s)
|
||||
|
||||
runs-on: ubuntu-20.04
|
||||
@@ -16,22 +31,28 @@ jobs:
|
||||
node-version: [16]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
# pulls all commits (needed for lerna / semantic release to correctly version)
|
||||
fetch-depth: 0
|
||||
- name: Get tags and filter trigger tags
|
||||
run: |
|
||||
git fetch --depth=1 origin "+refs/tags/*:refs/tags/*"
|
||||
if ! git fetch --depth=1 origin "+refs/tags/*:refs/tags/*"; then
|
||||
echo "::notice title=Workflow skipped::No tags present in repository"
|
||||
exit
|
||||
fi
|
||||
echo "HAS_TAGS=1" >> $GITHUB_ENV"
|
||||
git fetch --prune --unshallow
|
||||
git tag -d `git tag | grep -E '^trigger-'`
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
if: env.HAS_TAGS
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Cache npm
|
||||
if: env.HAS_TAGS
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
|
||||
@@ -41,9 +62,11 @@ jobs:
|
||||
${{ runner.OS }}-
|
||||
|
||||
- name: Get npm cache directory path
|
||||
if: env.HAS_TAGS
|
||||
id: npm-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(npm config get cache)"
|
||||
- name: Cache npm
|
||||
if: env.HAS_TAGS
|
||||
uses: actions/cache@v1
|
||||
id: npm-cache # use this to check for `cache-hit` (`steps.npm-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
@@ -53,16 +76,20 @@ jobs:
|
||||
${{ runner.os }}-npm-
|
||||
|
||||
- name: Install dependencies
|
||||
if: env.HAS_TAGS
|
||||
working-directory: ./superset-frontend
|
||||
run: npm ci
|
||||
- name: Run unit tests
|
||||
if: env.HAS_TAGS
|
||||
working-directory: ./superset-frontend
|
||||
run: npm run test -- plugins packages
|
||||
- name: Build packages
|
||||
if: env.HAS_TAGS
|
||||
working-directory: ./superset-frontend
|
||||
run: npm run plugins:build
|
||||
|
||||
- name: Configure npm and git
|
||||
if: env.HAS_TAGS
|
||||
run: |
|
||||
echo "@superset-ui:registry=https://registry.npmjs.org/" > .npmrc
|
||||
echo "registry=https://registry.npmjs.org/" >> .npmrc
|
||||
@@ -70,17 +97,17 @@ jobs:
|
||||
npm whoami
|
||||
git config --local user.email "action@github.com"
|
||||
git config --local user.name "GitHub Action"
|
||||
git remote set-url origin "https://${GITHUB_TOKEN}@github.com/apache-superset/superset-ui.git" > /dev/null 2>&1
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
|
||||
- name: Bump version and publish package(s)
|
||||
if: env.HAS_TAGS
|
||||
working-directory: ./superset-frontend
|
||||
run: |
|
||||
git tag -d `git tag | grep -E '^trigger-'`
|
||||
npm run plugins:release-from-tag
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
GH_TOKEN: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
|
||||
|
||||
@@ -5,7 +5,22 @@ on:
|
||||
- cron: "0 1 * * *"
|
||||
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.APPLITOOLS_API_KEY != '' && secrets.APPLITOOLS_API_KEY != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
cypress-applitools:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -13,19 +28,19 @@ jobs:
|
||||
browser: ["chrome"]
|
||||
node: [16]
|
||||
env:
|
||||
FLASK_ENV: development
|
||||
SUPERSET_ENV: development
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
REDIS_PORT: 16379
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
APPLITOOLS_APP_NAME: Superset
|
||||
APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
|
||||
APPLITOOLS_BATCH_ID: ${{ github.sha }}
|
||||
APPLITOOLS_BATCH_NAME: Superset Cypress
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -43,9 +58,9 @@ jobs:
|
||||
submodules: recursive
|
||||
ref: master
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.8"
|
||||
python-version: "3.9"
|
||||
- name: OS dependencies
|
||||
uses: ./.github/actions/cached-dependencies
|
||||
with:
|
||||
@@ -65,7 +80,7 @@ jobs:
|
||||
with:
|
||||
run: testdata
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
- name: Install npm dependencies
|
||||
|
||||
@@ -11,7 +11,22 @@ env:
|
||||
APPLITOOLS_BATCH_NAME: Superset Storybook
|
||||
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.APPLITOOLS_API_KEY != '' && secrets.APPLITOOLS_API_KEY != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
cron:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
|
||||
@@ -9,11 +9,10 @@ on:
|
||||
|
||||
jobs:
|
||||
test-load-examples:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.9]
|
||||
python-version: ["3.9"]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
@@ -21,7 +20,7 @@ jobs:
|
||||
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -35,7 +34,7 @@ jobs:
|
||||
- 16379:6379
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -48,7 +47,7 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh python
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: 'pip'
|
||||
|
||||
@@ -9,7 +9,22 @@ on:
|
||||
- "docs/**"
|
||||
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.SUPERSET_SITE_BUILD != '' && secrets.SUPERSET_SITE_BUILD != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
build-deploy:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: Build & Deploy
|
||||
runs-on: ubuntu-20.04
|
||||
defaults:
|
||||
@@ -17,7 +32,7 @@ jobs:
|
||||
working-directory: docs
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
|
||||
@@ -11,8 +11,10 @@ on:
|
||||
|
||||
jobs:
|
||||
cypress-matrix:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
strategy:
|
||||
# when one test fails, DO NOT cancel the other
|
||||
# containers, because this will kill Cypress processes
|
||||
@@ -23,15 +25,15 @@ jobs:
|
||||
containers: [1, 2, 3]
|
||||
browser: ["chrome"]
|
||||
env:
|
||||
FLASK_ENV: development
|
||||
SUPERSET_ENV: development
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
REDIS_PORT: 16379
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -43,13 +45,13 @@ jobs:
|
||||
- 16379:6379
|
||||
steps:
|
||||
- name: "Checkout (pull) ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
if: github.event_name == 'push'
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
- name: "Checkout (pull_request) ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target'
|
||||
with:
|
||||
ref: "refs/pull/${{ github.event.number }}/merge"
|
||||
@@ -64,9 +66,9 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh python frontend
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.8"
|
||||
python-version: "3.9"
|
||||
- name: OS dependencies
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: ./.github/actions/cached-dependencies
|
||||
@@ -90,7 +92,7 @@ jobs:
|
||||
with:
|
||||
run: testdata
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "16"
|
||||
- name: Install npm dependencies
|
||||
@@ -117,7 +119,7 @@ jobs:
|
||||
with:
|
||||
run: cypress-run-all
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: screenshots
|
||||
|
||||
@@ -10,11 +10,10 @@ on:
|
||||
|
||||
jobs:
|
||||
frontend-build:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -29,7 +28,7 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh frontend
|
||||
- name: Setup Node.js
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "16"
|
||||
- name: Install dependencies
|
||||
@@ -41,7 +40,7 @@ jobs:
|
||||
if: steps.check.outcome == 'failure'
|
||||
working-directory: ./superset-frontend
|
||||
run: |
|
||||
npm run lint
|
||||
npm run lint -- --quiet
|
||||
npm run prettier-check
|
||||
- name: Build plugins packages
|
||||
if: steps.check.outcome == 'failure'
|
||||
@@ -60,7 +59,7 @@ jobs:
|
||||
if: steps.check.outcome == 'failure'
|
||||
working-directory: ./superset-frontend
|
||||
run: |
|
||||
npm run test -- --coverage
|
||||
npm run test -- --coverage --silent
|
||||
# todo: remove this step when fix generator as a project in root jest.config.js
|
||||
- name: generator-superset unit tests
|
||||
if: steps.check.outcome == 'failure'
|
||||
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -20,9 +20,9 @@ jobs:
|
||||
with:
|
||||
version: v3.5.4
|
||||
|
||||
- uses: actions/setup-python@v2
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.8
|
||||
python-version: "3.9"
|
||||
|
||||
- name: Set up chart-testing
|
||||
uses: ./.github/actions/chart-testing-action
|
||||
|
||||
@@ -10,9 +10,12 @@ on:
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -36,5 +39,5 @@ jobs:
|
||||
with:
|
||||
charts_dir: helm
|
||||
env:
|
||||
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
CR_TOKEN: "${{ github.token }}"
|
||||
CR_RELEASE_NAME_TEMPLATE: "superset-helm-chart-{{ .Version }}"
|
||||
|
||||
@@ -10,11 +10,10 @@ on:
|
||||
|
||||
jobs:
|
||||
test-mysql:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
python-version: ["3.9"]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
@@ -35,7 +34,7 @@ jobs:
|
||||
- 16379:6379
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -48,7 +47,7 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh python
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: 'pip'
|
||||
@@ -76,11 +75,10 @@ jobs:
|
||||
bash .github/workflows/codecov.sh -c -F python -F mysql
|
||||
|
||||
test-postgres:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8, 3.9]
|
||||
python-version: ["3.9", "3.10"]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
@@ -88,7 +86,7 @@ jobs:
|
||||
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -102,7 +100,7 @@ jobs:
|
||||
- 16379:6379
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -115,7 +113,7 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh python
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: 'pip'
|
||||
@@ -143,17 +141,18 @@ jobs:
|
||||
bash .github/workflows/codecov.sh -c -F python -F postgres
|
||||
|
||||
test-sqlite:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
python-version: ["3.9"]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
REDIS_PORT: 16379
|
||||
SUPERSET__SQLALCHEMY_DATABASE_URI: |
|
||||
sqlite:///${{ github.workspace }}/.temp/unittest.db
|
||||
sqlite:///${{ github.workspace }}/.temp/superset.db?check_same_thread=true
|
||||
SUPERSET__SQLALCHEMY_EXAMPLES_URI: |
|
||||
sqlite:///${{ github.workspace }}/.temp/examples.db?check_same_thread=true
|
||||
services:
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
@@ -161,7 +160,7 @@ jobs:
|
||||
- 16379:6379
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -174,7 +173,7 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh python
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: 'pip'
|
||||
|
||||
@@ -10,14 +10,13 @@ on:
|
||||
|
||||
jobs:
|
||||
python-lint:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
python-version: ["3.9"]
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -30,7 +29,7 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh python
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: "pip"
|
||||
@@ -50,19 +49,18 @@ jobs:
|
||||
run: pylint -j 0 superset
|
||||
|
||||
pre-commit:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
python-version: ["3.9"]
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: "pip"
|
||||
@@ -88,22 +86,26 @@ jobs:
|
||||
echo "HOMEBREW_REPOSITORY=$HOMEBREW_REPOSITORY" >>"${GITHUB_ENV}"
|
||||
brew install norwoodj/tap/helm-docs
|
||||
- name: pre-commit
|
||||
run: pre-commit run --all-files
|
||||
run: |
|
||||
if ! pre-commit run --all-files; then
|
||||
git status
|
||||
git diff
|
||||
exit 1
|
||||
fi
|
||||
|
||||
babel-extract:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
python-version: ["3.9"]
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: "pip"
|
||||
|
||||
@@ -10,11 +10,10 @@ on:
|
||||
|
||||
jobs:
|
||||
test-postgres-presto:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
python-version: ["3.9"]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
@@ -23,7 +22,7 @@ jobs:
|
||||
SUPERSET__SQLALCHEMY_EXAMPLES_URI: presto://localhost:15433/memory/default
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -46,7 +45,7 @@ jobs:
|
||||
- 16379:6379
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -59,7 +58,7 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh python
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: 'pip'
|
||||
@@ -87,11 +86,10 @@ jobs:
|
||||
bash .github/workflows/codecov.sh -c -F python -F presto
|
||||
|
||||
test-postgres-hive:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
python-version: ["3.9"]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
@@ -101,7 +99,7 @@ jobs:
|
||||
UPLOAD_FOLDER: /tmp/.superset/uploads/
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -115,7 +113,7 @@ jobs:
|
||||
- 16379:6379
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -134,10 +132,10 @@ jobs:
|
||||
run: sudo chown -R $USER:$USER /tmp/.superset
|
||||
- name: Start hadoop and hive
|
||||
if: steps.check.outcome == 'failure'
|
||||
run: docker-compose -f scripts/databases/hive/docker-compose.yml up -d
|
||||
run: docker compose -f scripts/databases/hive/docker-compose.yml up -d
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: 'pip'
|
||||
|
||||
@@ -10,16 +10,15 @@ on:
|
||||
|
||||
jobs:
|
||||
unit-tests:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8, 3.9]
|
||||
python-version: ["3.9", "3.10"]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
@@ -32,7 +31,7 @@ jobs:
|
||||
run: ./scripts/ci_check_no_file_changes.sh python
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: 'pip'
|
||||
|
||||
@@ -9,16 +9,15 @@ on:
|
||||
|
||||
jobs:
|
||||
frontend-check:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '16'
|
||||
- name: Install dependencies
|
||||
@@ -31,19 +30,18 @@ jobs:
|
||||
npm run check-translation
|
||||
|
||||
babel-extract:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.8]
|
||||
python-version: ["3.9"]
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install dependencies
|
||||
|
||||
@@ -9,11 +9,10 @@ on:
|
||||
|
||||
jobs:
|
||||
app-checks:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install dependencies
|
||||
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
uses: actions/first-interaction@v1
|
||||
continue-on-error: true
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
repo-token: ${{ github.token }}
|
||||
pr-message: |-
|
||||
Congrats on making your first PR and thank you for contributing to Superset! :tada: :heart:
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ superset/bin/supersetc
|
||||
tmp
|
||||
rat-results.txt
|
||||
superset/app/
|
||||
superset-websocket/config.json
|
||||
|
||||
# Node.js, webpack artifacts, storybook
|
||||
*.entry.js
|
||||
|
||||
@@ -15,21 +15,53 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
repos:
|
||||
- repo: https://github.com/MarcoGorelli/auto-walrus
|
||||
rev: v0.2.2
|
||||
hooks:
|
||||
- id: auto-walrus
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v3.4.0
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
args:
|
||||
- --py39-plus
|
||||
- repo: https://github.com/hadialqattan/pycln
|
||||
rev: v2.1.2
|
||||
hooks:
|
||||
- id: pycln
|
||||
args:
|
||||
- --disable-all-dunder-policy
|
||||
- --exclude=superset/config.py
|
||||
- --extend-exclude=tests/integration_tests/superset_test_config.*.py
|
||||
- repo: https://github.com/PyCQA/isort
|
||||
rev: 5.12.0
|
||||
hooks:
|
||||
- id: isort
|
||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||
rev: v0.941
|
||||
rev: v1.3.0
|
||||
hooks:
|
||||
- id: mypy
|
||||
additional_dependencies: [types-all]
|
||||
args: [--check-untyped-defs]
|
||||
additional_dependencies: [
|
||||
types-simplejson,
|
||||
types-python-dateutil,
|
||||
types-requests,
|
||||
# types-redis 4.6.0.5 is failing mypy
|
||||
# because of https://github.com/python/typeshed/pull/10531
|
||||
types-redis==4.6.0.4,
|
||||
types-pytz,
|
||||
types-croniter,
|
||||
types-PyYAML,
|
||||
types-setuptools,
|
||||
types-paramiko,
|
||||
types-Markdown,
|
||||
]
|
||||
- repo: https://github.com/peterdemin/pip-compile-multi
|
||||
rev: v2.4.1
|
||||
rev: v2.6.2
|
||||
hooks:
|
||||
- id: pip-compile-multi-verify
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v3.2.0
|
||||
rev: v4.4.0
|
||||
hooks:
|
||||
- id: check-docstring-first
|
||||
- id: check-added-large-files
|
||||
@@ -41,7 +73,7 @@ repos:
|
||||
- id: trailing-whitespace
|
||||
args: ["--markdown-linebreak-ext=md"]
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 22.3.0
|
||||
rev: 23.1.0
|
||||
hooks:
|
||||
- id: black
|
||||
language_version: python3
|
||||
|
||||
@@ -50,15 +50,6 @@ unsafe-load-any-extension=no
|
||||
# run arbitrary code
|
||||
extension-pkg-whitelist=pyarrow
|
||||
|
||||
# Allow optimization of some AST trees. This will activate a peephole AST
|
||||
# optimizer, which will apply various small optimizations. For instance, it can
|
||||
# be used to obtain the result of joining multiple strings with the addition
|
||||
# operator. Joining a lot of strings can lead to a maximum recursion error in
|
||||
# Pylint and this flag can prevent that. It has one side effect, the resulting
|
||||
# AST will be different than the one from reality. This option is deprecated
|
||||
# and it will be removed in Pylint 2.0.
|
||||
optimize-ast=no
|
||||
|
||||
|
||||
[MESSAGES CONTROL]
|
||||
|
||||
@@ -83,11 +74,11 @@ enable=
|
||||
# no Warning level messages displayed, use"--disable=all --enable=classes
|
||||
# --disable=W"
|
||||
disable=
|
||||
cyclic-import, # re-enable once this no longer raises false positives
|
||||
missing-docstring,
|
||||
duplicate-code,
|
||||
unspecified-encoding,
|
||||
# re-enable once this no longer raises false positives
|
||||
too-many-instance-attributes
|
||||
too-many-instance-attributes # re-enable once this no longer raises false positives
|
||||
|
||||
[REPORTS]
|
||||
|
||||
@@ -96,12 +87,6 @@ disable=
|
||||
# mypackage.mymodule.MyReporterClass.
|
||||
output-format=text
|
||||
|
||||
# Put messages in a separate file for each module / package specified on the
|
||||
# command line instead of printing them on stdout. Reports (if any) will be
|
||||
# written in a file name "pylint_global.[txt|html]". This option is deprecated
|
||||
# and it will be removed in Pylint 2.0.
|
||||
files-output=no
|
||||
|
||||
# Tells whether to display a full report or only the messages
|
||||
reports=yes
|
||||
|
||||
@@ -141,63 +126,33 @@ property-classes=
|
||||
# Regular expression matching correct argument names
|
||||
argument-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Naming hint for argument names
|
||||
argument-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression matching correct method names
|
||||
method-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Naming hint for method names
|
||||
method-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression matching correct variable names
|
||||
variable-rgx=[a-z_][a-z0-9_]{1,30}$
|
||||
|
||||
# Naming hint for variable names
|
||||
variable-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression matching correct inline iteration names
|
||||
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
|
||||
|
||||
# Naming hint for inline iteration names
|
||||
inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$
|
||||
|
||||
# Regular expression matching correct constant names
|
||||
const-rgx=(([A-Za-z_][A-Za-z0-9_]*)|(__.*__))$
|
||||
|
||||
# Naming hint for constant names
|
||||
const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$
|
||||
|
||||
# Regular expression matching correct class names
|
||||
class-rgx=[A-Z_][a-zA-Z0-9]+$
|
||||
|
||||
# Naming hint for class names
|
||||
class-name-hint=[A-Z_][a-zA-Z0-9]+$
|
||||
|
||||
# Regular expression matching correct class attribute names
|
||||
class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
|
||||
|
||||
# Naming hint for class attribute names
|
||||
class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
|
||||
|
||||
# Regular expression matching correct module names
|
||||
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
|
||||
|
||||
# Naming hint for module names
|
||||
module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
|
||||
|
||||
# Regular expression matching correct attribute names
|
||||
attr-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Naming hint for attribute names
|
||||
attr-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression matching correct function names
|
||||
function-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Naming hint for function names
|
||||
function-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match function or class names that do
|
||||
# not require a docstring.
|
||||
no-docstring-rgx=^_
|
||||
@@ -225,12 +180,6 @@ ignore-long-lines=^\s*(# )?<?https?://\S+>?$
|
||||
# else.
|
||||
single-line-if-stmt=no
|
||||
|
||||
# List of optional constructs for which whitespace checking is disabled. `dict-
|
||||
# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
|
||||
# `trailing-comma` allows a space between comma and closing bracket: (a, ).
|
||||
# `empty-line` allows space-only lines.
|
||||
no-space-check=trailing-comma,dict-separator
|
||||
|
||||
# Maximum number of lines in a module
|
||||
max-module-lines=1000
|
||||
|
||||
@@ -300,7 +249,7 @@ ignore-mixin-members=yes
|
||||
# (useful for modules/projects where namespaces are manipulated during runtime
|
||||
# and thus existing member attributes cannot be deduced by static analysis. It
|
||||
# supports qualified module names, as well as Unix pattern matching.
|
||||
ignored-modules=numpy,pandas,alembic.op,sqlalchemy,alembic.context,flask_appbuilder.security.sqla.PermissionView.role,flask_appbuilder.Model.metadata,flask_appbuilder.Base.metadata,distutils
|
||||
ignored-modules=numpy,pandas,alembic.op,sqlalchemy,alembic.context,flask_appbuilder.security.sqla.PermissionView.role,flask_appbuilder.Model.metadata,flask_appbuilder.Base.metadata
|
||||
|
||||
# List of class names for which member attributes should not be checked (useful
|
||||
# for classes with dynamically set attributes). This supports the use of
|
||||
@@ -427,4 +376,4 @@ analyse-fallback-blocks=no
|
||||
|
||||
# Exceptions that will emit a warning when being caught. Defaults to
|
||||
# "Exception"
|
||||
overgeneral-exceptions=Exception
|
||||
overgeneral-exceptions=builtins.Exception
|
||||
|
||||
@@ -119,11 +119,13 @@ If you decide to join the [Community Slack](http://bit.ly/join-superset-slack),
|
||||
|
||||
**3. Ask thoughtful questions.**
|
||||
|
||||
- We’re all here to help each other out. The best way to get help is by investing effort into your questions. First check and see if your question is answered in [the Superset documentation](https://superset.apache.org/faq.html) or on [Stack Overflow](https://stackoverflow.com/search?q=apache+superset). You can also check [GitHub issues](https://github.com/apache/superset/issues) to see if your question or feature request has been submitted before. Then, use Slack search to see if your question has already been asked and answered in the past. If you still feel the need to ask a question, make sure you include:
|
||||
- We’re all here to help each other out. The best way to get help is by investing effort into your questions. First check and see if your question is answered in the [Superset documentation](https://superset.apache.org/faq.html) or on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset). You can also check GitHub trackers to see if your inquiry has been submitted before: [GitHub discussions](https://github.com/apache/superset/discussions) for questions and feature requests and [GitHub issues](https://github.com/apache/superset/issues) for bug reports. Then, use Slack search to see if your question has already been asked and answered in the past.
|
||||
|
||||
- The steps you’ve already taken
|
||||
- Relevant details presented cleanly (text stacktraces, formatted markdown, or screenshots. Please don’t paste large blocks of code unformatted or post photos of your screen from your phone)
|
||||
- The specific question you have or the specific type of help you're seeking
|
||||
If you still feel the need to ask a question, make sure you include:
|
||||
|
||||
- The steps you’ve already taken.
|
||||
- Relevant details presented cleanly: text stacktraces, formatted markdown, or screenshots. Please don’t paste large blocks of code unformatted or post photos of your screen from your phone.
|
||||
- The specific question you have or the specific type of help you're seeking.
|
||||
|
||||
**4. Avoid double posting**
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ little bit helps, and credit will always be given.
|
||||
- [Build assets](#build-assets)
|
||||
- [Webpack dev server](#webpack-dev-server)
|
||||
- [Other npm commands](#other-npm-commands)
|
||||
- [Docker (docker-compose)](#docker-docker-compose)
|
||||
- [Docker (docker compose)](#docker-docker-compose)
|
||||
- [Updating NPM packages](#updating-npm-packages)
|
||||
- [Feature flags](#feature-flags)
|
||||
- [Git Hooks](#git-hooks)
|
||||
@@ -138,7 +138,7 @@ The best way to report a bug is to file an issue on GitHub. Please include:
|
||||
When posting Python stack traces, please quote them using
|
||||
[Markdown blocks](https://help.github.com/articles/creating-and-highlighting-code-blocks/).
|
||||
|
||||
_Please note that feature requests opened as Github Issues will be moved to Discussions._
|
||||
_Please note that feature requests opened as GitHub Issues will be moved to Discussions._
|
||||
|
||||
### Submit Ideas or Feature Requests
|
||||
|
||||
@@ -170,7 +170,7 @@ articles. See [Documentation](#documentation) for more details.
|
||||
### Add Translations
|
||||
|
||||
If you are proficient in a non-English language, you can help translate
|
||||
text strings from Superset's UI. You can jump in to the existing
|
||||
text strings from Superset's UI. You can jump into the existing
|
||||
language dictionaries at
|
||||
`superset/translations/<language_code>/LC_MESSAGES/messages.po`, or
|
||||
even create a dictionary for a new language altogether.
|
||||
@@ -180,6 +180,51 @@ See [Translating](#translating) for more details.
|
||||
|
||||
There is a dedicated [`apache-superset` tag](https://stackoverflow.com/questions/tagged/apache-superset) on [StackOverflow](https://stackoverflow.com/). Please use it when asking questions.
|
||||
|
||||
## Types of Contributors
|
||||
|
||||
Following the project governance model of the Apache Software Foundation (ASF), Apache Superset has a specific set of contributor roles:
|
||||
|
||||
### PMC Member
|
||||
|
||||
A Project Management Committee (PMC) member is a person who has been elected by the PMC to help manage the project. PMC members are responsible for the overall health of the project, including community development, release management, and project governance. PMC members are also responsible for the technical direction of the project.
|
||||
|
||||
For more information about Apache Project PMCs, please refer to https://www.apache.org/foundation/governance/pmcs.html
|
||||
|
||||
### Committer
|
||||
|
||||
A committer is a person who has been elected by the PMC to have write access (commit access) to the code repository. They can modify the code, documentation, and website and accept contributions from others.
|
||||
|
||||
The official list of committers and PMC members can be found [here](https://projects.apache.org/committee.html?superset).
|
||||
|
||||
### Contributor
|
||||
|
||||
A contributor is a person who has contributed to the project in any way, including but not limited to code, tests, documentation, issues, and discussions.
|
||||
|
||||
> You can also review the Superset project's guidelines for PMC member promotion here: https://github.com/apache/superset/wiki/Guidelines-for-promoting-Superset-Committers-to-the-Superset-PMC
|
||||
|
||||
### Security Team
|
||||
|
||||
The security team is a selected subset of PMC members, committers and non-committers who are responsible for handling security issues.
|
||||
|
||||
New members of the security team are selected by the PMC members in a vote. You can request to be added to the team by sending a message to private@superset.apache.org. However, the team should be small and focused on solving security issues, so the requests will be evaluated on a case-by-case basis and the team size will be kept relatively small, limited to only actively security-focused contributors.
|
||||
|
||||
This security team must follow the [ASF vulnerability handling process](https://apache.org/security/committers.html#asf-project-security-for-committers).
|
||||
|
||||
Each new security issue is tracked as a JIRA ticket on the [ASF's JIRA Superset security project](https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=588&projectKey=SUPERSETSEC)
|
||||
|
||||
Security team members must:
|
||||
|
||||
- Have an [ICLA](https://www.apache.org/licenses/contributor-agreements.html) signed with Apache Software Foundation.
|
||||
- Not reveal information about pending and unfixed security issues to anyone (including their employers) unless specifically authorised by the security team members, e.g., if the security team agrees that diagnosing and solving an issue requires the involvement of external experts.
|
||||
|
||||
A release manager, the contributor overseeing the release of a specific version of Apache Superset, is by default a member of the security team. However, they are not expected to be active in assessing, discussing, and fixing security issues.
|
||||
|
||||
Security team members should also follow these general expectations:
|
||||
|
||||
- Actively participate in assessing, discussing, fixing, and releasing security issues in Superset.
|
||||
- Avoid discussing security fixes in public forums. Pull request (PR) descriptions should not contain any information about security issues. The corresponding JIRA ticket should contain a link to the PR.
|
||||
- Security team members who contribute to a fix may be listed as remediation developers in the CVE report, along with their job affiliation (if they choose to include it).
|
||||
|
||||
## Pull Request Guidelines
|
||||
|
||||
A philosophy we would like to strongly encourage is
|
||||
@@ -329,16 +374,16 @@ Triaging goals
|
||||
|
||||
First, add **Category labels (a.k.a. hash labels)**. Every issue/PR must have one hash label (except spam entry). Labels that begin with `#` defines issue/PR type:
|
||||
|
||||
| Label | for Issue | for PR |
|
||||
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `#bug` | Bug report | Bug fix |
|
||||
| `#code-quality` | Describe problem with code, architecture or productivity | Refactor, tests, tooling |
|
||||
| `#feature` | New feature request | New feature implementation |
|
||||
| `#refine` | Propose improvement that does not provide new features and is also not a bug fix nor refactor, such as adjust padding, refine UI style. | Implementation of improvement that does not provide new features and is also not a bug fix nor refactor, such as adjust padding, refine UI style. |
|
||||
| `#doc` | Documentation | Documentation |
|
||||
| `#question` | Troubleshooting: Installation, Running locally, Ask how to do something. Can be changed to `#bug` later. | N/A |
|
||||
| `#SIP` | Superset Improvement Proposal | N/A |
|
||||
| `#ASF` | Tasks related to Apache Software Foundation policy | Tasks related to Apache Software Foundation policy |
|
||||
| Label | for Issue | for PR |
|
||||
| --------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `#bug` | Bug report | Bug fix |
|
||||
| `#code-quality` | Describe problem with code, architecture or productivity | Refactor, tests, tooling |
|
||||
| `#feature` | New feature request | New feature implementation |
|
||||
| `#refine` | Propose improvement such as adjusting padding or refining UI style, excluding new features, bug fixes, and refactoring. | Implementation of improvement such as adjusting padding or refining UI style, excluding new features, bug fixes, and refactoring. |
|
||||
| `#doc` | Documentation | Documentation |
|
||||
| `#question` | Troubleshooting: Installation, Running locally, Ask how to do something. Can be changed to `#bug` later. | N/A |
|
||||
| `#SIP` | Superset Improvement Proposal | N/A |
|
||||
| `#ASF` | Tasks related to Apache Software Foundation policy | Tasks related to Apache Software Foundation policy |
|
||||
|
||||
Then add other types of labels as appropriate.
|
||||
|
||||
@@ -424,7 +469,7 @@ Commits to `master` trigger a rebuild and redeploy of the documentation site. Su
|
||||
Make sure your machine meets the [OS dependencies](https://superset.apache.org/docs/installation/installing-superset-from-scratch#os-dependencies) before following these steps.
|
||||
You also need to install MySQL or [MariaDB](https://mariadb.com/downloads).
|
||||
|
||||
Ensure that you are using Python version 3.8, 3.9, 3.10 or 3.11, then proceed with:
|
||||
Ensure that you are using Python version 3.9, 3.10 or 3.11, then proceed with:
|
||||
|
||||
```bash
|
||||
# Create a virtual environment and activate it (recommended)
|
||||
@@ -453,7 +498,7 @@ superset load-examples
|
||||
# Start the Flask dev web server from inside your virtualenv.
|
||||
# Note that your page may not have CSS at this point.
|
||||
# See instructions below how to build the front-end assets.
|
||||
FLASK_ENV=development superset run -p 8088 --with-threads --reload --debugger
|
||||
superset run -p 8088 --with-threads --reload --debugger --debug
|
||||
```
|
||||
|
||||
Or you can install via our Makefile
|
||||
@@ -477,7 +522,7 @@ $ make pre-commit
|
||||
via `.flaskenv`, however if needed, it should be set to `superset.app:create_app()`**
|
||||
|
||||
If you have made changes to the FAB-managed templates, which are not built the same way as the newer, React-powered front-end assets, you need to start the app without the `--with-threads` argument like so:
|
||||
`FLASK_ENV=development superset run -p 8088 --reload --debugger`
|
||||
`superset run -p 8088 --reload --debugger --debug`
|
||||
|
||||
#### Dependencies
|
||||
|
||||
@@ -518,7 +563,7 @@ def FLASK_APP_MUTATOR(app):
|
||||
Then make sure you run your WSGI server using the right worker type:
|
||||
|
||||
```bash
|
||||
FLASK_ENV=development gunicorn "superset.app:create_app()" -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" -b 127.0.0.1:8088 --reload
|
||||
gunicorn "superset.app:create_app()" -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" -b 127.0.0.1:8088 --reload
|
||||
```
|
||||
|
||||
You can log anything to the browser console, including objects:
|
||||
@@ -547,6 +592,11 @@ We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage your node envi
|
||||
```bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash
|
||||
|
||||
incase it shows '-bash: nvm: command not found'
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
||||
|
||||
cd superset-frontend
|
||||
nvm install --lts
|
||||
nvm use --lts
|
||||
@@ -572,6 +622,19 @@ cd superset-frontend
|
||||
npm ci
|
||||
```
|
||||
|
||||
Note that Superset uses [Scarf](https://docs.scarf.sh) to capture telemetry/analytics about versions being installed, including the `scarf-js` npm package and an analytics pixel. As noted elsewhere in this documentation, Scarf gathers aggregated stats for the sake of security/release strategy, and does not capture/retain PII. [You can read here](https://docs.scarf.sh/package-analytics/) about the `scarf-js` package, and various means to opt out of it, but you can opt out of the npm package _and_ the pixel by setting the `SCARF_ANALYTICS` envinronment variable to `false` or opt out of the pixel by adding this setting in `superset-frontent/package.json`:
|
||||
|
||||
```json
|
||||
// your-package/package.json
|
||||
{
|
||||
// ...
|
||||
"scarfSettings": {
|
||||
"enabled": false
|
||||
}
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
#### Build assets
|
||||
|
||||
There are three types of assets you can build:
|
||||
@@ -580,6 +643,31 @@ There are three types of assets you can build:
|
||||
2. `npm run dev-server`: local development assets, with sourcemaps and hot refresh support
|
||||
3. `npm run build-instrumented`: instrumented application code for collecting code coverage from Cypress tests
|
||||
|
||||
If while using the above commands you encounter an error related to the limit of file watchers:
|
||||
|
||||
```bash
|
||||
Error: ENOSPC: System limit for number of file watchers reached
|
||||
```
|
||||
The error is thrown because the number of files monitored by the system has reached the limit.
|
||||
You can address this this error by increasing the number of inotify watchers.
|
||||
|
||||
The current value of max watches can be checked with:
|
||||
```bash
|
||||
cat /proc/sys/fs/inotify/max_user_watches
|
||||
```
|
||||
Edit the file /etc/sysctl.conf to increase this value.
|
||||
The value needs to be decided based on the system memory [(see this StackOverflow answer for more context)](https://stackoverflow.com/questions/535768/what-is-a-reasonable-amount-of-inotify-watches-with-linux).
|
||||
|
||||
Open the file in editor and add a line at the bottom specifying the max watches values.
|
||||
```bash
|
||||
fs.inotify.max_user_watches=524288
|
||||
```
|
||||
Save the file and exit editor.
|
||||
To confirm that the change succeeded, run the following command to load the updated value of max_user_watches from sysctl.conf:
|
||||
```bash
|
||||
sudo sysctl -p
|
||||
```
|
||||
|
||||
#### Webpack dev server
|
||||
|
||||
The dev server by default starts at `http://localhost:9000` and proxies the backend requests to `http://localhost:8088`.
|
||||
@@ -589,7 +677,7 @@ So a typical development workflow is the following:
|
||||
1. [run Superset locally](#flask-server) using Flask, on port `8088` — but don't access it directly,<br/>
|
||||
```bash
|
||||
# Install Superset and dependencies, plus load your virtual environment first, as detailed above.
|
||||
FLASK_ENV=development superset run -p 8088 --with-threads --reload --debugger
|
||||
superset run -p 8088 --with-threads --reload --debugger --debug
|
||||
```
|
||||
2. in parallel, run the Webpack dev server locally on port `9000`,<br/>
|
||||
```bash
|
||||
@@ -622,7 +710,7 @@ Alternatively, there are other NPM commands you may find useful:
|
||||
1. `npm run build-dev`: build assets in development mode.
|
||||
2. `npm run dev`: built dev assets in watch mode, will automatically rebuild when a file changes
|
||||
|
||||
#### Docker (docker-compose)
|
||||
#### Docker (docker compose)
|
||||
|
||||
See docs [here](docker/README.md)
|
||||
|
||||
@@ -642,7 +730,7 @@ FEATURE_FLAGS = {
|
||||
}
|
||||
```
|
||||
|
||||
If you want to use the same flag in the client code, also add it to the FeatureFlag TypeScript enum in [@superset-ui/core](https://github.com/apache-superset/superset-ui/blob/master/packages/superset-ui-core/src/utils/featureFlags.ts). For example,
|
||||
If you want to use the same flag in the client code, also add it to the FeatureFlag TypeScript enum in [@superset-ui/core](https://github.com/apache/superset/blob/master/superset-frontend/packages/superset-ui-core/src/utils/featureFlags.ts). For example,
|
||||
|
||||
```typescript
|
||||
export enum FeatureFlag {
|
||||
@@ -690,7 +778,7 @@ We use [Pylint](https://pylint.org/) for linting which can be invoked via:
|
||||
tox -e pylint
|
||||
```
|
||||
|
||||
In terms of best practices please avoid blanket disablement of Pylint messages globally (via `.pylintrc`) or top-level within the file header, albeit there being a few exceptions. Disablement should occur inline as it prevents masking issues and provides context as to why said message is disabled.
|
||||
In terms of best practices please avoid blanket disabling of Pylint messages globally (via `.pylintrc`) or top-level within the file header, albeit there being a few exceptions. Disabling should occur inline as it prevents masking issues and provides context as to why said message is disabled.
|
||||
|
||||
Additionally, the Python code is auto-formatted using [Black](https://github.com/python/black) which
|
||||
is configured as a pre-commit hook. There are also numerous [editor integrations](https://black.readthedocs.io/en/stable/integrations/editors.html)
|
||||
@@ -854,10 +942,10 @@ npm install
|
||||
npm run cypress-run-chrome
|
||||
|
||||
# run tests from a specific file
|
||||
npm run cypress-run-chrome -- --spec cypress/integration/explore/link.test.ts
|
||||
npm run cypress-run-chrome -- --spec cypress/e2e/explore/link.test.ts
|
||||
|
||||
# run specific file with video capture
|
||||
npm run cypress-run-chrome -- --spec cypress/integration/dashboard/index.test.js --config video=true
|
||||
npm run cypress-run-chrome -- --spec cypress/e2e/dashboard/index.test.js --config video=true
|
||||
|
||||
# to open the cypress ui
|
||||
npm run cypress-debug
|
||||
@@ -869,17 +957,17 @@ CYPRESS_BASE_URL=<your url> npm run cypress open
|
||||
|
||||
See [`superset-frontend/cypress_build.sh`](https://github.com/apache/superset/blob/master/superset-frontend/cypress_build.sh).
|
||||
|
||||
As an alternative you can use docker-compose environment for testing:
|
||||
As an alternative you can use docker compose environment for testing:
|
||||
|
||||
Make sure you have added below line to your /etc/hosts file:
|
||||
`127.0.0.1 db`
|
||||
|
||||
If you already have launched Docker environment please use the following command to assure a fresh database instance:
|
||||
`docker-compose down -v`
|
||||
`docker compose down -v`
|
||||
|
||||
Launch environment:
|
||||
|
||||
`CYPRESS_CONFIG=true docker-compose up`
|
||||
`CYPRESS_CONFIG=true docker compose up`
|
||||
|
||||
It will serve backend and frontend on port 8088.
|
||||
|
||||
@@ -893,6 +981,33 @@ npm run cypress open
|
||||
|
||||
### Debugging Server App
|
||||
|
||||
#### Local
|
||||
|
||||
For debugging locally using VSCode, you can configure a launch configuration file .vscode/launch.json such as
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Python: Flask",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "flask",
|
||||
"env": {
|
||||
"FLASK_APP": "superset",
|
||||
"SUPERSET_ENV": "development"
|
||||
},
|
||||
"args": ["run", "-p 8088", "--with-threads", "--reload", "--debugger"],
|
||||
"jinja": true,
|
||||
"justMyCode": true
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Docker
|
||||
|
||||
Follow these instructions to debug the Flask app running inside a docker container.
|
||||
|
||||
First add the following to the ./docker-compose.yaml file
|
||||
@@ -919,7 +1034,7 @@ superset:
|
||||
Start Superset as usual
|
||||
|
||||
```bash
|
||||
docker-compose up
|
||||
docker compose up
|
||||
```
|
||||
|
||||
Install the required libraries and packages to the docker container
|
||||
@@ -970,26 +1085,26 @@ tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN
|
||||
|
||||
You are now ready to attach a debugger to the process. Using VSCode you can configure a launch configuration file .vscode/launch.json like so.
|
||||
|
||||
```
|
||||
```json
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Attach to Superset App in Docker Container",
|
||||
"type": "python",
|
||||
"request": "attach",
|
||||
"connect": {
|
||||
"host": "127.0.0.1",
|
||||
"port": 5678
|
||||
},
|
||||
"pathMappings": [
|
||||
{
|
||||
"name": "Attach to Superset App in Docker Container",
|
||||
"type": "python",
|
||||
"request": "attach",
|
||||
"connect": {
|
||||
"host": "127.0.0.1",
|
||||
"port": 5678
|
||||
},
|
||||
"pathMappings": [
|
||||
{
|
||||
"localRoot": "${workspaceFolder}",
|
||||
"remoteRoot": "/app"
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
"localRoot": "${workspaceFolder}",
|
||||
"remoteRoot": "/app"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1154,7 +1269,7 @@ To contribute a plugin to Superset, your plugin must meet the following criteria
|
||||
- The plugin should contain sufficient unit/e2e tests
|
||||
- The plugin should use appropriate namespacing, e.g. a folder name of `plugin-chart-whatever` and a package name of `@superset-ui/plugin-chart-whatever`
|
||||
- The plugin should use them variables via Emotion, as passed in by the ThemeProvider
|
||||
- The plugin should provide adequate error handling (no data returned, malformatted data, invalid controls, etc.)
|
||||
- The plugin should provide adequate error handling (no data returned, malformed data, invalid controls, etc.)
|
||||
- The plugin should contain documentation in the form of a populated `README.md` file
|
||||
- The plugin should have a meaningful and unique icon
|
||||
- Above all else, the plugin should come with a _commitment to maintenance_ from the original author(s)
|
||||
@@ -1290,7 +1405,7 @@ To do this, you'll need to:
|
||||
but perfect for testing (stores cache in `/tmp`)
|
||||
|
||||
```python
|
||||
from cachelib.file import FileSystemCache
|
||||
from flask_caching.backends.filesystemcache import FileSystemCache
|
||||
RESULTS_BACKEND = FileSystemCache('/tmp/sqllab')
|
||||
```
|
||||
|
||||
@@ -1356,13 +1471,11 @@ Note not all fields are correctly categorized. The fields vary based on visualiz
|
||||
|
||||
### Time
|
||||
|
||||
| Field | Type | Notes |
|
||||
| ------------------- | -------- | ------------------------------------- |
|
||||
| `druid_time_origin` | _string_ | The Druid **Origin** widget |
|
||||
| `granularity` | _string_ | The Druid **Time Granularity** widget |
|
||||
| `granularity_sqla` | _string_ | The SQLA **Time Column** widget |
|
||||
| `time_grain_sqla` | _string_ | The SQLA **Time Grain** widget |
|
||||
| `time_range` | _string_ | The **Time range** widget |
|
||||
| Field | Type | Notes |
|
||||
| ------------------ | -------- | ------------------------------- |
|
||||
| `granularity_sqla` | _string_ | The SQLA **Time Column** widget |
|
||||
| `time_grain_sqla` | _string_ | The SQLA **Time Grain** widget |
|
||||
| `time_range` | _string_ | The **Time range** widget |
|
||||
|
||||
### GROUP BY
|
||||
|
||||
|
||||
@@ -18,26 +18,32 @@
|
||||
######################################################################
|
||||
# Node stage to deal with static asset construction
|
||||
######################################################################
|
||||
ARG PY_VER=3.8.16-slim
|
||||
FROM node:16-slim AS superset-node
|
||||
ARG PY_VER=3.9-slim-bookworm
|
||||
|
||||
# if BUILDPLATFORM is null, set it to 'amd64' (or leave as is otherwise).
|
||||
ARG BUILDPLATFORM=${BUILDPLATFORM:-amd64}
|
||||
FROM --platform=${BUILDPLATFORM} node:16-bookworm-slim AS superset-node
|
||||
|
||||
ARG NPM_BUILD_CMD="build"
|
||||
ENV BUILD_CMD=${NPM_BUILD_CMD}
|
||||
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||
|
||||
RUN apt-get update -qq \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
build-essential \
|
||||
python3
|
||||
|
||||
ENV BUILD_CMD=${NPM_BUILD_CMD} \
|
||||
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||
# NPM ci first, as to NOT invalidate previous steps except for when package.json changes
|
||||
RUN mkdir -p /app/superset-frontend
|
||||
WORKDIR /app/superset-frontend
|
||||
|
||||
COPY ./docker/frontend-mem-nag.sh /
|
||||
RUN /frontend-mem-nag.sh
|
||||
RUN --mount=type=bind,target=/frontend-mem-nag.sh,src=./docker/frontend-mem-nag.sh \
|
||||
/frontend-mem-nag.sh
|
||||
|
||||
WORKDIR /app/superset-frontend/
|
||||
|
||||
COPY superset-frontend/package*.json ./
|
||||
RUN npm ci
|
||||
|
||||
COPY ./superset-frontend .
|
||||
RUN --mount=type=bind,target=./package.json,src=./superset-frontend/package.json \
|
||||
--mount=type=bind,target=./package-lock.json,src=./superset-frontend/package-lock.json \
|
||||
npm ci
|
||||
|
||||
COPY ./superset-frontend ./
|
||||
# This seems to be the most expensive step
|
||||
RUN npm run ${BUILD_CMD}
|
||||
|
||||
@@ -46,110 +52,92 @@ RUN npm run ${BUILD_CMD}
|
||||
######################################################################
|
||||
FROM python:${PY_VER} AS lean
|
||||
|
||||
WORKDIR /app
|
||||
ENV LANG=C.UTF-8 \
|
||||
LC_ALL=C.UTF-8 \
|
||||
FLASK_ENV=production \
|
||||
SUPERSET_ENV=production \
|
||||
FLASK_APP="superset.app:create_app()" \
|
||||
PYTHONPATH="/app/pythonpath" \
|
||||
SUPERSET_HOME="/app/superset_home" \
|
||||
SUPERSET_PORT=8088
|
||||
|
||||
RUN mkdir -p ${PYTHONPATH} \
|
||||
&& useradd --user-group -d ${SUPERSET_HOME} -m --no-log-init --shell /bin/bash superset \
|
||||
&& apt-get update -y \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
curl \
|
||||
default-libmysqlclient-dev \
|
||||
libsasl2-dev \
|
||||
libsasl2-modules-gssapi-mit \
|
||||
libpq-dev \
|
||||
libecpg-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY ./requirements/*.txt /app/requirements/
|
||||
COPY setup.py MANIFEST.in README.md /app/
|
||||
|
||||
# setup.py uses the version information in package.json
|
||||
COPY superset-frontend/package.json /app/superset-frontend/
|
||||
|
||||
RUN cd /app \
|
||||
&& mkdir -p superset/static \
|
||||
RUN mkdir -p ${PYTHONPATH} superset/static superset-frontend apache_superset.egg-info requirements \
|
||||
&& useradd --user-group -d ${SUPERSET_HOME} -m --no-log-init --shell /bin/bash superset \
|
||||
&& apt-get update -qq && apt-get install -yqq --no-install-recommends \
|
||||
build-essential \
|
||||
curl \
|
||||
default-libmysqlclient-dev \
|
||||
libsasl2-dev \
|
||||
libsasl2-modules-gssapi-mit \
|
||||
libpq-dev \
|
||||
libecpg-dev \
|
||||
libldap2-dev \
|
||||
&& touch superset/static/version_info.json \
|
||||
&& pip install --no-cache -r requirements/local.txt
|
||||
&& chown -R superset:superset ./* \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=superset-node /app/superset/static/assets /app/superset/static/assets
|
||||
COPY --chown=superset:superset setup.py MANIFEST.in README.md ./
|
||||
# setup.py uses the version information in package.json
|
||||
COPY --chown=superset:superset superset-frontend/package.json superset-frontend/
|
||||
RUN --mount=type=bind,target=./requirements/local.txt,src=./requirements/local.txt \
|
||||
--mount=type=bind,target=./requirements/development.txt,src=./requirements/development.txt \
|
||||
--mount=type=bind,target=./requirements/base.txt,src=./requirements/base.txt \
|
||||
--mount=type=cache,target=/root/.cache/pip \
|
||||
pip install -r requirements/local.txt
|
||||
|
||||
COPY --chown=superset:superset --from=superset-node /app/superset/static/assets superset/static/assets
|
||||
## Lastly, let's install superset itself
|
||||
COPY superset /app/superset
|
||||
COPY setup.py MANIFEST.in README.md /app/
|
||||
RUN cd /app \
|
||||
&& chown -R superset:superset * \
|
||||
&& pip install -e . \
|
||||
&& flask fab babel-compile --target superset/translations
|
||||
|
||||
COPY ./docker/run-server.sh /usr/bin/
|
||||
|
||||
RUN chmod a+x /usr/bin/run-server.sh
|
||||
|
||||
WORKDIR /app
|
||||
COPY --chown=superset:superset superset superset
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
pip install -e . \
|
||||
&& flask fab babel-compile --target superset/translations \
|
||||
&& chown -R superset:superset superset/translations
|
||||
|
||||
COPY --chmod=755 ./docker/run-server.sh /usr/bin/
|
||||
USER superset
|
||||
|
||||
HEALTHCHECK CMD curl -f "http://localhost:$SUPERSET_PORT/health"
|
||||
HEALTHCHECK CMD curl -f "http://localhost:${SUPERSET_PORT}/health"
|
||||
|
||||
EXPOSE ${SUPERSET_PORT}
|
||||
|
||||
CMD /usr/bin/run-server.sh
|
||||
CMD ["/usr/bin/run-server.sh"]
|
||||
|
||||
######################################################################
|
||||
# Dev image...
|
||||
######################################################################
|
||||
FROM lean AS dev
|
||||
ARG GECKODRIVER_VERSION=v0.32.0
|
||||
ARG FIREFOX_VERSION=106.0.3
|
||||
|
||||
COPY ./requirements/*.txt ./docker/requirements-*.txt/ /app/requirements/
|
||||
ARG GECKODRIVER_VERSION=v0.33.0 \
|
||||
FIREFOX_VERSION=117.0.1
|
||||
|
||||
USER root
|
||||
|
||||
RUN apt-get update -y \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
libnss3 \
|
||||
libdbus-glib-1-2 \
|
||||
libgtk-3-0 \
|
||||
libx11-xcb1 \
|
||||
libasound2 \
|
||||
libxtst6 \
|
||||
wget
|
||||
|
||||
# Install GeckoDriver WebDriver
|
||||
RUN wget https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O /tmp/geckodriver.tar.gz && \
|
||||
tar xvfz /tmp/geckodriver.tar.gz -C /tmp && \
|
||||
mv /tmp/geckodriver /usr/local/bin/geckodriver && \
|
||||
rm /tmp/geckodriver.tar.gz
|
||||
|
||||
# Install Firefox
|
||||
RUN wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 -O /opt/firefox.tar.bz2 && \
|
||||
tar xvf /opt/firefox.tar.bz2 -C /opt && \
|
||||
ln -s /opt/firefox/firefox /usr/local/bin/firefox
|
||||
|
||||
RUN apt-get update -qq \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
libnss3 \
|
||||
libdbus-glib-1-2 \
|
||||
libgtk-3-0 \
|
||||
libx11-xcb1 \
|
||||
libasound2 \
|
||||
libxtst6 \
|
||||
wget \
|
||||
# Install GeckoDriver WebDriver
|
||||
&& wget -q https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O - | tar xfz - -C /usr/local/bin \
|
||||
# Install Firefox
|
||||
&& wget -q https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 -O - | tar xfj - -C /opt \
|
||||
&& ln -s /opt/firefox/firefox /usr/local/bin/firefox \
|
||||
&& apt-get autoremove -yqq --purge wget && rm -rf /var/[log,tmp]/* /tmp/* /var/lib/apt/lists/*
|
||||
# Cache everything for dev purposes...
|
||||
RUN cd /app \
|
||||
&& pip install --no-cache -r requirements/docker.txt \
|
||||
&& pip install --no-cache -r requirements/requirements-local.txt || true
|
||||
RUN --mount=type=bind,target=./requirements/base.txt,src=./requirements/base.txt \
|
||||
--mount=type=bind,target=./requirements/docker.txt,src=./requirements/docker.txt \
|
||||
--mount=type=cache,target=/root/.cache/pip \
|
||||
pip install -r requirements/docker.txt
|
||||
|
||||
USER superset
|
||||
|
||||
|
||||
######################################################################
|
||||
# CI image...
|
||||
######################################################################
|
||||
FROM lean AS ci
|
||||
|
||||
COPY --chown=superset ./docker/docker-bootstrap.sh /app/docker/
|
||||
COPY --chown=superset ./docker/docker-init.sh /app/docker/
|
||||
COPY --chown=superset ./docker/docker-ci.sh /app/docker/
|
||||
COPY --chown=superset:superset --chmod=755 ./docker/*.sh /app/docker/
|
||||
|
||||
RUN chmod a+x /app/docker/*.sh
|
||||
|
||||
CMD /app/docker/docker-ci.sh
|
||||
CMD ["/app/docker/docker-ci.sh"]
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
# Python version installed; we need 3.8-3.11
|
||||
PYTHON=`command -v python3.11 || command -v python3.10 || command -v python3.9 || command -v python3.8`
|
||||
# Python version installed; we need 3.9-3.11
|
||||
PYTHON=`command -v python3.11 || command -v python3.10 || command -v python3.9`
|
||||
|
||||
.PHONY: install superset venv pre-commit
|
||||
|
||||
@@ -70,7 +70,7 @@ update-js:
|
||||
|
||||
venv:
|
||||
# Create a virtual environment and activate it (recommended)
|
||||
if ! [ -x "${PYTHON}" ]; then echo "You need Python 3.8, 3.9, 3.10 or 3.11 installed"; exit 1; fi
|
||||
if ! [ -x "${PYTHON}" ]; then echo "You need Python 3.9, 3.10 or 3.11 installed"; exit 1; fi
|
||||
test -d venv || ${PYTHON} -m venv venv # setup a python3 virtualenv
|
||||
. venv/bin/activate
|
||||
|
||||
|
||||
@@ -28,11 +28,17 @@ under the License.
|
||||
[](http://bit.ly/join-superset-slack)
|
||||
[](https://superset.apache.org)
|
||||
|
||||
<img
|
||||
src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache.png"
|
||||
alt="Superset"
|
||||
width="500"
|
||||
/>
|
||||
<picture width="500">
|
||||
<source
|
||||
media="(prefers-color-scheme: dark)"
|
||||
src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache-dark.png"
|
||||
alt="Superset logo (dark)"
|
||||
/>
|
||||
<img
|
||||
src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache.png"
|
||||
alt="Superset logo (light)"
|
||||
/>
|
||||
</picture>
|
||||
|
||||
A modern, enterprise-ready business intelligence web application.
|
||||
|
||||
@@ -63,6 +69,12 @@ Superset provides:
|
||||
|
||||
## Screenshots & Gifs
|
||||
|
||||
**Video Overview**
|
||||
|
||||
https://user-images.githubusercontent.com/64562059/234390129-321d4f35-cb4b-45e8-89d9-20ae292f34fc.mp4
|
||||
|
||||
<br/>
|
||||
|
||||
**Large Gallery of Visualizations**
|
||||
|
||||
<kbd><img title="Gallery" src="superset-frontend/src/assets/images/screenshots/gallery.jpg"/></kbd><br/>
|
||||
@@ -116,6 +128,9 @@ Here are some of the major database solutions that are supported:
|
||||
<img src="superset-frontend/src/assets/images/pinot.png" alt="pinot" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/teradata.png" alt="teradata" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/yugabyte.png" alt="yugabyte" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/databend.png" alt="databend" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/starrocks.png" alt="starrocks" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/doris.png" alt="doris" border="0" width="200" height="80"/>
|
||||
</p>
|
||||
|
||||
**A more comprehensive list of supported databases** along with the configuration instructions can be found [here](https://superset.apache.org/docs/databases/installing-database-drivers).
|
||||
@@ -131,7 +146,9 @@ Want to add support for your datastore or data engine? Read more [here](https://
|
||||
- Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
|
||||
- [Join our community's Slack](http://bit.ly/join-superset-slack)
|
||||
and please read our [Slack Community Guidelines](https://github.com/apache/superset/blob/master/CODE_OF_CONDUCT.md#slack-community-guidelines)
|
||||
- [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org)
|
||||
- [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org). To join, simply send an email to [dev-subscribe@superset.apache.org](mailto:dev-subscribe@superset.apache.org)
|
||||
- If you want to help troubleshoot GitHub Issues involving the numerous database drivers that Superset supports, please consider adding your name and the databases you have access to on the [Superset Database Familiarity Rolodex](https://docs.google.com/spreadsheets/d/1U1qxiLvOX0kBTUGME1AHHi6Ywel6ECF8xk_Qy-V9R8c/edit#gid=0)
|
||||
- Join Superset's Town Hall and [Operational Model](https://preset.io/blog/the-superset-operational-model-wants-you/) recurring meetings. Meeting info is available on the [Superset Community Calendar](https://superset.apache.org/community)
|
||||
|
||||
## Contributor Guide
|
||||
|
||||
@@ -142,6 +159,12 @@ how to set up a development environment.
|
||||
|
||||
## Resources
|
||||
|
||||
- [Superset "In the Wild"](RESOURCES/INTHEWILD.md) - open a PR to add your org to the list!
|
||||
- [Feature Flags](RESOURCES/FEATURE_FLAGS.md) - the status of Superset's Feature Flags.
|
||||
- [Standard Roles](RESOURCES/STANDARD_ROLES.md) - How RBAC permissions map to roles.
|
||||
- [Superset Wiki](https://github.com/apache/superset/wiki) - Tons of additional community resources: best practices, community content and other information.
|
||||
- [Superset SIPs](https://github.com/orgs/apache/projects/170) - The status of Superset's SIPs (Superset Improvement Proposals) for both consensus and implementation status.
|
||||
|
||||
Superset 2.0!
|
||||
- [Superset 2.0 Meetup](https://preset.io/events/superset-2-0-meetup/)
|
||||
- [Superset 2.0 Release Notes](https://github.com/apache/superset/tree/master/RELEASING/release-notes-2-0)
|
||||
@@ -165,7 +188,7 @@ Understanding the Superset Points of View
|
||||
- [Helm Chart](https://github.com/apache/superset/tree/master/helm/superset)
|
||||
|
||||
- Recordings of Past [Superset Community Events](https://preset.io/events)
|
||||
- [Mixed Time Series Charts](https://preset.io/events/mixed-time-series-visualization-in-superset-workshop/)
|
||||
- [Mixed Time Series Charts](https://preset.io/events/mixed-time-series-visualization-in-superset-workshop/)
|
||||
- [How the Bing Team Customized Superset for the Internal Self-Serve Data & Analytics Platform](https://preset.io/events/how-the-bing-team-heavily-customized-superset-for-their-internal-data/)
|
||||
- [Live Demo: Visualizing MongoDB and Pinot Data using Trino](https://preset.io/events/2021-04-13-visualizing-mongodb-and-pinot-data-using-trino/)
|
||||
- [Introduction to the Superset API](https://preset.io/events/introduction-to-the-superset-api/)
|
||||
@@ -177,3 +200,6 @@ Understanding the Superset Points of View
|
||||
- [Why Apache Superset is Betting on Apache ECharts](https://preset.io/blog/2021-4-1-why-echarts/)
|
||||
|
||||
- [Superset API](https://superset.apache.org/docs/rest-api)
|
||||
|
||||
<!-- telemetry/analytics pixel: -->
|
||||
<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=bc1c90cd-bc04-4e11-8c7b-289fb2839492" />
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
FROM python:3.8-buster
|
||||
FROM python:3.9-buster
|
||||
|
||||
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
FROM python:3.8-buster
|
||||
FROM python:3.9-buster
|
||||
|
||||
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
FROM python:3.8-buster
|
||||
FROM python:3.9-buster
|
||||
ARG VERSION
|
||||
|
||||
RUN git clone --depth 1 --branch ${VERSION} https://github.com/apache/superset.git /superset
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
FROM python:3.8-buster
|
||||
FROM python:3.9-buster
|
||||
|
||||
RUN apt-get update -y
|
||||
RUN apt-get install -y jq
|
||||
|
||||
@@ -30,6 +30,7 @@ partaking in the process should join the channel.
|
||||
|
||||
## Release notes for recent releases
|
||||
|
||||
- [3.1](release-notes-3-1/README.md)
|
||||
- [2.0](release-notes-2-0/README.md)
|
||||
- [1.5](release-notes-1-5/README.md)
|
||||
- [1.4](release-notes-1-4/README.md)
|
||||
@@ -74,7 +75,7 @@ the repo directly from the main `apache/superset` repo to a new directory `super
|
||||
|
||||
```bash
|
||||
cd <MY PROJECTS PATH>
|
||||
git clone git@github.com:apache/superset.git superset-release
|
||||
git clone https://github.com/apache/superset.git superset-release
|
||||
cd superset-release
|
||||
```
|
||||
|
||||
@@ -102,7 +103,7 @@ the same terminal session won't be used for crafting the release candidate and t
|
||||
final release. Therefore, it's a good idea to do the following every time you
|
||||
work on a new phase of the release process to make sure you aren't releasing
|
||||
the wrong files/using wrong names. There's a script to help you set correctly all the
|
||||
necessary environment variables. Change your current directory to `superset/RELEASING`
|
||||
necessary environment variables. Change your current directory to `RELEASING`
|
||||
and execute the `set_release_env.sh` script with the relevant parameters:
|
||||
|
||||
Usage (MacOS/ZSH):
|
||||
@@ -238,7 +239,7 @@ Similar to `cherrytree`, the change log script requires a github token, either a
|
||||
|
||||
#### Initial release (e.g. 1.5.0)
|
||||
|
||||
When generating the changelog for an initial minor relese, you should compare with
|
||||
When generating the changelog for an initial minor release, you should compare with
|
||||
the previous release (in the example, the previous release branch is `1.4`, so remember to
|
||||
update it accordingly):
|
||||
|
||||
@@ -343,7 +344,7 @@ To build and run the recently created tarball **from SVN**:
|
||||
# login using admin/admin
|
||||
```
|
||||
|
||||
## Create a release on Github
|
||||
## Create a release on GitHub
|
||||
|
||||
After submitting the tag and testing the release candidate, follow the steps [here](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository) to create the release on GitHub. Use the vote email text as the content for the release description. Make sure to check the "This is a pre-release" checkbox for release candidates. You can check previous releases if you need an example.
|
||||
|
||||
@@ -387,8 +388,23 @@ The script will generate the email text that should be sent to dev@superset.apac
|
||||
|
||||
## Validating a release
|
||||
|
||||
Official instructions:
|
||||
https://www.apache.org/info/verification.html
|
||||
|
||||
We now have a handy script for anyone validating a release to use. The core of it is in this very folder, `verify_release.py`. Just make sure you have all three release files in the same directory (`{some version}.tar.gz`, `{some version}.tar.gz.asc` and `{some version}tar.gz.sha512`). Then you can pass this script the path to the `.gz` file like so:
|
||||
`python verify_release.py ~/path/tp/apache-superset-{version/candidate}-source.tar.gz`
|
||||
|
||||
|
||||
If all goes well, you will see this result in your terminal:
|
||||
```bash
|
||||
SHA-512 verified
|
||||
RSA key verified
|
||||
```
|
||||
|
||||
There are also additional support scripts leveraging this to make it easy for those downloading a release to test it in-situ. You can do either of the following to validate these release assets:
|
||||
* `cd` into `superset-frontend` and run `npm run validate-release`
|
||||
* `cd` into `RELEASES` and run `./validate_this_release.sh`
|
||||
|
||||
## Publishing a successful release
|
||||
|
||||
Upon a successful vote, you'll have to copy the folder into the non-"dev/" folder.
|
||||
@@ -416,11 +432,6 @@ git tag -f ${SUPERSET_VERSION}
|
||||
git push origin ${SUPERSET_VERSION}
|
||||
```
|
||||
|
||||
### Update CHANGELOG and UPDATING on superset
|
||||
|
||||
Now that we have a final Apache source release we need to open a pull request on Superset
|
||||
with the changes on `CHANGELOG.md` and `UPDATING.md`.
|
||||
|
||||
### Publishing a Convenience Release to PyPI
|
||||
|
||||
Extract the release to the `/tmp` folder to build the PiPY release. Files in the `/tmp` folder will be automatically deleted by the OS.
|
||||
@@ -486,3 +497,9 @@ click the 3-dot icon and select `Create Release`, paste the content of the ANNOU
|
||||
release notes, and publish the new release.
|
||||
|
||||
At this point, a GitHub action will run that will check whether this release's version number is higher than the current 'latest' release. If that condition is true, this release sha will automatically be tagged as `latest` so that the most recent release can be referenced simply by using the 'latest' tag instead of looking up the version number. The existing version number tag will still exist, and can also be used for reference.
|
||||
|
||||
### Update Superset files
|
||||
|
||||
Now that we have a final Apache release we need to open a pull request on Superset with the changes on [CHANGELOG.m](../CHANGELOG.md) and [UPDATING.md](../UPDATING.md).
|
||||
|
||||
We also need to update the Environment section of [ISSUE_TEMPLATE/bug-report.yml](../.github/ISSUE_TEMPLATE//bug-report.yml) to reflect the new release changes. This includes removing versions that are not supported anymore and adding new ones.
|
||||
|
||||
@@ -17,8 +17,9 @@ import csv as lib_csv
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from collections.abc import Iterator
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Dict, Iterator, List, Optional, Union
|
||||
from typing import Any, Optional, Union
|
||||
|
||||
import click
|
||||
from click.core import Context
|
||||
@@ -67,15 +68,15 @@ class GitChangeLog:
|
||||
def __init__(
|
||||
self,
|
||||
version: str,
|
||||
logs: List[GitLog],
|
||||
logs: list[GitLog],
|
||||
access_token: Optional[str] = None,
|
||||
risk: Optional[bool] = False,
|
||||
) -> None:
|
||||
self._version = version
|
||||
self._logs = logs
|
||||
self._pr_logs_with_details: Dict[int, Dict[str, Any]] = {}
|
||||
self._github_login_cache: Dict[str, Optional[str]] = {}
|
||||
self._github_prs: Dict[int, Any] = {}
|
||||
self._pr_logs_with_details: dict[int, dict[str, Any]] = {}
|
||||
self._github_login_cache: dict[str, Optional[str]] = {}
|
||||
self._github_prs: dict[int, Any] = {}
|
||||
self._wait = 10
|
||||
github_token = access_token or os.environ.get("GITHUB_TOKEN")
|
||||
self._github = Github(github_token)
|
||||
@@ -126,7 +127,7 @@ class GitChangeLog:
|
||||
"superset/migrations/versions/" in file.filename for file in commit.files
|
||||
)
|
||||
|
||||
def _get_pull_request_details(self, git_log: GitLog) -> Dict[str, Any]:
|
||||
def _get_pull_request_details(self, git_log: GitLog) -> dict[str, Any]:
|
||||
pr_number = git_log.pr_number
|
||||
if pr_number:
|
||||
detail = self._pr_logs_with_details.get(pr_number)
|
||||
@@ -138,7 +139,7 @@ class GitChangeLog:
|
||||
title = pr_info.title if pr_info else git_log.message
|
||||
pr_type = re.match(SUPERSET_PULL_REQUEST_TYPES, title)
|
||||
if pr_type:
|
||||
pr_type = pr_type.group().strip('"')
|
||||
pr_type = pr_type.group().strip('"') # type: ignore
|
||||
|
||||
labels = (" | ").join([label.name for label in pr_info.labels])
|
||||
is_risky = self._is_risk_pull_request(pr_info.labels)
|
||||
@@ -156,7 +157,7 @@ class GitChangeLog:
|
||||
|
||||
return detail
|
||||
|
||||
def _is_risk_pull_request(self, labels: List[Any]) -> bool:
|
||||
def _is_risk_pull_request(self, labels: list[Any]) -> bool:
|
||||
for label in labels:
|
||||
risk_label = re.match(SUPERSET_RISKY_LABELS, label.name)
|
||||
if risk_label is not None:
|
||||
@@ -174,8 +175,8 @@ class GitChangeLog:
|
||||
|
||||
def _parse_change_log(
|
||||
self,
|
||||
changelog: Dict[str, str],
|
||||
pr_info: Dict[str, str],
|
||||
changelog: dict[str, str],
|
||||
pr_info: dict[str, str],
|
||||
github_login: str,
|
||||
) -> None:
|
||||
formatted_pr = (
|
||||
@@ -227,7 +228,7 @@ class GitChangeLog:
|
||||
result += f"**{key}** {changelog[key]}\n"
|
||||
return result
|
||||
|
||||
def __iter__(self) -> Iterator[Dict[str, Any]]:
|
||||
def __iter__(self) -> Iterator[dict[str, Any]]:
|
||||
for log in self._logs:
|
||||
yield {
|
||||
"pr_number": log.pr_number,
|
||||
@@ -250,20 +251,20 @@ class GitLogs:
|
||||
|
||||
def __init__(self, git_ref: str) -> None:
|
||||
self._git_ref = git_ref
|
||||
self._logs: List[GitLog] = []
|
||||
self._logs: list[GitLog] = []
|
||||
|
||||
@property
|
||||
def git_ref(self) -> str:
|
||||
return self._git_ref
|
||||
|
||||
@property
|
||||
def logs(self) -> List[GitLog]:
|
||||
def logs(self) -> list[GitLog]:
|
||||
return self._logs
|
||||
|
||||
def fetch(self) -> None:
|
||||
self._logs = list(map(self._parse_log, self._git_logs()))[::-1]
|
||||
|
||||
def diff(self, git_logs: "GitLogs") -> List[GitLog]:
|
||||
def diff(self, git_logs: "GitLogs") -> list[GitLog]:
|
||||
return [log for log in git_logs.logs if log not in self._logs]
|
||||
|
||||
def __repr__(self) -> str:
|
||||
@@ -284,7 +285,7 @@ class GitLogs:
|
||||
print(f"Could not checkout {git_ref}")
|
||||
sys.exit(1)
|
||||
|
||||
def _git_logs(self) -> List[str]:
|
||||
def _git_logs(self) -> list[str]:
|
||||
# let's get current git ref so we can revert it back
|
||||
current_git_ref = self._git_get_current_head()
|
||||
self._git_checkout(self._git_ref)
|
||||
|
||||
@@ -35,6 +35,12 @@ The PyPI package:
|
||||
|
||||
https://pypi.org/project/apache-superset/
|
||||
|
||||
The Change Log for the release:
|
||||
https://github.com/apache/{{ project_module }}/blob/{{ version }}/CHANGELOG.md
|
||||
|
||||
The Updating instructions for the release:
|
||||
https://github.com/apache/{{ project_module }}/blob/{{ version }}/UPDATING.md
|
||||
|
||||
If you have any usage questions or have problems when upgrading or
|
||||
find any issues with enhancements included in this release, please
|
||||
don't hesitate to let us know by sending feedback to this mailing
|
||||
|
||||
@@ -19,8 +19,8 @@ set -ex
|
||||
|
||||
echo "[WARNING] this entrypoint creates an admin/admin user"
|
||||
echo "[WARNING] it should only be used for lightweight testing/validation"
|
||||
if [ "$SUPERSET_TESTENV" = "true" ]
|
||||
then
|
||||
|
||||
if [ -z "${SUPERSET_TESTENV}" ]; then
|
||||
echo "SUPERSET IS RUNNING IN TEST MODE"
|
||||
fi
|
||||
|
||||
@@ -41,5 +41,5 @@ superset init
|
||||
# Loading examples
|
||||
superset load-examples --force
|
||||
|
||||
FLASK_ENV=development FLASK_APP="superset.app:create_app()" \
|
||||
SUPERSET_ENV=development FLASK_APP="superset.app:create_app()" \
|
||||
flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
from typing import Any, Dict, List
|
||||
from typing import Any
|
||||
|
||||
from click.core import Context
|
||||
|
||||
@@ -34,7 +34,7 @@ PROJECT_MODULE = "superset"
|
||||
PROJECT_DESCRIPTION = "Apache Superset is a modern, enterprise-ready business intelligence web application"
|
||||
|
||||
|
||||
def string_comma_to_list(message: str) -> List[str]:
|
||||
def string_comma_to_list(message: str) -> list[str]:
|
||||
if not message:
|
||||
return []
|
||||
return [element.strip() for element in message.split(",")]
|
||||
@@ -52,7 +52,7 @@ def render_template(template_file: str, **kwargs: Any) -> str:
|
||||
return template.render(kwargs)
|
||||
|
||||
|
||||
class BaseParameters(object):
|
||||
class BaseParameters:
|
||||
def __init__(
|
||||
self,
|
||||
version: str,
|
||||
@@ -60,7 +60,7 @@ class BaseParameters(object):
|
||||
) -> None:
|
||||
self.version = version
|
||||
self.version_rc = version_rc
|
||||
self.template_arguments: Dict[str, Any] = {}
|
||||
self.template_arguments: dict[str, Any] = {}
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Apache Credentials: {self.version}/{self.version_rc}"
|
||||
|
||||
@@ -28,13 +28,13 @@ Superset 2.0 is a big step forward. This release cleans up many legacy code path
|
||||
|
||||
## Developer Experience
|
||||
|
||||
- Addition of a statsd guage metric for Slack and email notifications for increased visibility into errors around alerts / reports ([#20158](https://github.com/apache/superset/pull/20158))
|
||||
- Addition of a statsd gauge metric for Slack and email notifications for increased visibility into errors around alerts / reports ([#20158](https://github.com/apache/superset/pull/20158))
|
||||
|
||||
- Helm chart now supports resource limits and requests for each component ([#20052](https://github.com/apache/superset/pull/20052))
|
||||
|
||||
- New Github workflow to test Storybook Netlify instance nightly ([#19852](https://github.com/apache/superset/pull/19852))
|
||||
- New GitHub workflow to test Storybook Netlify instance nightly ([#19852](https://github.com/apache/superset/pull/19852))
|
||||
|
||||
- Minimum requirement for Superset is now Python 3.8 ([#19017](https://github.com/apache/superset/pull/19017)
|
||||
- Minimum requirement for Superset is now Python 3.8 ([#19017](https://github.com/apache/superset/pull/19017))
|
||||
|
||||
## Features
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ under the License.
|
||||
- [#19898](https://github.com/apache/superset/pull/19898) feat: When editing the label/title in the Metrics popover, hitting Enter should save what you've typed (@diegomedina248)
|
||||
- [#16493](https://github.com/apache/superset/pull/16493) feat(plugin-chart-echarts): [feature-parity] support extra control for the area chart V2 (@stephenLYZ)
|
||||
- [#19855](https://github.com/apache/superset/pull/19855) feat(explore): Frontend implementation of dataset creation from infobox (@lyndsiWilliams)
|
||||
- [#20165](https://github.com/apache/superset/pull/20165) feat: add modfied col and timezone info to schedule col (@pkdotson)
|
||||
- [#20165](https://github.com/apache/superset/pull/20165) feat: add modified col and timezone info to schedule col (@pkdotson)
|
||||
- [#20144](https://github.com/apache/superset/pull/20144) feat: showing results pane in dashboard (@zhaoyongjie)
|
||||
- [#20242](https://github.com/apache/superset/pull/20242) feat: derived metrics use different line style (@zhaoyongjie)
|
||||
- [#20010](https://github.com/apache/superset/pull/20010) feat: standardized form_data (@zhaoyongjie)
|
||||
@@ -115,7 +115,7 @@ under the License.
|
||||
- [#19558](https://github.com/apache/superset/pull/19558) feat(explore): Redesign of Run/Save buttons (@kgabryje)
|
||||
- [#19650](https://github.com/apache/superset/pull/19650) feat(embedded): API get embedded dashboard config by uuid (@lilykuang)
|
||||
- [#19310](https://github.com/apache/superset/pull/19310) feat(CRUD): add new empty state (@stephenLYZ)
|
||||
- [#19622](https://github.com/apache/superset/pull/19622) feat(plugin-chart-echarts): add aggregate total for the Pie/Donuct chart (@stephenLYZ)
|
||||
- [#19622](https://github.com/apache/superset/pull/19622) feat(plugin-chart-echarts): add aggregate total for the Pie/Donut chart (@stephenLYZ)
|
||||
- [#19314](https://github.com/apache/superset/pull/19314) feat: Move Database Import option into DB Connection modal (@lyndsiWilliams)
|
||||
- [#19434](https://github.com/apache/superset/pull/19434) feat: deprecate old API and create new API for dashes created by me (@dpgaspar)
|
||||
- [#19482](https://github.com/apache/superset/pull/19482) feat: add success toast to alerts and reports (@pkdotson)
|
||||
@@ -181,7 +181,7 @@ under the License.
|
||||
- [#20204](https://github.com/apache/superset/pull/20204) fix: Fixes issue where results panel height was incorrect [sc-49045] (@eric-briscoe)
|
||||
- [#20235](https://github.com/apache/superset/pull/20235) fix: Box Plot Chart throws an error when the average (AVG) / SUM is being calculated on the Metrics (@diegomedina248)
|
||||
- [#20088](https://github.com/apache/superset/pull/20088) fix: datatype tracking issue on virtual dataset (@codemaster08240328)
|
||||
- [#20220](https://github.com/apache/superset/pull/20220) fix: dashbaord unable to refresh (@zhaoyongjie)
|
||||
- [#20220](https://github.com/apache/superset/pull/20220) fix: dashboard unable to refresh (@zhaoyongjie)
|
||||
- [#20228](https://github.com/apache/superset/pull/20228) fix: failed samples should throw exception (@zhaoyongjie)
|
||||
- [#20203](https://github.com/apache/superset/pull/20203) fix: move columns to datasource object for bootstrap data (@hughhhh)
|
||||
- [#20151](https://github.com/apache/superset/pull/20151) fix(csv): Ensure df_to_escaped_csv does not coerce integer columns to float (@john-bodley)
|
||||
@@ -191,7 +191,7 @@ under the License.
|
||||
- [#20206](https://github.com/apache/superset/pull/20206) fix(sql lab): SQL Lab Compile Query Delay (@diegomedina248)
|
||||
- [#20201](https://github.com/apache/superset/pull/20201) fix: unable to set destroyOnClose on ModalTrigger (@zhaoyongjie)
|
||||
- [#20186](https://github.com/apache/superset/pull/20186) fix(db): make to allow to show/hide the password when only creating (@prosdev0107)
|
||||
- [#20127](https://github.com/apache/superset/pull/20127) fix(database): retrival of tables and views from schema for exasol backend (@Nicoretti)
|
||||
- [#20127](https://github.com/apache/superset/pull/20127) fix(database): retrieval of tables and views from schema for exasol backend (@Nicoretti)
|
||||
- [#19899](https://github.com/apache/superset/pull/19899) fix: always create parameter json field (@pkdotson)
|
||||
- [#20173](https://github.com/apache/superset/pull/20173) fix: avoid while cycle in computeMaxFontSize for big Number run forever when css rule applied (@diegomedina248)
|
||||
- [#20086](https://github.com/apache/superset/pull/20086) fix(css): transparent linear gradient not working in safari (@stephenLYZ)
|
||||
@@ -298,7 +298,7 @@ under the License.
|
||||
- [#19570](https://github.com/apache/superset/pull/19570) fix: sqloxide optional (@betodealmeida)
|
||||
- [#19397](https://github.com/apache/superset/pull/19397) fix: weight tooltip issue (@codemaster08240328)
|
||||
- [#19313](https://github.com/apache/superset/pull/19313) fix(sql lab): increase the size of the action icons in the history tab (@diegomedina248)
|
||||
- [#19039](https://github.com/apache/superset/pull/19039) fix(explore): clean data when hidding control (@stephenLYZ)
|
||||
- [#19039](https://github.com/apache/superset/pull/19039) fix(explore): clean data when hiding control (@stephenLYZ)
|
||||
- [#19444](https://github.com/apache/superset/pull/19444) fix: Error Message is cut off in alerts & reports log page (@codemaster08240328)
|
||||
- [#19312](https://github.com/apache/superset/pull/19312) fix: adaptive formatting typo in explore dropdowns (@diegomedina248)
|
||||
- [#19534](https://github.com/apache/superset/pull/19534) fix(explore): Chart header icon paddings (@kgabryje)
|
||||
@@ -463,7 +463,7 @@ under the License.
|
||||
- [#19486](https://github.com/apache/superset/pull/19486) refactor: Removes the CSS files from the Treemap plugin (@michael-s-molina)
|
||||
- [#19488](https://github.com/apache/superset/pull/19488) refactor: Removes the CSS files from the Sunburst plugin (@michael-s-molina)
|
||||
- [#19490](https://github.com/apache/superset/pull/19490) chore: Add theme color to ParallelCoordinates (@geido)
|
||||
- [#19442](https://github.com/apache/superset/pull/19442) chore: Remove FilterbaleTableStyles.less (@geido)
|
||||
- [#19442](https://github.com/apache/superset/pull/19442) chore: Remove FilterableTableStyles.less (@geido)
|
||||
- [#19441](https://github.com/apache/superset/pull/19441) chore: Remove StyledQueryButton.less (@geido)
|
||||
- [#19473](https://github.com/apache/superset/pull/19473) refactor: Removes the CSS files from the Rose plugin (@michael-s-molina)
|
||||
- [#19466](https://github.com/apache/superset/pull/19466) chore: Removes hard-coded colors from legacy-plugin-chart-world-map (@michael-s-molina)
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
# Release Notes for Superset 3.1.0
|
||||
|
||||
Superset 3.1.0 brings a range of new features and quality of life improvements. This release is a minor version, meaning it doesn't include any breaking changes to ensure a seamless transition for our users. Here are some of the highlights of this release.
|
||||
|
||||
### Waterfall chart
|
||||
|
||||
The new [Waterfall chart](https://github.com/apache/superset/pull/25557) visualization provides a visual representation of how a value changes over time or across different categories. They are very helpful to show the cumulative effect of positive and negative changes from a starting value. Superset's Waterfall chart supports Breakdowns which can be used to analyze the contribution of different dimensions or factors to a specific metric. By breaking down the data into various categories or dimensions, you can identify the individual components that contribute to the overall variation or change in the metric.
|
||||
|
||||
The chart example below displays the total sales grouped by year and broken down by product line.
|
||||
|
||||

|
||||
|
||||
### Bubble Chart ECharts version
|
||||
|
||||
The new ECharts [Bubble chart](https://github.com/apache/superset/pull/22107) offers feature parity with the previous NVD3 version which should be removed in the next major release. This work is part of the [ECharts migration effort](https://github.com/apache/superset/issues/10418) to increase consistency and quality of our plugins. We'll add a migration to the new plugin soon which you'll be able to execute using the new CLI command.
|
||||
|
||||

|
||||
|
||||
### Improved Dataset selectors
|
||||
|
||||
The [dataset selectors](https://github.com/apache/superset/pull/25569) have been improved to also display the database and schema names which will help users locate the correct dataset, particularly when there are multiple tables/datasets with the same name that could benefit from disambiguation.
|
||||
|
||||

|
||||
|
||||
### SQL Lab improvements
|
||||
|
||||
SQL Lab received many user experience and performance improvements in this release. We’ll continue to improve the capabilities of SQL Lab with feedback from the community.
|
||||
|
||||
Now users can [automatically format](https://github.com/apache/superset/pull/25344) their SQL queries using the `Ctrl+Shift+F` shortcut or the Format SQL menu option available in the SQL configuration panel. Another improvement is that the results panel now shows the [executed query](https://github.com/apache/superset/pull/24787) which is very helpful when your SQL Lab editor has multiple queries.
|
||||
|
||||

|
||||
|
||||
In the SQL panel configurations, there's a menu option to show the [keyboard shortcuts](https://github.com/apache/superset/pull/25542) a user has access to.
|
||||
|
||||

|
||||
|
||||
SQL Lab has launched a non-blocking persistence mode, as outlined in [SIP-93](https://github.com/apache/superset/issues/21385). This enhancement ensures that your SQL editor content is preserved, even if your internet or service goes offline. Moreover, it improves user interaction by saving changes in a non-blocking way, similar to how Google Docs does.
|
||||
|
||||
Finally, the [SQL Lab module was moved to the Single Page Application](https://github.com/apache/superset/pull/25151) context. This means that both navigation and loading time of that module is significantly faster than previous versions (particularly when navigating to and from this page from other pages in Superset). This also reduces the number of requests to the server and pays some of our technical debt. Try it out! The difference is quite impressive!
|
||||
|
||||
### Country Map improvements
|
||||
|
||||
The Country Map visualization received some improvements in this release. The community added [France's regions](https://github.com/apache/superset/pull/25676) in addition to its departments and also many [Central Asia countries](https://github.com/apache/superset/pull/24870).
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%">France's regions</td>
|
||||
<td width="33%">Kazakhstan</td>
|
||||
<td width="33%">Kyrgyzstan</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="33%"><img src="media/france.png" width="100%"/></td>
|
||||
<td width="33%"><img src="media/kazakhstan.png" width="100%"></td>
|
||||
<td width="33%"><img src="media/kyrgyzstan.png" width="100%"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="33%">Tajikistan</td>
|
||||
<td width="33%">Turkmenistan</td>
|
||||
<td width="33%">Uzbekistan</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="33%"><img src="media/tajikistan.png" width="100%"/></td>
|
||||
<td width="33%"><img src="media/turkmenistan.png" width="100%"></td>
|
||||
<td width="33%"><img src="media/uzbekistan.png" width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### Deck.gl ContourLayer
|
||||
|
||||
We [added](https://github.com/apache/superset/pull/24154) the Deck.gl [ContourLayer](https://deck.gl/docs/api-reference/aggregation-layers/contour-layer) which aggregates data into Isolines or Isobands for a given threshold and cell size. By expanding the range of available [Deck.gl](https://deck.gl/) visualization layers, users will have more options to choose from when creating their visualizations. This will allow them to tailor their visualizations to their specific needs and explore their data in different ways.
|
||||
|
||||

|
||||
|
||||
### New Databases
|
||||
|
||||
Superset has added support for two new databases:
|
||||
|
||||
- [Databend](https://databend.rs/), an open-source, elastic, and workload-aware cloud data warehouse built in Rust. You can see the PR [here](https://github.com/apache/superset/pull/23308), and the updated documentation [here](https://superset.apache.org/docs/databases/databend).
|
||||
- [Apache Doris](https://doris.apache.org/), which is based on the MySQL protocol and introduces the concept of Multi Catalog. You can see the PR [here](https://github.com/apache/superset/pull/24714/) and the updated documentation [here](https://superset.apache.org/docs/databases/doris).
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="media/databend.png" width="100%"/></td>
|
||||
<td width="50%"><img src="media/doris.png" width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### CLI command to execute viz migrations
|
||||
|
||||
A new [CLI command](https://github.com/apache/superset/pull/25304) called viz-migrations was added to allow users to migrate charts of a specific type. This command is particularly helpful to migrate visualizations to their latest version and at the same time disable their legacy versions with the `VIZ_TYPE_DENYLIST` configuration. The main advantage of this command is that you can migrate your visualizations without needing to wait for a major release, where we generally remove the legacy plugins.
|
||||
|
||||
Currently, you can use the command to migrate Area, Bubble, Line, and Sunburst chart types but we'll add more as the ECharts migrations continue. Note that migrations for deprecated charts may be forced in upcoming major versions when the code is removed. Running migrations earlier will allow you to de-risk future upgrades while improving user experience.
|
||||
|
||||
```bash
|
||||
Usage: superset viz-migrations [OPTIONS] COMMAND [ARGS]...
|
||||
|
||||
Migrates a viz from one type to another.
|
||||
|
||||
Commands:
|
||||
downgrade Downgrades a viz to the previous version.
|
||||
upgrade Upgrade a viz to the latest version.
|
||||
```
|
||||
|
||||
Note: When migrating dashboards from one Superset instance to another (using import/export features or the Superset CLI), or restoring a backup of prior charts and dashboards, Superset will apply the existing migrations that are used during version upgrades. This will ensure that your charts and dashboards are using the latest and greatest charts that Superset officially supports.
|
||||
|
||||
### Database engine spec improvements
|
||||
|
||||
Many database engine improvements were added in this release. Some highlights:
|
||||
|
||||
- [feat: improve SQLite DB engine spec](https://github.com/apache/superset/pull/24909)
|
||||
- [feat: add MotherDuck DB engine spec](https://github.com/apache/superset/pull/24934)
|
||||
- [feat: Add week time grain for Elasticsearch datasets](https://github.com/apache/superset/pull/25683)
|
||||
- [feat: method for dynamic allows_alias_in_select](https://github.com/apache/superset/pull/25882)
|
||||
|
||||
We even added a new [CLI command](https://github.com/apache/superset/pull/24918) to test DB engine specs, SQLAlchemy dialects, and database connections.
|
||||
|
||||
```bash
|
||||
Usage: superset test-db [OPTIONS] SQLALCHEMY_URI
|
||||
|
||||
Run a series of tests against an analytical database.
|
||||
|
||||
This command tests:
|
||||
1. The Superset DB engine spec.
|
||||
2. The SQLAlchemy dialect.
|
||||
3. The database connectivity and performance.
|
||||
|
||||
It's useful for people developing DB engine specs and/or SQLAlchemy
|
||||
dialects, and also to test new versions of DB API 2.0 drivers.
|
||||
|
||||
Options:
|
||||
-c, --connect-args TEXT Connect args as JSON or YAML
|
||||
--help Show this message and exit.
|
||||
```
|
||||
|
||||
### Playwright as an alternative to Selenium
|
||||
|
||||
Per [SIP-98](https://github.com/apache/superset/issues/24948), we [introduced Playwright](https://github.com/apache/superset/pull/25247) for rendering charts in Superset reports. [Playwright](https://playwright.dev/) is an open-source library for automating web browsers, similar to Selenium but with better support for modern browser features and improved performance. By using Playwright, we aim to provide a more stable and accurate chart rendering experience in Superset reports, especially for [Deck.gl](https://deck.gl/) charts.
|
||||
|
||||
Since configuring Playwright requires installing additional dependencies, in order to prevent breaking changes in existing deployments, we put the new flow behind a feature flag called `PLAYWRIGHT_REPORTS_AND_THUMBNAILS`. Users that don't enable the feature flag will be unaffected by the changes.
|
||||
|
||||
### Pandas upgraded to v2
|
||||
|
||||
We [upgraded Pandas to v2](https://github.com/apache/superset/pull/24705) and [added performance dependencies](https://github.com/apache/superset/pull/24768) to provide speed improvements, especially when working with large data sets. For the full list of changes, check [Pandas 2.0.0 Release Notes](https://pandas.pydata.org/docs/dev/whatsnew/v2.0.0.html).
|
||||
|
||||
### Tags
|
||||
|
||||
Tags evolved a lot since 3.0, with many PRs that further improved the feature. During this phase, the community also made [great suggestions](https://github.com/apache/superset/discussions/25918) to make sure the feature is scalable, adhere to our security model, and offer a consistent design. We're still working on this feedback and new improvements will follow. For that reason, we're keeping the feature as beta behind the `TAGGING_SYSTEM` feature flag.
|
||||
|
After Width: | Height: | Size: 420 KiB |
|
After Width: | Height: | Size: 1011 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 411 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 258 KiB |
|
After Width: | Height: | Size: 299 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 463 KiB |
|
After Width: | Height: | Size: 200 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 319 KiB |
@@ -0,0 +1,54 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Function to determine Python command
|
||||
get_python_command() {
|
||||
if command -v python3 &>/dev/null; then
|
||||
echo "python3"
|
||||
else
|
||||
echo "python"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to determine Pip command
|
||||
get_pip_command() {
|
||||
if command -v pip3 &>/dev/null; then
|
||||
echo "pip3"
|
||||
else
|
||||
echo "pip"
|
||||
fi
|
||||
}
|
||||
|
||||
PYTHON=$(get_python_command)
|
||||
PIP=$(get_pip_command)
|
||||
|
||||
# Get the release directory's path. If you unzip an Apache release and just run the npm script to validate the release, this will be a file name like `apache-superset-x.x.xrcx-source.tar.gz`
|
||||
RELEASE_DIR_NAME="../../$(basename "$(dirname "$(pwd)")").tar.gz"
|
||||
|
||||
# Install dependencies from requirements.txt if the file exists
|
||||
if [ -f "path/to/requirements.txt" ]; then
|
||||
echo "Installing Python dependencies..."
|
||||
$PYTHON -m $PIP install -r path/to/requirements.txt
|
||||
fi
|
||||
|
||||
# echo $PYTHON
|
||||
# echo $RELEASE_DIR_NAME
|
||||
|
||||
# Run the Python script with the parent directory name as an argument
|
||||
$PYTHON ../RELEASING/verify_release.py "$RELEASE_DIR_NAME"
|
||||
@@ -0,0 +1,101 @@
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import Optional
|
||||
|
||||
import requests
|
||||
|
||||
# Part 1: Verify SHA512 hash - this is the same as running `shasum -a 512 {release}` and comparing it against `{release}.sha512`
|
||||
|
||||
|
||||
def get_sha512_hash(filename: str) -> str:
|
||||
"""Run the shasum command on the file and return the SHA512 hash."""
|
||||
result = subprocess.run(["shasum", "-a", "512", filename], stdout=subprocess.PIPE)
|
||||
sha512_hash = result.stdout.decode().split()[0]
|
||||
return sha512_hash
|
||||
|
||||
|
||||
def read_sha512_file(filename: str) -> str:
|
||||
"""Read the corresponding .sha512 file and process its contents."""
|
||||
sha_filename = filename + ".sha512"
|
||||
with open(sha_filename) as file:
|
||||
lines = file.readlines()
|
||||
processed_sha = "".join(lines[1:]).replace(" ", "").replace("\n", "").lower()
|
||||
return processed_sha
|
||||
|
||||
|
||||
def verify_sha512(filename: str) -> str:
|
||||
"""Verify if the SHA512 hash of the file matches with the hash in the .sha512 file."""
|
||||
sha512_hash = get_sha512_hash(filename)
|
||||
sha512_file_content = read_sha512_file(filename)
|
||||
|
||||
if sha512_hash == sha512_file_content:
|
||||
return "SHA verified"
|
||||
else:
|
||||
return "SHA failed"
|
||||
|
||||
|
||||
# Part 2: Verify RSA key - this is the same as running `gpg --verify {release}.asc {release}` and comparing the RSA key and email address against the KEYS file
|
||||
|
||||
|
||||
def get_gpg_info(filename: str) -> tuple[Optional[str], Optional[str]]:
|
||||
"""Run the GPG verify command and extract RSA key and email address."""
|
||||
asc_filename = filename + ".asc"
|
||||
result = subprocess.run(
|
||||
["gpg", "--verify", asc_filename, filename], capture_output=True
|
||||
)
|
||||
output = result.stderr.decode()
|
||||
|
||||
rsa_key = re.search(r"RSA key ([0-9A-F]+)", output)
|
||||
email = re.search(r'issuer "([^"]+)"', output)
|
||||
|
||||
rsa_key_result = rsa_key.group(1) if rsa_key else None
|
||||
email_result = email.group(1) if email else None
|
||||
|
||||
# Debugging: print warnings if rsa_key or email is not found
|
||||
if rsa_key_result is None:
|
||||
print("Warning: No RSA key found in GPG verification output.")
|
||||
if email_result is None:
|
||||
print("Warning: No email address found in GPG verification output.")
|
||||
|
||||
return rsa_key_result, email_result
|
||||
|
||||
|
||||
def verify_rsa_key(rsa_key: str, email: Optional[str]) -> str:
|
||||
"""Fetch the KEYS file and verify if the RSA key and email match."""
|
||||
url = "https://downloads.apache.org/superset/KEYS"
|
||||
response = requests.get(url)
|
||||
if response.status_code == 200:
|
||||
if rsa_key not in response.text:
|
||||
return "RSA key not found on KEYS page"
|
||||
|
||||
# Check if email is None or not in response.text
|
||||
if email and email in response.text:
|
||||
return "RSA key and email verified against Apache KEYS file"
|
||||
elif email:
|
||||
return "RSA key verified, but Email not found on KEYS page"
|
||||
else:
|
||||
return "RSA key verified, but Email not available for verification"
|
||||
else:
|
||||
return "Failed to fetch KEYS file"
|
||||
|
||||
|
||||
def verify_sha512_and_rsa(filename: str) -> None:
|
||||
"""Verify SHA512 hash and RSA key."""
|
||||
sha_result = verify_sha512(filename)
|
||||
print(sha_result)
|
||||
|
||||
rsa_key, email = get_gpg_info(filename)
|
||||
if rsa_key:
|
||||
rsa_result = verify_rsa_key(rsa_key, email)
|
||||
print(rsa_result)
|
||||
else:
|
||||
print("GPG verification failed: RSA key or email not found")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python script.py <filename>")
|
||||
else:
|
||||
filename = sys.argv[1]
|
||||
verify_sha512_and_rsa(filename)
|
||||
@@ -27,18 +27,8 @@ These features are considered **unfinished** and should only be used on developm
|
||||
|
||||
[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
|
||||
|
||||
- CLIENT_CACHE
|
||||
- DASHBOARD_CACHE
|
||||
- DASHBOARD_NATIVE_FILTERS_SET
|
||||
- DISABLE_DATASET_SOURCE_EDIT
|
||||
- DRILL_TO_DETAIL
|
||||
- ENABLE_ADVANCED_DATA_TYPES
|
||||
- ENABLE_EXPLORE_JSON_CSRF_PROTECTION
|
||||
- ENABLE_TEMPLATE_REMOVE_FILTERS
|
||||
- HORIZONTAL_FILTER_BAR
|
||||
- KV_STORE
|
||||
- PRESTO_EXPAND_DATA
|
||||
- REMOVE_SLICE_LEVEL_LABEL_COLORS
|
||||
- SHARE_QUERIES_VIA_KV_STORE
|
||||
- TAGGING_SYSTEM
|
||||
|
||||
@@ -52,38 +42,34 @@ These features are **finished** but currently being tested. They are usable, but
|
||||
- ALLOW_FULL_CSV_EXPORT
|
||||
- CACHE_IMPERSONATION
|
||||
- CONFIRM_DASHBOARD_DIFF
|
||||
- DASHBOARD_EDIT_CHART_IN_NEW_TAB
|
||||
- DASHBOARD_FILTERS_EXPERIMENTAL
|
||||
- DASHBOARD_NATIVE_FILTERS
|
||||
- DRILL_TO_DETAIL
|
||||
- DYNAMIC_PLUGINS: [(docs)](https://superset.apache.org/docs/installation/running-on-kubernetes)
|
||||
- ENABLE_FILTER_BOX_MIGRATION
|
||||
- ENABLE_JAVASCRIPT_CONTROLS
|
||||
- ESTIMATE_QUERY_COST
|
||||
- GENERIC_CHART_AXES
|
||||
- GLOBAL_ASYNC_QUERIES [(docs)](https://github.com/apache/superset/blob/master/CONTRIBUTING.md#async-chart-queries)
|
||||
- HORIZONTAL_FILTER_BAR
|
||||
- PLAYWRIGHT_REPORTS_AND_THUMBNAILS
|
||||
- RLS_IN_SQLLAB
|
||||
- SSH_TUNNELING [(docs)](https://superset.apache.org/docs/installation/setup-ssh-tunneling)
|
||||
- USE_ANALAGOUS_COLORS
|
||||
- UX_BETA
|
||||
- VERSIONED_EXPORT
|
||||
|
||||
## Stable
|
||||
|
||||
These features flags are **safe for production** and have been tested.
|
||||
These features flags are **safe for production**. They have been tested and will be supported for the foreseeable future.
|
||||
|
||||
[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
|
||||
|
||||
- ALERTS_ATTACH_REPORTS
|
||||
- ALLOW_ADHOC_SUBQUERY
|
||||
- DASHBOARD_CROSS_FILTERS
|
||||
- DASHBOARD_RBAC [(docs)](https://superset.apache.org/docs/creating-charts-dashboards/first-dashboard#manage-access-to-dashboards)
|
||||
- DASHBOARD_VIRTUALIZATION
|
||||
- DATAPANEL_CLOSED_BY_DEFAULT
|
||||
- DISABLE_LEGACY_DATASOURCE_EDITOR
|
||||
- DRILL_BY
|
||||
- DRUID_JOINS
|
||||
- EMBEDDABLE_CHARTS
|
||||
- EMBEDDED_SUPERSET
|
||||
- ENABLE_DND_WITH_CLICK_UX
|
||||
- ENABLE_EXPLORE_DRAG_AND_DROP
|
||||
- ENABLE_TEMPLATE_PROCESSING
|
||||
- ENFORCE_DB_ENCRYPTION_UI
|
||||
- ESCAPE_MARKDOWN_HTML
|
||||
- LISTVIEWS_DEFAULT_CARD_VIEW
|
||||
- SCHEDULED_QUERIES [(docs)](https://superset.apache.org/docs/installation/alerts-reports)
|
||||
@@ -97,6 +83,7 @@ These features flags currently default to True and **will be removed in a future
|
||||
|
||||
[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
|
||||
|
||||
- ALLOW_DASHBOARD_DOMAIN_SHARDING
|
||||
- DISPLAY_MARKDOWN_HTML
|
||||
- FORCE_DATABASE_CONNECTIONS_SSL
|
||||
- DASHBOARD_CROSS_FILTERS
|
||||
- ENABLE_JAVASCRIPT_CONTROLS
|
||||
- GENERIC_CHART_AXES
|
||||
- KV_STORE
|
||||
|
||||
@@ -21,7 +21,7 @@ under the License.
|
||||
|
||||
Here's a list of organizations, broken down into broad industry categories, that have taken the time to send a PR to let
|
||||
the world know they are using Apache Superset. If you are a user and want to be recognized,
|
||||
all you have to do is file a simple PR [like this one](https://github.com/apache/superset/pull/10122). If you think
|
||||
all you have to do is file a simple PR [like this one](https://github.com/apache/superset/pull/10122) — [just click here](https://github.com/apache/superset/edit/master/RESOURCES/INTHEWILD.md) to do so. If you think
|
||||
the categorization is inaccurate, please file a PR with your correction as well.
|
||||
Join our growing community!
|
||||
|
||||
@@ -41,6 +41,7 @@ Join our growing community!
|
||||
- [Capital Service S.A.](http://capitalservice.pl) [@pkonarzewski]
|
||||
- [Clark.de](http://clark.de/)
|
||||
- [KarrotPay](https://www.daangnpay.com/)
|
||||
- [Taveo](https://www.taveo.com) [@codek]
|
||||
- [Wise](https://wise.com) [@koszti]
|
||||
- [Xendit](http://xendit.co/) [@LieAlbertTriAdrian]
|
||||
|
||||
@@ -77,6 +78,7 @@ Join our growing community!
|
||||
- [Careem](https://www.careem.com/) [@SamraHanifCareem]
|
||||
- [Cloudsmith](https://cloudsmith.io) [@alancarson]
|
||||
- [CnOvit](http://www.cnovit.com/) [@xieshaohu]
|
||||
- [Cyberhaven](https://www.cyberhaven.com/) [@toliver-ch]
|
||||
- [Deepomatic](https://deepomatic.com/) [@Zanoellia]
|
||||
- [Dial Once](https://www.dial-once.com/)
|
||||
- [Dremio](https://dremio.com) [@narendrans]
|
||||
@@ -101,6 +103,7 @@ Join our growing community!
|
||||
- [Preset, Inc.](https://preset.io)
|
||||
- [Pronto Tools](http://www.prontotools.io) [@zkan]
|
||||
- [PubNub](https://pubnub.com) [@jzucker2]
|
||||
- [ReadyTech](https://www.readytech.io)
|
||||
- [Reward Gateway](https://www.rewardgateway.com)
|
||||
- [ScopeAI](https://www.getscopeai.com) [@iloveluce]
|
||||
- [Showmax](https://tech.showmax.com) [@bobek]
|
||||
@@ -108,6 +111,7 @@ Join our growing community!
|
||||
- [Steamroot](https://streamroot.io/)
|
||||
- [TechAudit](https://www.techaudit.info) [@ETselikov]
|
||||
- [Tenable](https://www.tenable.com) [@dflionis]
|
||||
- [Tentacle](https://public.tentaclecmi.com) [@jdclarke5]
|
||||
- [timbr.ai](https://timbr.ai/) [@semantiDan]
|
||||
- [Tobii](http://www.tobii.com/) [@dwa]
|
||||
- [Tooploox](https://www.tooploox.com/) [@jakubczaplicki]
|
||||
@@ -116,12 +120,14 @@ Join our growing community!
|
||||
- [Windsor.ai](https://www.windsor.ai/) [@octaviancorlade]
|
||||
- [Zeta](https://www.zeta.tech/) [@shaikidris]
|
||||
|
||||
### Entertainment
|
||||
### Media & Entertainment
|
||||
- [6play](https://www.6play.fr) [@CoryChaplin]
|
||||
- [bilibili](https://www.bilibili.com) [@Moinheart]
|
||||
- [BurdaForward](https://www.burda-forward.de/en/)
|
||||
- [Douban](https://www.douban.com/) [@luchuan]
|
||||
- [Kuaishou](https://www.kuaishou.com/) [@zhaoyu89730105]
|
||||
- [Netflix](https://www.netflix.com/)
|
||||
- [Prensa Iberica](https://www.prensaiberica.es/) [@zamar-roura]
|
||||
- [TME QQMUSIC/WESING](https://www.tencentmusic.com/)[@shenyuanli,@marklaw]
|
||||
- [Xite](https://xite.com/) [@shashankkoppar]
|
||||
- [Zaihang](http://www.zaih.com/)
|
||||
@@ -140,6 +146,7 @@ Join our growing community!
|
||||
- [DouroECI](https://www.douroeci.com/) [@nunohelibeires]
|
||||
- [Safaricom](https://www.safaricom.co.ke/) [@mmutiso]
|
||||
- [Scoot](https://scoot.co/) [@haaspt]
|
||||
- [Wattbewerb](https://wattbewerb.de/) [@wattbewerb]
|
||||
|
||||
### Healthcare
|
||||
- [Amino](https://amino.com) [@shkr]
|
||||
@@ -156,9 +163,6 @@ Join our growing community!
|
||||
- [Swile](https://www.swile.co/) [@PaoloTerzi]
|
||||
- [Symmetrics](https://www.symmetrics.fyi)
|
||||
|
||||
### News
|
||||
- [Prensa Iberica](https://www.prensaiberica.es/) [@zamar-roura]
|
||||
|
||||
### Government
|
||||
- [City of Ann Arbor, MI](https://www.a2gov.org/) [@sfirke]
|
||||
|
||||
@@ -167,10 +171,13 @@ Join our growing community!
|
||||
|
||||
### Others
|
||||
- [AI inside](https://inside.ai/en/)
|
||||
- [Automattic](https://automattic.com/) [@Khrol, @Usiel]
|
||||
- [Dropbox](https://www.dropbox.com/) [@bkyryliuk]
|
||||
- [Grassroot](https://www.grassrootinstitute.org/)
|
||||
- [Increff](https://www.increff.com/) [@ishansinghania]
|
||||
- [komoot](https://www.komoot.com/) [@christophlingg]
|
||||
- [Let's Roam](https://www.letsroam.com/)
|
||||
- [Onebeat](https://1beat.com/) [@GuyAttia]
|
||||
- [Twitter](https://twitter.com/)
|
||||
- [VLMedia](https://www.vlmedia.com.tr/) [@ibotheperfect]
|
||||
- [Yahoo!](https://yahoo.com/)
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
| | Admin | Alpha | Gamma | SQL_LAB |
|
||||
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- |
|
||||
| Permission/role description | Admins have all possible rights, including granting or revoking rights from other users and altering other people’s slices and dashboards. | Alpha users have access to all data sources, but they cannot grant or revoke access from other users. They are also limited to altering the objects that they own. Alpha users can add and alter data sources. | Gamma users have limited access. They can only consume data coming from data sources they have been given access to through another complementary role. They only have access to view the slices and dashboards made from data sources that they have access to. Currently Gamma users are not able to alter or add data sources. We assume that they are mostly content consumers, though they can create slices and dashboards. | The sql_lab role grants access to SQL Lab. Note that while Admin users have access to all databases by default, both Alpha and Gamma users need to be given access on a per database basis. | |
|
||||
| can read on SavedQuery | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can write on SavedQuery | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can read on CssTemplate | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on CssTemplate | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on ReportSchedule | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on ReportSchedule | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on Chart | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on Chart | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on Annotation | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on Annotation | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on Dataset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on Dataset | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can read on Log | :heavy_check_mark: | O | O | O |
|
||||
| can write on Log | :heavy_check_mark: | O | O | O |
|
||||
| can read on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on Database | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can write on Database | :heavy_check_mark: | O | O | O |
|
||||
| can read on Query | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can this form get on ResetPasswordView | :heavy_check_mark: | O | O | O |
|
||||
| can this form post on ResetPasswordView | :heavy_check_mark: | O | O | O |
|
||||
| can this form get on ResetMyPasswordView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on ResetMyPasswordView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form get on UserInfoEditView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on UserInfoEditView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can edit on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can delete on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can add on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can list on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can userinfo on UserDBModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| resetmypassword on UserDBModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| resetpasswords on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| userinfoedit on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can show on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can edit on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can delete on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can add on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can list on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| copyrole on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can get on OpenApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on SwaggerView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get on MenuApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on AsyncEventsRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can invalidate on CacheRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can function names on Database | :heavy_check_mark: | O | O | O |
|
||||
| can query form data on Api | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can query on Api | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can time range on Api | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form get on CsvToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on CsvToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form get on ExcelToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on ExcelToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can external metadata on Datasource | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can save on Datasource | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can get on Datasource | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can my queries on SqlLab | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can log on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can schemas access for csv upload on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can import dashboards on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can schemas on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can sqllab history on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can publish on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can csv on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can slice on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can sync druid source on Superset | :heavy_check_mark: | O | O | O |
|
||||
| can explore on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can approve on Superset | :heavy_check_mark: | O | O | O |
|
||||
| can explore json on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can fetch datasource metadata on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can csrf token on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can sqllab on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can select star on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can warm up cache on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can sqllab table viz on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can available domains on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can request access on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can dashboard on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can post on TableSchemaView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can expanded on TableSchemaView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can delete on TableSchemaView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can get on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can post on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can delete query on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can migrate query on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can activate on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can delete on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can put on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can read on SecurityRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| menu access on Security | :heavy_check_mark: | O | O | O |
|
||||
| menu access on List Users | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on List Roles | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Action Log | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Manage | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| menu access on Annotation Layers | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on CSS Templates | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| menu access on Import Dashboards | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Data | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Databases | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Datasets | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Upload a CSV | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| menu access on Upload Excel | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Charts | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Dashboards | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on SQL Lab | :heavy_check_mark: | O | O | :heavy_check_mark: |
|
||||
| menu access on SQL Editor | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| menu access on Saved Queries | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| menu access on Query Search | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| all datasource access on all_datasource_access | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| all database access on all_database_access | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| all query access on all_query_access | :heavy_check_mark: | O | O | O |
|
||||
| can edit on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can list on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can show on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can userinfo on UserOAuthModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can add on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can delete on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| userinfoedit on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can write on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can edit on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can list on DynamicPlugin | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on DynamicPlugin | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can download on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can add on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can delete on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can edit on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can list on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can show on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can download on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can add on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can delete on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| muldelete on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can external metadata by name on Datasource | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get value on KV | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can store on KV | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can tagged objects on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can suggestions on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can post on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can edit on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can add on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| muldelete on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can edit on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can add on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| muldelete on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can edit on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can add on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on AlertLogModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on AlertLogModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on AlertObservationModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on AlertObservationModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Row Level Security | :heavy_check_mark: | O | O | O |
|
||||
| menu access on Access requests | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Home | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Plugins | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Dashboard Email Schedules | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Chart Emails | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Alerts | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Alerts & Report | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Scan New Datasources | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can share dashboard on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can share chart on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form get on ColumnarToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on ColumnarToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Upload a Columnar file | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can export on Chart | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on DashboardFilterStateRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on DashboardFilterStateRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on DashboardPermalinkRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on DashboardPermalinkRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete embedded on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can set embedded on Dashboard | :heavy_check_mark: | O | O | O |
|
||||
| can export on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get embedded on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can export on Database | :heavy_check_mark: | O | O | O |
|
||||
| can export on Dataset | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can write on ExploreFormDataRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on ExploreFormDataRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on ExplorePermalinkRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on ExplorePermalinkRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can export on ImportExportRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can import on ImportExportRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can export on SavedQuery | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can dashboard permalink on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can grant guest token on SecurityRestApi | :heavy_check_mark: | O | O | O |
|
||||
| can read on AdvancedDataType | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on EmbeddedDashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can duplicate on Dataset | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can read on Explore | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can samples on Datasource | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can read on AvailableDomains | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get or create dataset on Dataset | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can get column values on Datasource | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can export csv on SQLLab | :heavy_check_mark: | O | O | :heavy_check_mark: |
|
||||
| can get results on SQLLab | :heavy_check_mark: | O | O | :heavy_check_mark: |
|
||||
| can execute sql query on SQLLab | :heavy_check_mark: | O | O | :heavy_check_mark: |
|
||||
| can recent activity on Log | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
@@ -22,10 +22,104 @@ under the License.
|
||||
This file documents any backwards-incompatible changes in Superset and
|
||||
assists people when migrating to a new version.
|
||||
|
||||
## Next
|
||||
|
||||
- [26450](https://github.com/apache/superset/pull/26450): Deprecates the `KV_STORE` feature flag and its related assets such as the API endpoint and `keyvalue` table. The main dependency of this feature is the `SHARE_QUERIES_VIA_KV_STORE` feature flag which allows sharing SQL Lab queries without the necessity of saving the query. Our intention is to use the permalink feature to implement this use case before 5.0 and that's why we are deprecating the feature flag now.
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- [26347](https://github.com/apache/superset/issues/26347): Removes the deprecated `VERSIONED_EXPORT` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
- [26328](https://github.com/apache/superset/issues/26328): Removes the deprecated Filter Box code and it's associated dependencies `react-select` and `array-move`. It also removes the `DeprecatedSelect` and `AsyncSelect` components that were exclusively used by filter boxes. Existing filter boxes will be automatically migrated to native filters.
|
||||
- [26330](https://github.com/apache/superset/issues/26330): Removes the deprecated `DASHBOARD_FILTERS_EXPERIMENTAL` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26344](https://github.com/apache/superset/issues/26344): Removes the deprecated `ENABLE_EXPLORE_JSON_CSRF_PROTECTION` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26345](https://github.com/apache/superset/issues/26345): Removes the deprecated `ENABLE_TEMPLATE_REMOVE_FILTERS` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
- [26346](https://github.com/apache/superset/issues/26346): Removes the deprecated `REMOVE_SLICE_LEVEL_LABEL_COLORS` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26348](https://github.com/apache/superset/issues/26348): Removes the deprecated `CLIENT_CACHE` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26349](https://github.com/apache/superset/issues/26349): Removes the deprecated `DASHBOARD_CACHE` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26369](https://github.com/apache/superset/issues/26369): Removes the Filter Sets feature including the deprecated `DASHBOARD_NATIVE_FILTERS_SET` feature flag and all related API endpoints. The feature is permanently removed as it was not being actively maintained, it was not widely used, and it was full of bugs. We also considered that if we were to provide a similar feature, it would be better to re-implement it from scratch given the amount of technical debt that the current implementation has. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26343](https://github.com/apache/superset/issues/26343): Removes the deprecated `ENABLE_EXPLORE_DRAG_AND_DROP` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
- [26331](https://github.com/apache/superset/issues/26331): Removes the deprecated `DISABLE_DATASET_SOURCE_EDIT` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26636](https://github.com/apache/superset/issues/26636): Sets the `DASHBOARD_VIRTUALIZATION` feature flag to `True` by default. This feature was introduced by [21438](https://github.com/apache/superset/pull/21438) and will enable virtualization when rendering a dashboard's charts in an attempt to reduce the number of elements (DOM nodes) rendered at once. This is especially useful for large dashboards.
|
||||
- [26637](https://github.com/apache/superset/issues/26637): Sets the `DRILL_BY` feature flag to `True` by default given that the feature has been tested for a while and reached a stable state.
|
||||
- [26462](https://github.com/apache/superset/issues/26462): Removes the Profile feature given that it's not actively maintained and not widely used.
|
||||
- [26377](https://github.com/apache/superset/pull/26377): Removes the deprecated Redirect API that supported short URLs used before the permalink feature.
|
||||
- [26329](https://github.com/apache/superset/issues/26329): Removes the deprecated `DASHBOARD_NATIVE_FILTERS` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
|
||||
### Potential Downtime
|
||||
|
||||
- [26416](https://github.com/apache/superset/pull/26416): adds 2 database indexes to report_execution_log and 1 to report_recipient to improve performance, this may cause downtime on large deployments.
|
||||
|
||||
## 3.1.0
|
||||
|
||||
- [24657](https://github.com/apache/superset/pull/24657): Bumps the cryptography package to augment the OpenSSL security vulnerability.
|
||||
|
||||
### Other
|
||||
|
||||
- [24982](https://github.com/apache/superset/pull/24982): By default, physical datasets on Oracle-like dialects like Snowflake will now use denormalized column names. However, existing datasets won't be affected. To change this behavior, the "Advanced" section on the dataset modal has a "Normalize column names" flag which can be changed to change this behavior.
|
||||
|
||||
## 3.0.3
|
||||
|
||||
- [26034](https://github.com/apache/superset/issues/26034): Fixes a problem where numeric x-axes were being treated as categorical values. As a consequence of that, the way labels are displayed might change given that ECharts has a different treatment for numerical and categorical values. To revert to the old behavior, users need to manually convert numerical columns to text so that they are treated as categories. Check https://github.com/apache/superset/issues/26159 for more details.
|
||||
|
||||
## 3.0.0
|
||||
|
||||
- [25053](https://github.com/apache/superset/pull/25053): Extends the `ab_user.email` column from 64 to 320 characters which has an associated unique key constraint. This will be problematic for MySQL metadata databases which use the InnoDB storage engine with the `innodb_large_prefix` parameter disabled as the key prefix limit is 767 bytes. Enabling said parameter and ensuring that the table uses either the `DYNAMIC` or `COMPRESSED` row format should remedy the problem. See [here](https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html) for more details.
|
||||
- [24911](https://github.com/apache/superset/pull/24911): Changes the column type from `TEXT` to `MediumText` in table `logs`, potentially requiring a table lock on MySQL dbs or taking some time to complete on large deployments.
|
||||
- [24939](https://github.com/apache/superset/pull/24939): Augments the foreign key constraints for the `embedded_dashboards` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dashboard is deleted. Scheduled downtime may be advised.
|
||||
- [24938](https://github.com/apache/superset/pull/24938): Augments the foreign key constraints for the `dashboard_slices` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dashboard or slice is deleted. Scheduled downtime may be advised.
|
||||
- [24628]https://github.com/apache/superset/pull/24628): Augments the foreign key constraints for the `dashboard_owner`, `report_schedule_owner`, and `slice_owner` tables to include an explicit CASCADE ON DELETE to ensure the relevant ownership records are deleted when a dataset is deleted. Scheduled downtime may be advised.
|
||||
- [24488](https://github.com/apache/superset/pull/24488): Augments the foreign key constraints for the `sql_metrics`, `sqlatable_user`, and `table_columns` tables which reference the `tables` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dataset is deleted. Scheduled downtime may be advised.
|
||||
- [24232](https://github.com/apache/superset/pull/24232): Enables ENABLE_TEMPLATE_REMOVE_FILTERS, DRILL_TO_DETAIL, DASHBOARD_CROSS_FILTERS by default, marks VERSIONED_EXPORT and ENABLE_TEMPLATE_REMOVE_FILTERS as deprecated.
|
||||
- [23652](https://github.com/apache/superset/pull/23652): Enables GENERIC_CHART_AXES feature flag by default.
|
||||
- [23226](https://github.com/apache/superset/pull/23226): Migrated endpoint `/estimate_query_cost/<int:database_id>` to `/api/v1/sqllab/estimate/`. Corresponding permissions are can estimate query cost on SQLLab. Make sure you add/replace the necessary permissions on any custom roles you may have.
|
||||
- [23890](https://github.com/apache/superset/pull/23890): Removes Python 3.8 support.
|
||||
- [24404](https://github.com/apache/superset/pull/24404): FLASK_ENV is getting
|
||||
deprecated, we recommend using SUPERSET_ENV and reviewing your
|
||||
config for ENVIRONMENT_TAG_CONFIG, which enables adding a tag in the navbar to
|
||||
make it more clear which environment your are in.
|
||||
`SUPERSET_ENV=production` and `SUPERSET_ENV=development` are the two
|
||||
supported switches based on the default config.
|
||||
- [19242](https://github.com/apache/superset/pull/19242): Adhoc subqueries are now disabled by default for security reasons. To enable them, set the feature flag `ALLOW_ADHOC_SUBQUERY` to `True`.
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- [24686]https://github.com/apache/superset/pull/24686): All dataset's custom explore_url are handled as relative URLs on the frontend, behaviour controlled by PREVENT_UNSAFE_DEFAULT_URLS_ON_DATASET.
|
||||
- [24262](https://github.com/apache/superset/pull/24262): Enabled `TALISMAN_ENABLED` flag by default and provided stricter default Content Security Policy
|
||||
- [24415](https://github.com/apache/superset/pull/24415): Removed the obsolete Druid NoSQL REGEX operator.
|
||||
- [24423](https://github.com/apache/superset/pull/24423): Removed deprecated APIs `/superset/slice_json/...`, `/superset/annotation_json/...`
|
||||
- [24400](https://github.com/apache/superset/pull/24400): Removed deprecated APIs `/superset/recent_activity/...`, `/superset/fave_dashboards_by_username/...`, `/superset/fave_dashboards/...`, `/superset/created_dashboards/...`, `/superset/user_slices/`, `/superset/created_slices/...`, `/superset/fave_slices/...`, `/superset/favstar/...`,
|
||||
- [24401](https://github.com/apache/superset/pull/24401): Removes the deprecated `metrics` column (which was blossomed in [20732](https://github.com/apache/superset/pull/20732)) from the `/api/v1/dataset/` API.
|
||||
- [24375](https://github.com/apache/superset/pull/24375): Removed deprecated API `/superset/get_or_create_table/...`, `/superset/sqllab_viz`
|
||||
- [24360](https://github.com/apache/superset/pull/24360): Removed deprecated APIs `/superset/stop_query/...`, `/superset/queries/...`, `/superset/search_queries`
|
||||
- [24353](https://github.com/apache/superset/pull/24353): Removed deprecated APIs `/copy_dash/int:dashboard_id/`, `/save_dash/int:dashboard_id/`, `/add_slices/int:dashboard_id/`.
|
||||
- [24198](https://github.com/apache/superset/pull/24198) The FAB views `User Registrations` and `User's Statistics` have been changed to Admin only. To re-enable them for non-admin users, please add the following perms to your custom role: `menu access on User's Statistics` and `menu access on User Registrations`.
|
||||
- [24354](https://github.com/apache/superset/pull/24354): Removed deprecated APIs `/superset/testconn`, `/superset/validate_sql_json/`, `/superset/schemas_access_for_file_upload`, `/superset/extra_table_metadata`
|
||||
- [24381](https://github.com/apache/superset/pull/24381): Removed deprecated API `/superset/available_domains/`
|
||||
- [24359](https://github.com/apache/superset/pull/24359): Removed deprecated APIs `/superset/estimate_query_cost/..`, `/superset/results/..`, `/superset/sql_json/..`, `/superset/csv/..`
|
||||
- [24345](https://github.com/apache/superset/pull/24345) Converts `ENABLE_BROAD_ACTIVITY_ACCESS` and `MENU_HIDE_USER_INFO` into feature flags and changes the value of `ENABLE_BROAD_ACTIVITY_ACCESS` to `False` as it's more secure.
|
||||
- [24342](https://github.com/apache/superset/pull/24342): Removed deprecated API `/superset/tables/<int:db_id>/<schema>/...`
|
||||
- [24335](https://github.com/apache/superset/pull/24335): Removed deprecated API `/superset/filter/<datasource_type>/<int:datasource_id>/<column>/`
|
||||
- [24333](https://github.com/apache/superset/pull/24333): Removed deprecated API `/superset/datasources`
|
||||
- [24266](https://github.com/apache/superset/pull/24266) Remove the `ENABLE_ACCESS_REQUEST` config parameter and the associated request/approval workflows.
|
||||
- [24330](https://github.com/apache/superset/pull/24330) Removes `getUiOverrideRegistry` from `ExtensionsRegistry`.
|
||||
- [23933](https://github.com/apache/superset/pull/23933) Removes the deprecated Multiple Line Charts.
|
||||
- [23741](https://github.com/apache/superset/pull/23741) Migrates the TreeMap chart and removes the legacy Treemap code.
|
||||
- [23712](https://github.com/apache/superset/pull/23712) Migrates the Pivot Table v1 chart to v2 and removes v1 code.
|
||||
- [24029](https://github.com/apache/superset/pull/24029) Removes the `user` and `username` arguments for the `QUERY_LOGGER` and `SQL_QUERY_MUTATOR` methods respectively. If the username for the current user is required, the `superset.utils.core.get_username` method should be used.
|
||||
- [24128](https://github.com/apache/superset/pull/24128) The `RLS_BASE_RELATED_FIELD_FILTERS` config parameter has been removed. Now the Tables dropdown will feature the same tables that the user is able to see elsewhere in the application using the standard `DatasourceFilter`, and the Roles dropdown will be filtered using the filter defined in `EXTRA_RELATED_QUERY_FILTERS["role"]`.
|
||||
- [23785](https://github.com/apache/superset/pull/23785) Deprecated the following feature flags: `CLIENT_CACHE`, `DASHBOARD_CACHE`, `DASHBOARD_FILTERS_EXPERIMENTAL`, `DASHBOARD_NATIVE_FILTERS`, `DASHBOARD_NATIVE_FILTERS_SET`, `DISABLE_DATASET_SOURCE_EDIT`, `ENABLE_EXPLORE_JSON_CSRF_PROTECTION`, `REMOVE_SLICE_LEVEL_LABEL_COLORS`. It also removed `DASHBOARD_EDIT_CHART_IN_NEW_TAB` as the feature is supported without the need for a feature flag.
|
||||
- [22801](https://github.com/apache/superset/pull/22801): The Thumbnails feature has been changed to execute as the currently logged in user by default, falling back to the selenium user for anonymous users. To continue always using the selenium user, please add the following to your `superset_config.py`: `THUMBNAILS_EXECUTE_AS = ["selenium"]`
|
||||
- [22799](https://github.com/apache/superset/pull/22799): Alerts & Reports has been changed to execute as the owner of the alert/report by default, giving priority to the last modifier and then the creator if either is contained within the list of owners, otherwise the first owner will be used. To continue using the selenium user, please add the following to your `superset_config.py`: `ALERT_REPORTS_EXECUTE_AS = ["selenium"]`
|
||||
- [23651](https://github.com/apache/superset/pull/23651): Removes UX_BETA feature flag.
|
||||
- [23663](https://github.com/apache/superset/pull/23663): Removes deprecated feature flags `ALLOW_DASHBOARD_DOMAIN_SHARDING`, `DISPLAY_MARKDOWN_HTML`, and `FORCE_DATABASE_CONNECTIONS_SSL`.
|
||||
- [22325](https://github.com/apache/superset/pull/22325): "RLS_FORM_QUERY_REL_FIELDS" is replaced by "RLS_BASE_RELATED_FIELD_FILTERS" feature flag. Its value format stays same.
|
||||
|
||||
## 2.1.1
|
||||
|
||||
- [24185](https://github.com/apache/superset/pull/24185): `/api/v1/database/test_connection` and `api/v1/database/validate_parameters` permissions changed from `can_read` to `can_write`. Only Admin user's have access.
|
||||
|
||||
### Other
|
||||
|
||||
- [23888](https://github.com/apache/superset/pull/23888): Database Migration for json serialization instead of pickle should upgrade/downgrade correctly when bumping to/from this patch version
|
||||
|
||||
## 2.1.0
|
||||
@@ -52,8 +146,6 @@ assists people when migrating to a new version.
|
||||
- [22328](https://github.com/apache/superset/pull/22328): For deployments that have enabled the "THUMBNAILS" feature flag, the function that calculates dashboard digests has been updated to consider additional properties to more accurately identify changes in the dashboard metadata. This change will invalidate all currently cached dashboard thumbnails.
|
||||
- [21765](https://github.com/apache/superset/pull/21765): For deployments that have enabled the "ALERT_REPORTS" feature flag, Gamma users will no longer have read and write access to Alerts & Reports by default. To give Gamma users the ability to schedule reports from the Dashboard and Explore view like before, create an additional role with "can read on ReportSchedule" and "can write on ReportSchedule" permissions. To further give Gamma users access to the "Alerts & Reports" menu and CRUD view, add "menu access on Manage" and "menu access on Alerts & Report" permissions to the role.
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
### Potential Downtime
|
||||
|
||||
- [21284](https://github.com/apache/superset/pull/21284): A change which drops the unused `dbs.allow_multi_schema_metadata_fetch` column via a (potentially locking) DDL operation.
|
||||
@@ -62,11 +154,9 @@ assists people when migrating to a new version.
|
||||
|
||||
- [23118](https://github.com/apache/superset/pull/23118): Previously the "database access on <database>" permission granted access to all datasets on the underlying database, but they didn't show up on the list views. Now all dashboards, charts and datasets that are accessible via this permission will also show up on their respective list views.
|
||||
|
||||
|
||||
|
||||
## 2.0.1
|
||||
|
||||
- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by Github. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
|
||||
- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by GitHub. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
@@ -87,8 +177,8 @@ assists people when migrating to a new version.
|
||||
- [19770](https://github.com/apache/superset/pull/19770): Per [SIP-11](https://github.com/apache/superset/issues/6032) and [SIP-68](https://github.com/apache/superset/issues/14909), the native NoSQL Druid connector is deprecated and has been removed. Druid is still supported through SQLAlchemy via pydruid. The config keys `DRUID_IS_ACTIVE` and `DRUID_METADATA_LINKS_ENABLED` have also been removed.
|
||||
- [19274](https://github.com/apache/superset/pull/19274): The `PUBLIC_ROLE_LIKE_GAMMA` config key has been removed, set `PUBLIC_ROLE_LIKE = "Gamma"` to have the same functionality.
|
||||
- [19273](https://github.com/apache/superset/pull/19273): The `SUPERSET_CELERY_WORKERS` and `SUPERSET_WORKERS` config keys has been removed. Configure Celery directly using `CELERY_CONFIG` on Superset.
|
||||
- [19231](https://github.com/apache/superset/pull/19231): The `ENABLE_REACT_CRUD_VIEWS` feature flag has been removed (premantly enabled). Any deployments which had set this flag to false will need to verify that the React views support their use case.
|
||||
- [19230](https://github.com/apache/superset/pull/19230): The `ROW_LEVEL_SECURITY` feature flag has been removed (permantly enabled). Any deployments which had set this flag to false will need to verify that the presence of the Row Level Security feature does not interfere with their use case.
|
||||
- [19231](https://github.com/apache/superset/pull/19231): The `ENABLE_REACT_CRUD_VIEWS` feature flag has been removed (permanently enabled). Any deployments which had set this flag to false will need to verify that the React views support their use case.
|
||||
- [19230](https://github.com/apache/superset/pull/19230): The `ROW_LEVEL_SECURITY` feature flag has been removed (permanently enabled). Any deployments which had set this flag to false will need to verify that the presence of the Row Level Security feature does not interfere with their use case.
|
||||
- [19168](https://github.com/apache/superset/pull/19168): Celery upgrade to 5.X resulted in breaking changes to its command line invocation. Please follow [these](https://docs.celeryq.dev/en/stable/whatsnew-5.2.html#step-1-adjust-your-command-line-invocation) instructions for adjustments. Also consider migrating you Celery config per [here](https://docs.celeryq.dev/en/stable/userguide/configuration.html#conf-old-settings-map).
|
||||
- [19142](https://github.com/apache/superset/pull/19142): The `VERSIONED_EXPORT` config key is now `True` by default.
|
||||
- [19113](https://github.com/apache/superset/pull/19113): The `ENABLE_JAVASCRIPT_CONTROLS` config key has moved from an app config to a feature flag. Any deployments who overrode this setting will now need to override the feature flag from here onward.
|
||||
@@ -103,7 +193,7 @@ assists people when migrating to a new version.
|
||||
### Other
|
||||
|
||||
- [22022](https://github.com/apache/superset/pull/22022): HTTP API endpoints `/superset/approve` and `/superset/request_access` have been deprecated and their HTTP methods were changed from GET to POST
|
||||
- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by Github. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
|
||||
- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by GitHub. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
|
||||
|
||||
## 1.5.2
|
||||
|
||||
@@ -195,7 +285,7 @@ assists people when migrating to a new version.
|
||||
### Other
|
||||
|
||||
- [13772](https://github.com/apache/superset/pull/13772): Row level security (RLS) is now enabled by default. To activate the feature, please run `superset init` to expose the RLS menus to Admin users.
|
||||
- [13980](https://github.com/apache/superset/pull/13980): Data health checks no longer use the metadata database as an interim cache. Though non-breaking, deployments which implement complex logic should likely memoize the callback function. Refer to documentation in the confg.py file for more detail.
|
||||
- [13980](https://github.com/apache/superset/pull/13980): Data health checks no longer use the metadata database as an interim cache. Though non-breaking, deployments which implement complex logic should likely memoize the callback function. Refer to documentation in the config.py file for more detail.
|
||||
- [14255](https://github.com/apache/superset/pull/14255): The default `CSV_TO_HIVE_UPLOAD_DIRECTORY_FUNC` callable logic has been updated to leverage the specified database and schema to ensure the upload S3 key prefix is unique. Previously tables generated via upload from CSV with the same name but differ schema and/or cluster would use the same S3 key prefix. Note this change does not impact previously imported tables.
|
||||
|
||||
## 1.1.0
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
|
||||
x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
|
||||
x-superset-depends-on: &superset-depends-on
|
||||
- db
|
||||
- redis
|
||||
x-superset-volumes: &superset-volumes
|
||||
# /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
|
||||
x-superset-volumes:
|
||||
&superset-volumes # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
|
||||
- ./docker:/app/docker
|
||||
- superset_home:/app/superset_home
|
||||
|
||||
@@ -34,11 +34,12 @@ services:
|
||||
|
||||
db:
|
||||
env_file: docker/.env-non-dev
|
||||
image: postgres:14
|
||||
image: postgres:15
|
||||
container_name: superset_db
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- db_home:/var/lib/postgresql/data
|
||||
- ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
|
||||
|
||||
superset:
|
||||
env_file: docker/.env-non-dev
|
||||
@@ -73,7 +74,11 @@ services:
|
||||
user: "root"
|
||||
volumes: *superset-volumes
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "celery inspect ping -A superset.tasks.celery_app:app -d celery@$$HOSTNAME"]
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"celery -A superset.tasks.celery_app:app inspect ping -d celery@$$HOSTNAME",
|
||||
]
|
||||
|
||||
superset-worker-beat:
|
||||
image: *superset-image
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
|
||||
x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
|
||||
x-superset-user: &superset-user root
|
||||
x-superset-depends-on: &superset-depends-on
|
||||
- db
|
||||
@@ -29,6 +29,16 @@ x-superset-volumes: &superset-volumes
|
||||
|
||||
version: "3.7"
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:latest
|
||||
container_name: superset_nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
volumes:
|
||||
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
redis:
|
||||
image: redis:7
|
||||
container_name: superset_cache
|
||||
@@ -40,13 +50,14 @@ services:
|
||||
|
||||
db:
|
||||
env_file: docker/.env
|
||||
image: postgres:14
|
||||
image: postgres:15
|
||||
container_name: superset_db
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "127.0.0.1:5432:5432"
|
||||
volumes:
|
||||
- db_home:/var/lib/postgresql/data
|
||||
- ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
|
||||
|
||||
superset:
|
||||
env_file: docker/.env
|
||||
@@ -56,6 +67,8 @@ services:
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8088:8088
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
user: *superset-user
|
||||
depends_on: *superset-depends-on
|
||||
volumes: *superset-volumes
|
||||
@@ -68,6 +81,8 @@ services:
|
||||
image: superset-websocket
|
||||
ports:
|
||||
- 8080:8080
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
depends_on:
|
||||
- redis
|
||||
# Mount everything in superset-websocket into container and
|
||||
@@ -75,7 +90,7 @@ services:
|
||||
# This is necessary because host and container need to have
|
||||
# their own, separate versions of these files. .dockerignore
|
||||
# does not seem to work when starting the service through
|
||||
# docker-compose.
|
||||
# docker compose.
|
||||
#
|
||||
# For example, node_modules may contain libs with native bindings.
|
||||
# Those bindings need to be compiled for each OS and the container
|
||||
@@ -109,6 +124,8 @@ services:
|
||||
command: ["/app/docker/docker-frontend.sh"]
|
||||
env_file: docker/.env
|
||||
depends_on: *superset-depends-on
|
||||
environment:
|
||||
SCARF_ANALYTICS: "${SCARF_ANALYTICS}"
|
||||
volumes: *superset-volumes
|
||||
|
||||
superset-worker:
|
||||
@@ -120,8 +137,10 @@ services:
|
||||
depends_on: *superset-depends-on
|
||||
user: *superset-user
|
||||
volumes: *superset-volumes
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "celery inspect ping -A superset.tasks.celery_app:app -d celery@$$HOSTNAME"]
|
||||
test: ["CMD-SHELL", "celery -A superset.tasks.celery_app:app inspect ping -d celery@$$HOSTNAME"]
|
||||
# Bump memory limit if processing selenium / thumbnails on superset-worker
|
||||
# mem_limit: 2038m
|
||||
# mem_reservation: 128M
|
||||
|
||||
@@ -22,6 +22,12 @@ DATABASE_HOST=db
|
||||
DATABASE_PASSWORD=superset
|
||||
DATABASE_USER=superset
|
||||
|
||||
EXAMPLES_DB=examples
|
||||
EXAMPLES_HOST=db
|
||||
EXAMPLES_USER=examples
|
||||
EXAMPLES_PASSWORD=examples
|
||||
EXAMPLES_PORT=5432
|
||||
|
||||
# database engine specific environment variables
|
||||
# change the below if you prefer another database engine
|
||||
DATABASE_PORT=5432
|
||||
@@ -39,7 +45,7 @@ PYTHONPATH=/app/pythonpath:/app/docker/pythonpath_dev
|
||||
REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
|
||||
FLASK_ENV=development
|
||||
FLASK_DEBUG=true
|
||||
SUPERSET_ENV=development
|
||||
SUPERSET_LOAD_EXAMPLES=yes
|
||||
CYPRESS_CONFIG=false
|
||||
|
||||
@@ -21,11 +21,17 @@ DATABASE_DB=superset
|
||||
DATABASE_HOST=db
|
||||
DATABASE_PASSWORD=superset
|
||||
DATABASE_USER=superset
|
||||
DATABASE_PORT=5432
|
||||
DATABASE_DIALECT=postgresql
|
||||
|
||||
EXAMPLES_DB=examples
|
||||
EXAMPLES_HOST=db
|
||||
EXAMPLES_USER=examples
|
||||
EXAMPLES_PASSWORD=examples
|
||||
EXAMPLES_PORT=5432
|
||||
|
||||
# database engine specific environment variables
|
||||
# change the below if you prefer another database engine
|
||||
DATABASE_PORT=5432
|
||||
DATABASE_DIALECT=postgresql
|
||||
POSTGRES_DB=superset
|
||||
POSTGRES_USER=superset
|
||||
POSTGRES_PASSWORD=superset
|
||||
@@ -39,7 +45,6 @@ PYTHONPATH=/app/pythonpath:/app/docker/pythonpath_dev
|
||||
REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
|
||||
FLASK_ENV=production
|
||||
SUPERSET_ENV=production
|
||||
SUPERSET_LOAD_EXAMPLES=yes
|
||||
SUPERSET_SECRET_KEY=TEST_NON_DEV_SECRET
|
||||
|
||||
@@ -46,9 +46,9 @@ Steps:
|
||||
|
||||
1. Create `./docker/requirements-local.txt`
|
||||
2. Add your new packages
|
||||
3. Rebuild docker-compose
|
||||
1. `docker-compose down -v`
|
||||
2. `docker-compose up`
|
||||
3. Rebuild docker compose
|
||||
1. `docker compose down -v`
|
||||
2. `docker compose up`
|
||||
|
||||
## Initializing Database
|
||||
|
||||
@@ -56,7 +56,7 @@ The database will initialize itself upon startup via the init container ([`super
|
||||
|
||||
## Normal Operation
|
||||
|
||||
To run the container, simply run: `docker-compose up`
|
||||
To run the container, simply run: `docker compose up`
|
||||
|
||||
After waiting several minutes for Superset initialization to finish, you can open a browser and view [`http://localhost:8088`](http://localhost:8088)
|
||||
to start your journey.
|
||||
|
||||
@@ -30,21 +30,38 @@ fi
|
||||
#
|
||||
if [ -f "${REQUIREMENTS_LOCAL}" ]; then
|
||||
echo "Installing local overrides at ${REQUIREMENTS_LOCAL}"
|
||||
pip install -r "${REQUIREMENTS_LOCAL}"
|
||||
pip install --no-cache-dir -r "${REQUIREMENTS_LOCAL}"
|
||||
else
|
||||
echo "Skipping local overrides"
|
||||
fi
|
||||
|
||||
if [[ "${1}" == "worker" ]]; then
|
||||
echo "Starting Celery worker..."
|
||||
celery --app=superset.tasks.celery_app:app worker -O fair -l INFO
|
||||
elif [[ "${1}" == "beat" ]]; then
|
||||
echo "Starting Celery beat..."
|
||||
celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid -l INFO -s "${SUPERSET_HOME}"/celerybeat-schedule
|
||||
elif [[ "${1}" == "app" ]]; then
|
||||
echo "Starting web app..."
|
||||
flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0
|
||||
elif [[ "${1}" == "app-gunicorn" ]]; then
|
||||
echo "Starting web app..."
|
||||
/usr/bin/run-server.sh
|
||||
#
|
||||
# playwright is an optional package - run only if it is installed
|
||||
#
|
||||
if command -v playwright > /dev/null 2>&1; then
|
||||
playwright install-deps
|
||||
playwright install chromium
|
||||
fi
|
||||
|
||||
case "${1}" in
|
||||
worker)
|
||||
echo "Starting Celery worker..."
|
||||
celery --app=superset.tasks.celery_app:app worker -O fair -l INFO
|
||||
;;
|
||||
beat)
|
||||
echo "Starting Celery beat..."
|
||||
rm -f /tmp/celerybeat.pid
|
||||
celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid -l INFO -s "${SUPERSET_HOME}"/celerybeat-schedule
|
||||
;;
|
||||
app)
|
||||
echo "Starting web app (using development server)..."
|
||||
flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0
|
||||
;;
|
||||
app-gunicorn)
|
||||
echo "Starting web app..."
|
||||
/usr/bin/run-server.sh
|
||||
;;
|
||||
*)
|
||||
echo "Unknown Operation!!!"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# ------------------------------------------------------------------------
|
||||
# Creates the examples database and respective user. This database location
|
||||
# and access credentials are defined on the environment variables
|
||||
# ------------------------------------------------------------------------
|
||||
set -e
|
||||
|
||||
psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" <<-EOSQL
|
||||
CREATE USER ${EXAMPLES_USER} WITH PASSWORD '${EXAMPLES_PASSWORD}';
|
||||
CREATE DATABASE ${EXAMPLES_DB};
|
||||
GRANT ALL PRIVILEGES ON DATABASE ${EXAMPLES_DB} TO ${EXAMPLES_USER};
|
||||
EOSQL
|
||||
|
||||
psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" -d "${EXAMPLES_DB}" <<-EOSQL
|
||||
GRANT ALL ON SCHEMA public TO ${EXAMPLES_USER};
|
||||
EOSQL
|
||||
@@ -0,0 +1,127 @@
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
user nginx;
|
||||
worker_processes 1;
|
||||
|
||||
error_log /var/log/nginx/error.log warn;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent [$connection_requests] "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
|
||||
sendfile on;
|
||||
#tcp_nopush on;
|
||||
|
||||
keepalive_timeout 30;
|
||||
keepalive_requests 2;
|
||||
|
||||
###### Compression Stuff
|
||||
|
||||
# Enable Gzip compressed.
|
||||
gzip on;
|
||||
|
||||
# Compression level (1-9).
|
||||
# 5 is a perfect compromise between size and cpu usage, offering about
|
||||
# 75% reduction for most ascii files (almost identical to level 9).
|
||||
gzip_comp_level 5;
|
||||
|
||||
# Don't compress anything that's already small and unlikely to shrink much
|
||||
# if at all (the default is 20 bytes, which is bad as that usually leads to
|
||||
# larger files after gzipping).
|
||||
gzip_min_length 256;
|
||||
|
||||
# Compress data even for clients that are connecting to us via proxies,
|
||||
# identified by the "Via" header (required for CloudFront).
|
||||
gzip_proxied any;
|
||||
|
||||
# Tell proxies to cache both the gzipped and regular version of a resource
|
||||
# whenever the client's Accept-Encoding capabilities header varies;
|
||||
# Avoids the issue where a non-gzip capable client (which is extremely rare
|
||||
# today) would display gibberish if their proxy gave them the gzipped version.
|
||||
gzip_vary on;
|
||||
|
||||
# Compress all output labeled with one of the following MIME-types.
|
||||
gzip_types
|
||||
application/atom+xml
|
||||
application/javascript
|
||||
application/json
|
||||
application/rss+xml
|
||||
application/vnd.ms-fontobject
|
||||
application/x-font-ttf
|
||||
application/x-web-app-manifest+json
|
||||
application/xhtml+xml
|
||||
application/xml
|
||||
font/opentype
|
||||
image/svg+xml
|
||||
image/x-icon
|
||||
text/css
|
||||
text/plain
|
||||
text/x-component;
|
||||
# text/html is always compressed by HttpGzipModule
|
||||
|
||||
output_buffers 20 10m;
|
||||
|
||||
client_max_body_size 10m;
|
||||
|
||||
upstream superset_app {
|
||||
server host.docker.internal:8088;
|
||||
keepalive 100;
|
||||
}
|
||||
|
||||
upstream superset_websocket {
|
||||
server host.docker.internal:8080;
|
||||
keepalive 100;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80 default_server;
|
||||
server_name _;
|
||||
|
||||
location /ws {
|
||||
proxy_pass http://superset_websocket;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://superset_app;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_http_version 1.1;
|
||||
port_in_redirect off;
|
||||
proxy_connect_timeout 300;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,55 +22,47 @@
|
||||
#
|
||||
import logging
|
||||
import os
|
||||
from datetime import timedelta
|
||||
from typing import Optional
|
||||
|
||||
from cachelib.file import FileSystemCache
|
||||
from celery.schedules import crontab
|
||||
from flask_caching.backends.filesystemcache import FileSystemCache
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
DATABASE_DIALECT = os.getenv("DATABASE_DIALECT")
|
||||
DATABASE_USER = os.getenv("DATABASE_USER")
|
||||
DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD")
|
||||
DATABASE_HOST = os.getenv("DATABASE_HOST")
|
||||
DATABASE_PORT = os.getenv("DATABASE_PORT")
|
||||
DATABASE_DB = os.getenv("DATABASE_DB")
|
||||
|
||||
def get_env_variable(var_name: str, default: Optional[str] = None) -> str:
|
||||
"""Get the environment variable or raise exception."""
|
||||
try:
|
||||
return os.environ[var_name]
|
||||
except KeyError:
|
||||
if default is not None:
|
||||
return default
|
||||
else:
|
||||
error_msg = "The environment variable {} was missing, abort...".format(
|
||||
var_name
|
||||
)
|
||||
raise EnvironmentError(error_msg)
|
||||
|
||||
|
||||
DATABASE_DIALECT = get_env_variable("DATABASE_DIALECT")
|
||||
DATABASE_USER = get_env_variable("DATABASE_USER")
|
||||
DATABASE_PASSWORD = get_env_variable("DATABASE_PASSWORD")
|
||||
DATABASE_HOST = get_env_variable("DATABASE_HOST")
|
||||
DATABASE_PORT = get_env_variable("DATABASE_PORT")
|
||||
DATABASE_DB = get_env_variable("DATABASE_DB")
|
||||
EXAMPLES_USER = os.getenv("EXAMPLES_USER")
|
||||
EXAMPLES_PASSWORD = os.getenv("EXAMPLES_PASSWORD")
|
||||
EXAMPLES_HOST = os.getenv("EXAMPLES_HOST")
|
||||
EXAMPLES_PORT = os.getenv("EXAMPLES_PORT")
|
||||
EXAMPLES_DB = os.getenv("EXAMPLES_DB")
|
||||
|
||||
# The SQLAlchemy connection string.
|
||||
SQLALCHEMY_DATABASE_URI = "%s://%s:%s@%s:%s/%s" % (
|
||||
DATABASE_DIALECT,
|
||||
DATABASE_USER,
|
||||
DATABASE_PASSWORD,
|
||||
DATABASE_HOST,
|
||||
DATABASE_PORT,
|
||||
DATABASE_DB,
|
||||
SQLALCHEMY_DATABASE_URI = (
|
||||
f"{DATABASE_DIALECT}://"
|
||||
f"{DATABASE_USER}:{DATABASE_PASSWORD}@"
|
||||
f"{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_DB}"
|
||||
)
|
||||
|
||||
REDIS_HOST = get_env_variable("REDIS_HOST")
|
||||
REDIS_PORT = get_env_variable("REDIS_PORT")
|
||||
REDIS_CELERY_DB = get_env_variable("REDIS_CELERY_DB", "0")
|
||||
REDIS_RESULTS_DB = get_env_variable("REDIS_RESULTS_DB", "1")
|
||||
SQLALCHEMY_EXAMPLES_URI = (
|
||||
f"{DATABASE_DIALECT}://"
|
||||
f"{EXAMPLES_USER}:{EXAMPLES_PASSWORD}@"
|
||||
f"{EXAMPLES_HOST}:{EXAMPLES_PORT}/{EXAMPLES_DB}"
|
||||
)
|
||||
|
||||
REDIS_HOST = os.getenv("REDIS_HOST", "redis")
|
||||
REDIS_PORT = os.getenv("REDIS_PORT", "6379")
|
||||
REDIS_CELERY_DB = os.getenv("REDIS_CELERY_DB", "0")
|
||||
REDIS_RESULTS_DB = os.getenv("REDIS_RESULTS_DB", "1")
|
||||
|
||||
RESULTS_BACKEND = FileSystemCache("/app/superset_home/sqllab")
|
||||
|
||||
CACHE_CONFIG = {
|
||||
"CACHE_TYPE": "redis",
|
||||
"CACHE_TYPE": "RedisCache",
|
||||
"CACHE_DEFAULT_TIMEOUT": 300,
|
||||
"CACHE_KEY_PREFIX": "superset_",
|
||||
"CACHE_REDIS_HOST": REDIS_HOST,
|
||||
@@ -80,7 +72,7 @@ CACHE_CONFIG = {
|
||||
DATA_CACHE_CONFIG = CACHE_CONFIG
|
||||
|
||||
|
||||
class CeleryConfig(object):
|
||||
class CeleryConfig:
|
||||
broker_url = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CELERY_DB}"
|
||||
imports = ("superset.sql_lab",)
|
||||
result_backend = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_RESULTS_DB}"
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
FROM alpine:latest
|
||||
|
||||
ARG DOCKERIZE_VERSION=v0.7.0
|
||||
|
||||
RUN apk update --no-cache \
|
||||
&& apk add --no-cache wget openssl \
|
||||
&& case "$(apk --print-arch)" in \
|
||||
x86_64) ARCH=amd64 ;; \
|
||||
aarch64) ARCH=arm64 ;; \
|
||||
esac \
|
||||
&& wget -O - https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-${ARCH}-${DOCKERIZE_VERSION}.tar.gz | tar xzf - -C /usr/local/bin \
|
||||
&& apk del wget
|
||||
|
||||
USER 10001
|
||||
@@ -18,3 +18,5 @@
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
docs/.zshrc
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: API
|
||||
hide_title: true
|
||||
sidebar_position: 9
|
||||
sidebar_position: 10
|
||||
---
|
||||
|
||||
import { Buffer } from 'buffer';
|
||||
@@ -15,7 +15,7 @@ import { Alert } from 'antd';
|
||||
|
||||
Superset's public **REST API** follows the
|
||||
[OpenAPI specification](https://swagger.io/specification/), and is
|
||||
documented here. The docs bellow are generated using
|
||||
documented here. The docs below are generated using
|
||||
[Swagger React UI](https://www.npmjs.com/package/swagger-ui-react).
|
||||
|
||||
<Alert
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"label": "Contributing",
|
||||
"position": 6
|
||||
"position": 7
|
||||
}
|
||||
|
||||