mirror of
https://github.com/apache/superset.git
synced 2026-05-05 07:54:17 +00:00
Compare commits
1981 Commits
remove-mor
...
semantic-l
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0ade0915d0 | ||
|
|
3596ef304e | ||
|
|
acb8b63023 | ||
|
|
b9ab0ced77 | ||
|
|
bfbb68c3c8 | ||
|
|
b437421a8e | ||
|
|
e253bd2fb3 | ||
|
|
bfb7048e42 | ||
|
|
2833b69ca0 | ||
|
|
6e17714a19 | ||
|
|
8a0aaa42ec | ||
|
|
af479a9d99 | ||
|
|
77f60f42e6 | ||
|
|
f0121a166e | ||
|
|
0c4b0cb9b9 | ||
|
|
a36bbf8ffd | ||
|
|
99525c1ce9 | ||
|
|
889e9bbade | ||
|
|
b809a990ee | ||
|
|
9c7fcbf548 | ||
|
|
046aabee73 | ||
|
|
b672c7b853 | ||
|
|
ea33d797a7 | ||
|
|
ab8352ee66 | ||
|
|
bf2cef7d87 | ||
|
|
a6b6eb4ab3 | ||
|
|
cac6ffcd3c | ||
|
|
08c1d03479 | ||
|
|
a2267d869b | ||
|
|
e303537e0c | ||
|
|
a0c29cc260 | ||
|
|
e7c54376e2 | ||
|
|
9d40c24a16 | ||
|
|
e6b258f418 | ||
|
|
02bbc7c7de | ||
|
|
348b19cb4c | ||
|
|
979d385eea | ||
|
|
71c015c579 | ||
|
|
7805666103 | ||
|
|
be0283b9f2 | ||
|
|
e68150c3ce | ||
|
|
92d8139136 | ||
|
|
35f156a1e1 | ||
|
|
6d359161bb | ||
|
|
53207302f9 | ||
|
|
05d10d8e77 | ||
|
|
f5b79c3623 | ||
|
|
9f55287672 | ||
|
|
69fc7f6852 | ||
|
|
cdbd5bf4f9 | ||
|
|
d0bf1cca60 | ||
|
|
66afdfd119 | ||
|
|
4582f0e8d2 | ||
|
|
21f85a4145 | ||
|
|
53b9045943 | ||
|
|
a268232ed6 | ||
|
|
43e9e1ec36 | ||
|
|
80ec241108 | ||
|
|
8315804c85 | ||
|
|
a9fd600c52 | ||
|
|
b5cac47ba7 | ||
|
|
d91d81b5df | ||
|
|
225886e859 | ||
|
|
cc1d22012c | ||
|
|
fb325a8f24 | ||
|
|
f8943c17c2 | ||
|
|
28bdec2c79 | ||
|
|
6fc7af5ba8 | ||
|
|
3b226038ba | ||
|
|
9d06a5888f | ||
|
|
fb7d0e0e3d | ||
|
|
282f4e5de2 | ||
|
|
9bff64824b | ||
|
|
6723a58780 | ||
|
|
519990e2fb | ||
|
|
fb8eb2a5c3 | ||
|
|
962faa2196 | ||
|
|
dad469297c | ||
|
|
85413f2a65 | ||
|
|
9605a4a9cb | ||
|
|
c2baba50f9 | ||
|
|
c955a5dc08 | ||
|
|
e6a5616543 | ||
|
|
001b6cb801 | ||
|
|
f3e620cd0f | ||
|
|
9ef87e75d5 | ||
|
|
f8933c2743 | ||
|
|
b051f779e6 | ||
|
|
37d58a476c | ||
|
|
78f9debdd4 | ||
|
|
74a590cb76 | ||
|
|
4a04d46118 | ||
|
|
467b008f36 | ||
|
|
6701d0ae0c | ||
|
|
4515d18ddd | ||
|
|
60f29ba6fb | ||
|
|
306f4c14cf | ||
|
|
310dcd7b94 | ||
|
|
008c7c6517 | ||
|
|
c244e7f847 | ||
|
|
bb2e2a5ed6 | ||
|
|
a45c0528da | ||
|
|
0b535b792e | ||
|
|
9fbfcf0ccd | ||
|
|
d123249bd2 | ||
|
|
4376476ec4 | ||
|
|
9be61a1245 | ||
|
|
e2e831e322 | ||
|
|
21d585d586 | ||
|
|
0a5144fc1d | ||
|
|
64ca080bb8 | ||
|
|
b85621e9a7 | ||
|
|
e915d7d1d0 | ||
|
|
ae63f64771 | ||
|
|
63dfd95aa2 | ||
|
|
c9f65cf1c2 | ||
|
|
c42e3c6837 | ||
|
|
3167a0dbc0 | ||
|
|
909bd877c9 | ||
|
|
4d0fdba97a | ||
|
|
d2550a525b | ||
|
|
258512fef2 | ||
|
|
9546ee37e5 | ||
|
|
728bc2c632 | ||
|
|
0307c71945 | ||
|
|
208b1f7fa3 | ||
|
|
2f2128ac48 | ||
|
|
c11be72ead | ||
|
|
f5f5913a29 | ||
|
|
af37e12de4 | ||
|
|
0827ff7687 | ||
|
|
3765c31163 | ||
|
|
84a1abd357 | ||
|
|
14f20e644e | ||
|
|
1f960d5761 | ||
|
|
32099d8f49 | ||
|
|
392b880b52 | ||
|
|
3f49938b79 | ||
|
|
a1d4dff99d | ||
|
|
04231c86db | ||
|
|
7265567561 | ||
|
|
0d70373d95 | ||
|
|
53687ae659 | ||
|
|
46db8b7803 | ||
|
|
7cd04c088c | ||
|
|
51b4df7a1f | ||
|
|
b92b725fe2 | ||
|
|
1c1d1ddbec | ||
|
|
5224347c39 | ||
|
|
27011d0239 | ||
|
|
bae2c90bae | ||
|
|
ae1f0bb107 | ||
|
|
405ed2e736 | ||
|
|
17299e469a | ||
|
|
3c43ce4e06 | ||
|
|
00a6772507 | ||
|
|
be3690c22b | ||
|
|
d1f9c77afd | ||
|
|
fee4e7d8e2 | ||
|
|
30d584afd1 | ||
|
|
0a95f74f11 | ||
|
|
6e27bee2ca | ||
|
|
f6f15f58ee | ||
|
|
6f50ddf710 | ||
|
|
5fc934d859 | ||
|
|
8ccdf3b32b | ||
|
|
a5eb02d178 | ||
|
|
dd857a2c7a | ||
|
|
2013963e0b | ||
|
|
48ee0821d3 | ||
|
|
99b61143f6 | ||
|
|
2db19008fb | ||
|
|
514d56d1ae | ||
|
|
5c57c9c0b2 | ||
|
|
7733265fa2 | ||
|
|
61c68f7b8f | ||
|
|
5218b4eea2 | ||
|
|
e1455057e7 | ||
|
|
7a759c903b | ||
|
|
61758c07d2 | ||
|
|
bf830b2dd5 | ||
|
|
6704c0aaec | ||
|
|
6e60a00d69 | ||
|
|
0bf34d4d6f | ||
|
|
19473af401 | ||
|
|
51aad52e6c | ||
|
|
3d2ed363aa | ||
|
|
cc6a5dc29a | ||
|
|
7c9720e22b | ||
|
|
c3b8c96db6 | ||
|
|
93cb60b24e | ||
|
|
5e4a80e5d0 | ||
|
|
79918a7939 | ||
|
|
d09421230b | ||
|
|
1234533c67 | ||
|
|
7f0c0aea94 | ||
|
|
d9dcbb68b7 | ||
|
|
98fba1eefe | ||
|
|
bad03b1e76 | ||
|
|
fcfafebb29 | ||
|
|
47e82b02ed | ||
|
|
a463d66c80 | ||
|
|
337da13ba7 | ||
|
|
4a3453999a | ||
|
|
58758de93d | ||
|
|
b4a8acc584 | ||
|
|
08f89690e9 | ||
|
|
f02899d38d | ||
|
|
86583f1121 | ||
|
|
26cbd71099 | ||
|
|
500ce7a02a | ||
|
|
6d8ceed10e | ||
|
|
68d65f727f | ||
|
|
f165785003 | ||
|
|
8e31c93119 | ||
|
|
4974c08f7d | ||
|
|
fa90ba976c | ||
|
|
35c3d8dfbc | ||
|
|
ee23815aff | ||
|
|
7c946ae3db | ||
|
|
3926f5c55c | ||
|
|
fdc03d4bf3 | ||
|
|
24f0aed8a7 | ||
|
|
00d2f577df | ||
|
|
c35fc71bc5 | ||
|
|
1b6d57c3f3 | ||
|
|
d089a96163 | ||
|
|
0b3fe3d60c | ||
|
|
0eeb184b6a | ||
|
|
8e7edce616 | ||
|
|
754201b3d0 | ||
|
|
925401b4e1 | ||
|
|
8368ea4094 | ||
|
|
e8a6fb24ae | ||
|
|
311b7a72dc | ||
|
|
aa496def53 | ||
|
|
aea4375255 | ||
|
|
9ab0a0179d | ||
|
|
3db613dab5 | ||
|
|
de5ca79805 | ||
|
|
aede3bb5ba | ||
|
|
408f84aea6 | ||
|
|
92c07aaf54 | ||
|
|
f405174fcf | ||
|
|
8c125d2553 | ||
|
|
fb8fca4c64 | ||
|
|
dc0c055518 | ||
|
|
09349cb1e7 | ||
|
|
ca29adb0cb | ||
|
|
1617bbbe71 | ||
|
|
de1dd53186 | ||
|
|
58672dfab6 | ||
|
|
4b5629d1c8 | ||
|
|
4ddc3f14ed | ||
|
|
400a8aec89 | ||
|
|
51489a75ce | ||
|
|
09772eeda0 | ||
|
|
78907d08cd | ||
|
|
d0a0d280a1 | ||
|
|
5d77ed3677 | ||
|
|
f68ee6ba67 | ||
|
|
a01560cfa1 | ||
|
|
7e06ce8eeb | ||
|
|
ccc0e3dbb2 | ||
|
|
bd48e87eeb | ||
|
|
e6bd03fe98 | ||
|
|
9252d835b8 | ||
|
|
35b5f8dcdc | ||
|
|
97518544ee | ||
|
|
1c934b474a | ||
|
|
9d1d396a9b | ||
|
|
c38ba1daa8 | ||
|
|
8727d321f3 | ||
|
|
9918f8868e | ||
|
|
3dcf85caef | ||
|
|
e437ae1f2f | ||
|
|
17ebbdd966 | ||
|
|
de0bd37a66 | ||
|
|
412587ad41 | ||
|
|
941907ed4e | ||
|
|
91fbc64327 | ||
|
|
79ff093b30 | ||
|
|
ff80d4f406 | ||
|
|
c846cd187c | ||
|
|
9a43a47e6a | ||
|
|
9f2fead651 | ||
|
|
5a15c632ad | ||
|
|
3acc9aba8b | ||
|
|
8a61cdf4f2 | ||
|
|
ed47ceb1e4 | ||
|
|
4dbdb1811b | ||
|
|
d921f6d2b4 | ||
|
|
9d3fab8e4d | ||
|
|
a9630f3ec7 | ||
|
|
c2120f62cf | ||
|
|
19cf645224 | ||
|
|
6b1c058436 | ||
|
|
54b4056eb3 | ||
|
|
82e4763588 | ||
|
|
831a9a8a57 | ||
|
|
aa54da6d67 | ||
|
|
930736bdb0 | ||
|
|
668dcf4799 | ||
|
|
50a5854b25 | ||
|
|
441e043bff | ||
|
|
d383b2bf3c | ||
|
|
d7903631f5 | ||
|
|
10cb964c96 | ||
|
|
c519094313 | ||
|
|
e32c2d82a5 | ||
|
|
f7b9d7a64b | ||
|
|
89932fa0b2 | ||
|
|
a90928766b | ||
|
|
9d50f1b8a2 | ||
|
|
72464afb2e | ||
|
|
64af516dfd | ||
|
|
70cd4dd9d9 | ||
|
|
b7266e647c | ||
|
|
77c3146829 | ||
|
|
4545d55d30 | ||
|
|
a7b158c7fa | ||
|
|
d39c55e941 | ||
|
|
821173f6c4 | ||
|
|
635b7a6a4d | ||
|
|
04b1a45416 | ||
|
|
d23006ce03 | ||
|
|
8bb911bc91 | ||
|
|
249733c768 | ||
|
|
d83a938870 | ||
|
|
593e376cf2 | ||
|
|
fd4fe2c2ad | ||
|
|
281fa67b8e | ||
|
|
a8fd27aec3 | ||
|
|
139b5ae20c | ||
|
|
891f826143 | ||
|
|
0e2fb1d1a3 | ||
|
|
96170e43c0 | ||
|
|
8fde970b6b | ||
|
|
38cb577fc6 | ||
|
|
8ebe045846 | ||
|
|
62dc5c0306 | ||
|
|
6ad8d29fcd | ||
|
|
d83a88d5d9 | ||
|
|
a7cc48dcda | ||
|
|
e2a7dc9256 | ||
|
|
0364933e8b | ||
|
|
3202ff4b3f | ||
|
|
553204e613 | ||
|
|
fe8348c03a | ||
|
|
30021f8ede | ||
|
|
f3349388d0 | ||
|
|
449a89c214 | ||
|
|
5428376662 | ||
|
|
5493e2c96d | ||
|
|
2f8657f122 | ||
|
|
aa97d2fe03 | ||
|
|
28389de93e | ||
|
|
7c415c7cd9 | ||
|
|
f6b2abee81 | ||
|
|
2ef7232959 | ||
|
|
2991f60368 | ||
|
|
85ec3b1901 | ||
|
|
0c639abe17 | ||
|
|
50ed9b9e0e | ||
|
|
13a164dd63 | ||
|
|
6b0b13e4e7 | ||
|
|
c188952de2 | ||
|
|
a3b91f924d | ||
|
|
d8688cf8b1 | ||
|
|
40378afbf8 | ||
|
|
84e21434b3 | ||
|
|
d27210794c | ||
|
|
5a90a84685 | ||
|
|
6fbbc85df7 | ||
|
|
a66c230058 | ||
|
|
19db0353a9 | ||
|
|
88e5581d04 | ||
|
|
bf88d9bb1c | ||
|
|
d51b35f61b | ||
|
|
220480b627 | ||
|
|
ef78d2af06 | ||
|
|
7deed00def | ||
|
|
4e093a8e2a | ||
|
|
0b73b4842f | ||
|
|
90f281f585 | ||
|
|
d62249d13f | ||
|
|
ff102aadb3 | ||
|
|
82e2bc6181 | ||
|
|
784ff82847 | ||
|
|
027b25e6b8 | ||
|
|
b652fab042 | ||
|
|
77a5969dc1 | ||
|
|
fb9032c05c | ||
|
|
7a9dbfe879 | ||
|
|
0de78d8203 | ||
|
|
abc2d46fed | ||
|
|
927cc1cda1 | ||
|
|
7f3840557a | ||
|
|
0defcb604b | ||
|
|
94686ddfbe | ||
|
|
ec322dfd8d | ||
|
|
cb88d886c7 | ||
|
|
608e3baf43 | ||
|
|
b6f6b75348 | ||
|
|
a5ad1d186c | ||
|
|
db88d80b3f | ||
|
|
4b71adaa9c | ||
|
|
5fbda3af40 | ||
|
|
bc0c40c80e | ||
|
|
f030d658c5 | ||
|
|
e85337c543 | ||
|
|
fe7f8062f3 | ||
|
|
dce74014da | ||
|
|
619b341cad | ||
|
|
9b6876be62 | ||
|
|
c601341520 | ||
|
|
78faaee685 | ||
|
|
4027bad1d6 | ||
|
|
ce55cc7dd7 | ||
|
|
48e1b1ff2c | ||
|
|
5ec8f9d886 | ||
|
|
ecb3ac68ff | ||
|
|
076e477fd4 | ||
|
|
1e4bc6ee78 | ||
|
|
db178cf527 | ||
|
|
5901320933 | ||
|
|
23bb4f88c0 | ||
|
|
4130b92966 | ||
|
|
38297edc6b | ||
|
|
0c8f326258 | ||
|
|
127f6b3d66 | ||
|
|
ea519a77b5 | ||
|
|
6cb3ef9f5d | ||
|
|
a889ae75fc | ||
|
|
b60be9655f | ||
|
|
fd6da21ce0 | ||
|
|
1bf112a57a | ||
|
|
1f530d45cb | ||
|
|
1187902e68 | ||
|
|
ad3eff9e90 | ||
|
|
3e554674ff | ||
|
|
dced2f8564 | ||
|
|
05c6a1bf20 | ||
|
|
c193d6d6a1 | ||
|
|
fb840b8e71 | ||
|
|
d0cc6f115b | ||
|
|
966e231f94 | ||
|
|
a66737cb05 | ||
|
|
bc6859a99d | ||
|
|
133e686224 | ||
|
|
7d0a472d1e | ||
|
|
c2534f9155 | ||
|
|
088ecdd0bf | ||
|
|
e1a2e4843a | ||
|
|
15e8ffee1e | ||
|
|
19ddcb7e5c | ||
|
|
36daa2dc3f | ||
|
|
7fd5a7668b | ||
|
|
95333e34b1 | ||
|
|
a9fb853e3e | ||
|
|
dea9068647 | ||
|
|
3416bd1479 | ||
|
|
e729b2dbb4 | ||
|
|
06261f262b | ||
|
|
454ed1883f | ||
|
|
b42060c880 | ||
|
|
7bf16d805d | ||
|
|
529adebe1b | ||
|
|
eb4351af83 | ||
|
|
5a2411fa64 | ||
|
|
078c1701f4 | ||
|
|
a7d349a5c6 | ||
|
|
7a20a65a4d | ||
|
|
912ed2ba80 | ||
|
|
fedb3ca941 | ||
|
|
42b15b6840 | ||
|
|
2f64343186 | ||
|
|
65376c7baf | ||
|
|
4c2b27e7f0 | ||
|
|
15e4e8df94 | ||
|
|
c5f220a9ff | ||
|
|
b05def1a8a | ||
|
|
da7f6efea8 | ||
|
|
1c2b9db4f0 | ||
|
|
0fce5ecfa5 | ||
|
|
385471c34d | ||
|
|
bef1f4d045 | ||
|
|
5a3182ce21 | ||
|
|
9efb80dbf4 | ||
|
|
a20b236809 | ||
|
|
4e969d19d1 | ||
|
|
876257fb94 | ||
|
|
472e599f91 | ||
|
|
d826e90395 | ||
|
|
c65cb284e6 | ||
|
|
bc54b7970a | ||
|
|
ce74ae095d | ||
|
|
9424538bb1 | ||
|
|
031fb4b5a8 | ||
|
|
7fb7ac8bef | ||
|
|
569a7b33a5 | ||
|
|
59df0d6f15 | ||
|
|
2e4ccffc11 | ||
|
|
2e51d02806 | ||
|
|
8406a827dd | ||
|
|
ea0a77daaf | ||
|
|
e5e3ddb24e | ||
|
|
7320ad9a0a | ||
|
|
3dbe593a4a | ||
|
|
61f359d565 | ||
|
|
e77ff267a1 | ||
|
|
c426723275 | ||
|
|
d2a1d86561 | ||
|
|
0cd0b37983 | ||
|
|
a6b4ff9847 | ||
|
|
a81282adeb | ||
|
|
3ba3c09c47 | ||
|
|
3081c7fb62 | ||
|
|
fa5b0d7281 | ||
|
|
1444ef36b9 | ||
|
|
15d2f22eb4 | ||
|
|
355d7e1ee5 | ||
|
|
448a28545b | ||
|
|
cefd046ea0 | ||
|
|
b0d3f0f0d4 | ||
|
|
b7a193d53e | ||
|
|
0a75bac2a1 | ||
|
|
0de5b28716 | ||
|
|
b5ae402c12 | ||
|
|
682cdcc3e0 | ||
|
|
5dba59b6a4 | ||
|
|
71242dc6dd | ||
|
|
b2f8803486 | ||
|
|
744fa1f54c | ||
|
|
f0ff972f0e | ||
|
|
ba838b6aeb | ||
|
|
6a4b1df3a2 | ||
|
|
0a76f84142 | ||
|
|
9bcc62f210 | ||
|
|
322442d5be | ||
|
|
92879e6b32 | ||
|
|
fad3cb3162 | ||
|
|
4d040006b6 | ||
|
|
6e7cb521ba | ||
|
|
bc9ec6ac63 | ||
|
|
b9cbf2e766 | ||
|
|
d183969744 | ||
|
|
4695be5cc5 | ||
|
|
c1a3606774 | ||
|
|
175835138c | ||
|
|
077724c2d2 | ||
|
|
6b69dc42dc | ||
|
|
c5a84c0985 | ||
|
|
dc7a8844eb | ||
|
|
54f071138c | ||
|
|
812374b31b | ||
|
|
e463743fcf | ||
|
|
1d9e17df14 | ||
|
|
bcf156c969 | ||
|
|
ebfb14c353 | ||
|
|
7946ec003f | ||
|
|
665a11f821 | ||
|
|
5566eb8dd6 | ||
|
|
836540e8c9 | ||
|
|
b558b34faf | ||
|
|
30c72ba0a3 | ||
|
|
d8a3d29ad9 | ||
|
|
53ce530a46 | ||
|
|
06264f07fb | ||
|
|
ce3b93d8a0 | ||
|
|
b74a244950 | ||
|
|
ab58b0a8a3 | ||
|
|
659db162d6 | ||
|
|
cb24737825 | ||
|
|
97b35a4640 | ||
|
|
54af1cb2c8 | ||
|
|
b8c2f7db47 | ||
|
|
4701e78f1f | ||
|
|
b89b0bdf5d | ||
|
|
47414e18d4 | ||
|
|
9c9588cce6 | ||
|
|
471d9fe737 | ||
|
|
b381992a75 | ||
|
|
1204507d68 | ||
|
|
c7779578f9 | ||
|
|
b225432c55 | ||
|
|
547f297171 | ||
|
|
5c3c2599db | ||
|
|
a8be5a5a0c | ||
|
|
e1234b2264 | ||
|
|
75af53dc3d | ||
|
|
0a45a89786 | ||
|
|
2b2cc96f11 | ||
|
|
59c01e016d | ||
|
|
3895b8b127 | ||
|
|
da8c0f94e6 | ||
|
|
6908a733a0 | ||
|
|
e8e1466185 | ||
|
|
ff1f7b64e2 | ||
|
|
63bb1d55a4 | ||
|
|
c568d463b9 | ||
|
|
179a6f2cfe | ||
|
|
695a20d009 | ||
|
|
e908775fb2 | ||
|
|
af05396227 | ||
|
|
277f03c207 | ||
|
|
48699a7194 | ||
|
|
b7d076bfee | ||
|
|
009b99bfbb | ||
|
|
b45141b2a1 | ||
|
|
4683a0827d | ||
|
|
ffb617a4c8 | ||
|
|
9de1706baa | ||
|
|
a95566f114 | ||
|
|
a82e310600 | ||
|
|
691926f0e1 | ||
|
|
a42185cd3b | ||
|
|
89eb7b207c | ||
|
|
f99022b242 | ||
|
|
f8b9e3ace4 | ||
|
|
9cbe5a90b8 | ||
|
|
f7fe617f4c | ||
|
|
e6c8343fd0 | ||
|
|
6969f2cf7a | ||
|
|
852adaa6cc | ||
|
|
1f482b42eb | ||
|
|
31e2143c84 | ||
|
|
b89e0d74be | ||
|
|
1127ab6c07 | ||
|
|
8d210fc7b8 | ||
|
|
8acb2fb700 | ||
|
|
a3cbc9755f | ||
|
|
28788fd1fa | ||
|
|
21790814db | ||
|
|
ff6dc03ddf | ||
|
|
fbcdf6909c | ||
|
|
fc95c4fc89 | ||
|
|
3a007f6284 | ||
|
|
2403d8d584 | ||
|
|
47874318df | ||
|
|
f6353bd1e8 | ||
|
|
1101182654 | ||
|
|
d79fc92a1a | ||
|
|
bce476c4a2 | ||
|
|
ecfb9f7d7c | ||
|
|
58ebc57285 | ||
|
|
1a57e50bd6 | ||
|
|
f3884a2db8 | ||
|
|
cb899f691b | ||
|
|
b25722ee2b | ||
|
|
34e10f5972 | ||
|
|
e88096f75c | ||
|
|
6d827cf905 | ||
|
|
ab13166e41 | ||
|
|
89f09ea57c | ||
|
|
baec438be9 | ||
|
|
5309edf3a5 | ||
|
|
f50cbd7958 | ||
|
|
2465ab4a98 | ||
|
|
1947d4da76 | ||
|
|
e452f5b70d | ||
|
|
698de7a38d | ||
|
|
e2a9f2dead | ||
|
|
1f80725b0e | ||
|
|
c3cb5c7e99 | ||
|
|
f7dd0659bf | ||
|
|
3c17ff8445 | ||
|
|
57d0e78d40 | ||
|
|
ae986903b3 | ||
|
|
6964f9bdbf | ||
|
|
9efa9898ff | ||
|
|
22b44421a4 | ||
|
|
02924b3c74 | ||
|
|
99539c786e | ||
|
|
5e621ceb34 | ||
|
|
370a24da81 | ||
|
|
732506b3fa | ||
|
|
1af9c8dba2 | ||
|
|
1dc22a9002 | ||
|
|
ad592c717e | ||
|
|
38e15196f2 | ||
|
|
8131c24acd | ||
|
|
952b620465 | ||
|
|
f3e3bd0348 | ||
|
|
1e1310dbd8 | ||
|
|
adaae8ba15 | ||
|
|
a66b7e98e0 | ||
|
|
3e12d97e8e | ||
|
|
00304f77e1 | ||
|
|
e88db9f403 | ||
|
|
53e9cf6d17 | ||
|
|
5a004590e0 | ||
|
|
53503e32ae | ||
|
|
246181a546 | ||
|
|
6f5d9c989a | ||
|
|
8515792b04 | ||
|
|
923b2b1d77 | ||
|
|
486b0122d0 | ||
|
|
ae090fa74c | ||
|
|
35ec6d308a | ||
|
|
c62a6f5cee | ||
|
|
cdd140b3cc | ||
|
|
09cf49c2ba | ||
|
|
ac4b4c7646 | ||
|
|
d0a6c78966 | ||
|
|
65f2071aa4 | ||
|
|
e8f37a3f89 | ||
|
|
19d229ea12 | ||
|
|
622a62d7a1 | ||
|
|
4a556f4ac4 | ||
|
|
7a1839ba1b | ||
|
|
8f2afb8f4d | ||
|
|
02586981da | ||
|
|
8700a0b939 | ||
|
|
d843fef2ce | ||
|
|
f45654c03c | ||
|
|
761daec53d | ||
|
|
407fb67f1e | ||
|
|
49689eec6c | ||
|
|
791ea9860d | ||
|
|
2f8939d229 | ||
|
|
ccf6290120 | ||
|
|
96a1aa60e8 | ||
|
|
2ea0368c2d | ||
|
|
9e407e4e80 | ||
|
|
360e58c181 | ||
|
|
22d5eb7835 | ||
|
|
7c4a77a909 | ||
|
|
4e209e51d0 | ||
|
|
7191ae55c8 | ||
|
|
17725ebc83 | ||
|
|
1a7a381bd5 | ||
|
|
daf207e5c2 | ||
|
|
72294c569f | ||
|
|
792dd08d38 | ||
|
|
1e40e7d02b | ||
|
|
7e98c75f01 | ||
|
|
b18de05ea4 | ||
|
|
9300652277 | ||
|
|
7c2ec4ca5f | ||
|
|
6a83b6fd87 | ||
|
|
659cd33749 | ||
|
|
cb27d5fe8d | ||
|
|
6c9cda758a | ||
|
|
967134f540 | ||
|
|
25bb353f9d | ||
|
|
9cf2472291 | ||
|
|
cf5b976659 | ||
|
|
70394e79ef | ||
|
|
ea64f3122e | ||
|
|
50197fc33e | ||
|
|
c480fa7fcf | ||
|
|
6fc734da51 | ||
|
|
762a11b0bb | ||
|
|
f168dd69a8 | ||
|
|
becd0b8883 | ||
|
|
fd4570625a | ||
|
|
54a5b58e40 | ||
|
|
a611278e04 | ||
|
|
5c2eb0a68c | ||
|
|
0cbf4d5d4d | ||
|
|
6006a21378 | ||
|
|
bf967d6ba4 | ||
|
|
131ae5aa9d | ||
|
|
eca28582b6 | ||
|
|
14e90a0f52 | ||
|
|
a1c39d4906 | ||
|
|
0964a8bb7a | ||
|
|
8de8f95a3c | ||
|
|
16db999067 | ||
|
|
972be15dda | ||
|
|
c9e06714f8 | ||
|
|
32626ab707 | ||
|
|
a9cd58508b | ||
|
|
122bb68e5a | ||
|
|
914ce9aa4f | ||
|
|
bb572983cd | ||
|
|
ff76ab647f | ||
|
|
f554848c9f | ||
|
|
dc0c389488 | ||
|
|
22b3cc0480 | ||
|
|
604d72cc98 | ||
|
|
913e068113 | ||
|
|
1a4e2173f5 | ||
|
|
c49789167b | ||
|
|
1be2287b3a | ||
|
|
e741a3167f | ||
|
|
5f11f9097a | ||
|
|
8783579aa8 | ||
|
|
c25b4221f8 | ||
|
|
9c771fb2ba | ||
|
|
7f44992c4b | ||
|
|
8df5860826 | ||
|
|
b794b192d1 | ||
|
|
3177131d52 | ||
|
|
89bf77b5c9 | ||
|
|
30e5684006 | ||
|
|
3f8472ca7b | ||
|
|
efa8cb6fa4 | ||
|
|
ab59b7e9b0 | ||
|
|
c99843b13a | ||
|
|
da55a6c94a | ||
|
|
7a1c056374 | ||
|
|
1e5a4e9bdc | ||
|
|
9b88527883 | ||
|
|
800c1639ec | ||
|
|
43775e9373 | ||
|
|
9099b0f00d | ||
|
|
77ffe65773 | ||
|
|
32f8f33a4f | ||
|
|
710c277681 | ||
|
|
11324607d0 | ||
|
|
9c6271136d | ||
|
|
c444eed63e | ||
|
|
1df5e59fdf | ||
|
|
77f66e7434 | ||
|
|
2c81eb6c39 | ||
|
|
09c4afc894 | ||
|
|
229d92590a | ||
|
|
f4f516c64c | ||
|
|
fe1fddde05 | ||
|
|
7e67deead7 | ||
|
|
6e02603098 | ||
|
|
4518f6999c | ||
|
|
aff847b3af | ||
|
|
b24aca0304 | ||
|
|
2c453035e4 | ||
|
|
4fe11869fc | ||
|
|
a0a49f9300 | ||
|
|
29d2fac485 | ||
|
|
0c5da6cb5d | ||
|
|
da6947d295 | ||
|
|
2db8f809ba | ||
|
|
5912fad745 | ||
|
|
dc41c45bec | ||
|
|
88ee90c579 | ||
|
|
bbb2279644 | ||
|
|
1958df6b83 | ||
|
|
58bd3bfcf0 | ||
|
|
d6eb6e08d0 | ||
|
|
96cb6030c8 | ||
|
|
94d47113ea | ||
|
|
f756cee01b | ||
|
|
e8926f177d | ||
|
|
16f4516903 | ||
|
|
000d353ef3 | ||
|
|
83b6f672ff | ||
|
|
0dc48e9b41 | ||
|
|
fe9eef9198 | ||
|
|
8a8248b575 | ||
|
|
42d9a78777 | ||
|
|
31a15c5162 | ||
|
|
67b21c45df | ||
|
|
b280ab9e1f | ||
|
|
c42be77c25 | ||
|
|
160917eae8 | ||
|
|
68b84acd93 | ||
|
|
0aa48b6564 | ||
|
|
0fc1955049 | ||
|
|
8a704d293b | ||
|
|
f4754641c8 | ||
|
|
7c98c3f4f6 | ||
|
|
5a32777dd0 | ||
|
|
7229e1ccf3 | ||
|
|
30695d75d7 | ||
|
|
75ee4edc6a | ||
|
|
d269e3d187 | ||
|
|
7d0fabe1ab | ||
|
|
9695249976 | ||
|
|
17c1a37afb | ||
|
|
73dfe57ae2 | ||
|
|
0d236c4ade | ||
|
|
bc0a10fc73 | ||
|
|
5efca408eb | ||
|
|
29f638e239 | ||
|
|
ddeb612429 | ||
|
|
0bc214e889 | ||
|
|
d951158ce6 | ||
|
|
85034b9748 | ||
|
|
11215b092a | ||
|
|
2129e22423 | ||
|
|
7ea1fca4f7 | ||
|
|
9c8fdc0fc1 | ||
|
|
e25be0f3d9 | ||
|
|
d633fe47ef | ||
|
|
c25e734407 | ||
|
|
d8fd6de940 | ||
|
|
733f112142 | ||
|
|
f55476034b | ||
|
|
0a5941edd7 | ||
|
|
0fc4119728 | ||
|
|
6adfd33e3a | ||
|
|
829e4d92d9 | ||
|
|
42db43c686 | ||
|
|
a0f9efd45e | ||
|
|
5d6a979cd0 | ||
|
|
d6ed819fe2 | ||
|
|
ef14a5fbb4 | ||
|
|
4718767ddb | ||
|
|
dfb377c636 | ||
|
|
7082933b96 | ||
|
|
11b6263d55 | ||
|
|
b0cf7b61ad | ||
|
|
96a1b33f22 | ||
|
|
5cff87c048 | ||
|
|
b9052fa461 | ||
|
|
0ea2066d5b | ||
|
|
992aa3a4d5 | ||
|
|
36c7b15342 | ||
|
|
2ab85f3b67 | ||
|
|
1b690a9876 | ||
|
|
f18d9b6bf4 | ||
|
|
ebca5169a0 | ||
|
|
b9ba4d6fda | ||
|
|
20371940d3 | ||
|
|
ee4944bc1a | ||
|
|
5a1023da89 | ||
|
|
4b94d25869 | ||
|
|
2ceced71c5 | ||
|
|
9f0523977d | ||
|
|
cb6342fc73 | ||
|
|
5214ee6fd4 | ||
|
|
7b3329f315 | ||
|
|
d1b372f670 | ||
|
|
09c657c899 | ||
|
|
24500e99f8 | ||
|
|
b2a173977e | ||
|
|
8be79f4170 | ||
|
|
debaf8d6e9 | ||
|
|
1133d84775 | ||
|
|
8c4ca60b28 | ||
|
|
90eded1a04 | ||
|
|
093ee37aac | ||
|
|
23b1fe3b9e | ||
|
|
42288c4784 | ||
|
|
c008190a08 | ||
|
|
2734688f4f | ||
|
|
e3d8326d81 | ||
|
|
e1ab27f484 | ||
|
|
d1d43be9d1 | ||
|
|
f9cec3e366 | ||
|
|
f92431176a | ||
|
|
c31daf8c92 | ||
|
|
c74fae9663 | ||
|
|
308007f909 | ||
|
|
9aaab7374e | ||
|
|
057218d87f | ||
|
|
050ccdcb3d | ||
|
|
09d975cc3f | ||
|
|
1d2a40f69b | ||
|
|
1a57601fe6 | ||
|
|
09736ee42c | ||
|
|
2e9939baf2 | ||
|
|
6af8ce6bb8 | ||
|
|
8d2c51c945 | ||
|
|
580738cea0 | ||
|
|
1a54b761c1 | ||
|
|
7f5f577daa | ||
|
|
e3cbbca4f9 | ||
|
|
b7ad8dba89 | ||
|
|
ede3de0ca0 | ||
|
|
8ee5505b61 | ||
|
|
eec563b0b4 | ||
|
|
a56d7252c2 | ||
|
|
8b5afc6f29 | ||
|
|
f802474b07 | ||
|
|
11a9f2fe4c | ||
|
|
0cff7619f2 | ||
|
|
a13a590796 | ||
|
|
e0e3f94949 | ||
|
|
6876a1e684 | ||
|
|
f6f9582186 | ||
|
|
5d23dea5aa | ||
|
|
6db6db23f8 | ||
|
|
98b35125c2 | ||
|
|
cd3191bb79 | ||
|
|
5d5b807d33 | ||
|
|
1c2e148d03 | ||
|
|
573dd0edec | ||
|
|
784f86c8eb | ||
|
|
4dc3dd0942 | ||
|
|
c8a809dbdd | ||
|
|
d3b781be77 | ||
|
|
8dd39502f6 | ||
|
|
05994319b7 | ||
|
|
a4f32f829d | ||
|
|
f7921399b9 | ||
|
|
dd129fa403 | ||
|
|
2cc1ef88c8 | ||
|
|
404f7c1043 | ||
|
|
a23a4ed054 | ||
|
|
63cb5807b6 | ||
|
|
85b3845f0d | ||
|
|
1cd12e8576 | ||
|
|
93583220a7 | ||
|
|
f1954ddcb2 | ||
|
|
54bedbd606 | ||
|
|
dc8c0f164f | ||
|
|
775a702b99 | ||
|
|
a1cbd2578e | ||
|
|
f2f1ea948c | ||
|
|
d2e6249ce2 | ||
|
|
3591e362e3 | ||
|
|
dc32608fa3 | ||
|
|
28b4f44baa | ||
|
|
b376459e8c | ||
|
|
e76a6ed63d | ||
|
|
4d6cdf4fea | ||
|
|
d15b0e4f6d | ||
|
|
527c8de773 | ||
|
|
9df990c2d1 | ||
|
|
7b6885a020 | ||
|
|
8fd0fd673f | ||
|
|
21d8d57380 | ||
|
|
7deca8f2cd | ||
|
|
0d3eebd221 | ||
|
|
e6f7c12e88 | ||
|
|
2b1d4a02b0 | ||
|
|
d7d7b7c0e6 | ||
|
|
773def64f2 | ||
|
|
78ad6db0c6 | ||
|
|
e6af4ea126 | ||
|
|
a64b9ac84f | ||
|
|
bce3d4f19e | ||
|
|
59e3645c17 | ||
|
|
e05ccb3824 | ||
|
|
86e7139245 | ||
|
|
bb6bd85c1d | ||
|
|
ca74ae75a6 | ||
|
|
ae6c072661 | ||
|
|
5f2f12d347 | ||
|
|
fc7ba060c1 | ||
|
|
3a3984006c | ||
|
|
d11b6d557e | ||
|
|
2f007bf7a5 | ||
|
|
6513445000 | ||
|
|
3ef92e5610 | ||
|
|
57bb425fb0 | ||
|
|
2fba789e8d | ||
|
|
08655a7559 | ||
|
|
3256008a59 | ||
|
|
da8efd36d7 | ||
|
|
5541dad32b | ||
|
|
b3f436a030 | ||
|
|
b00660acf1 | ||
|
|
a6af4f4d7a | ||
|
|
cc3460832f | ||
|
|
edc60914f6 | ||
|
|
c9518485ba | ||
|
|
a26e1d822a | ||
|
|
a7aa8f7cef | ||
|
|
ff34e3c81e | ||
|
|
20519158d2 | ||
|
|
cacf1e06d6 | ||
|
|
fa0c5891bf | ||
|
|
fc13a0fde5 | ||
|
|
ade85daee2 | ||
|
|
2d26af25c1 | ||
|
|
b033406387 | ||
|
|
c09f8f6f76 | ||
|
|
401ce56fa1 | ||
|
|
cf315388f2 | ||
|
|
f219dc1794 | ||
|
|
ed20d2a917 | ||
|
|
235c9d2ebf | ||
|
|
fdea4e21b0 | ||
|
|
e20a08cb14 | ||
|
|
429935a277 | ||
|
|
a4bb11c755 | ||
|
|
f0b6e87091 | ||
|
|
ea5a609d0b | ||
|
|
0abe6eed89 | ||
|
|
e205846845 | ||
|
|
deef923825 | ||
|
|
0fa3feb088 | ||
|
|
1393f7d3d2 | ||
|
|
b7ba50033a | ||
|
|
ce9759785a | ||
|
|
8de58b9848 | ||
|
|
cc8ab2c556 | ||
|
|
1409b1a25b | ||
|
|
bdfb698aa4 | ||
|
|
57183da315 | ||
|
|
c928f23e1b | ||
|
|
0c89914a6d | ||
|
|
630e0e0240 | ||
|
|
513047c3bb | ||
|
|
d932837a3c | ||
|
|
38868f9ff4 | ||
|
|
8013b32f0e | ||
|
|
adeed60fe0 | ||
|
|
546945e7a6 | ||
|
|
5b2f1bbf9e | ||
|
|
875f538d54 | ||
|
|
b7d3ff1e85 | ||
|
|
c03964dc5f | ||
|
|
950a3313d8 | ||
|
|
e2a22d481c | ||
|
|
b4e2406385 | ||
|
|
ca9e74edd8 | ||
|
|
39b3de6b5d | ||
|
|
26563bb330 | ||
|
|
0653e123cc | ||
|
|
76358ed64e | ||
|
|
217f11a8f7 | ||
|
|
af21ef2497 | ||
|
|
51c25831e8 | ||
|
|
be41e0526a | ||
|
|
0f240ea1b2 | ||
|
|
e520538af6 | ||
|
|
e03d840d06 | ||
|
|
1921ba993e | ||
|
|
b050897ebd | ||
|
|
0bdd8a223d | ||
|
|
d12f86363f | ||
|
|
9f680a63f8 | ||
|
|
928a052440 | ||
|
|
fbc84a1f9a | ||
|
|
fa1693dc5f | ||
|
|
8a8fb49617 | ||
|
|
dc4474889d | ||
|
|
29ac507d56 | ||
|
|
7f14e434c8 | ||
|
|
21ca26acd7 | ||
|
|
33e48146b0 | ||
|
|
73701b7295 | ||
|
|
22475e787e | ||
|
|
9e38a0cc29 | ||
|
|
a391ebecca | ||
|
|
72cd9dffa3 | ||
|
|
4ed05f4ff1 | ||
|
|
871cfe0c78 | ||
|
|
a928f8cd9e | ||
|
|
afaaf64f52 | ||
|
|
dc0d542054 | ||
|
|
0cd3a12daa | ||
|
|
35b30480f0 | ||
|
|
6d1f17bd46 | ||
|
|
ab899e71e7 | ||
|
|
6b9d8708d3 | ||
|
|
bc1e8e07cf | ||
|
|
82526865d2 | ||
|
|
02c8c9c752 | ||
|
|
6475188e6a | ||
|
|
6e485c9f70 | ||
|
|
b49e5857c9 | ||
|
|
13ced58261 | ||
|
|
ed36674a99 | ||
|
|
99aa3a6507 | ||
|
|
f045a73e2d | ||
|
|
7791674f24 | ||
|
|
9f0ae77341 | ||
|
|
5a9e366c0a | ||
|
|
c22c532a5c | ||
|
|
6db3a4d9d2 | ||
|
|
17d7b72f3b | ||
|
|
fee33dd0cf | ||
|
|
65605b4a54 | ||
|
|
e304f2d5ad | ||
|
|
4e0c261c9d | ||
|
|
22de26cd77 | ||
|
|
339ba96600 | ||
|
|
3c6091144b | ||
|
|
ef14b529b8 | ||
|
|
2a97a6ec1f | ||
|
|
fa6548939e | ||
|
|
418c673699 | ||
|
|
13f77a7416 | ||
|
|
303a80a316 | ||
|
|
2392ac6827 | ||
|
|
01ce4b987e | ||
|
|
2f308a85d8 | ||
|
|
e8d60509a0 | ||
|
|
d6f80eaae7 | ||
|
|
a5f986fec5 | ||
|
|
141d0252f2 | ||
|
|
c029b532d4 | ||
|
|
13816443ba | ||
|
|
2c4e22e598 | ||
|
|
aea776a131 | ||
|
|
d2360b533b | ||
|
|
de84a534ac | ||
|
|
ac636c73ae | ||
|
|
6a586fe4fd | ||
|
|
fbd8ae2888 | ||
|
|
7e4fde7a14 | ||
|
|
150b9a0168 | ||
|
|
f7b7aace38 | ||
|
|
f78c94c988 | ||
|
|
74ff8dc724 | ||
|
|
8aa127eac2 | ||
|
|
3729016a0d | ||
|
|
b6628cdfd2 | ||
|
|
ae48dba3e1 | ||
|
|
09364d182c | ||
|
|
99ed968289 | ||
|
|
8fa3b8d7e3 | ||
|
|
7530487760 | ||
|
|
79afc2b545 | ||
|
|
8c94f9c435 | ||
|
|
b589d44dfb | ||
|
|
4140261797 | ||
|
|
00f1fdb3c4 | ||
|
|
172e5dd095 | ||
|
|
a53907a646 | ||
|
|
be1b8d6751 | ||
|
|
26ff734ef9 | ||
|
|
0e18246999 | ||
|
|
7333ffd41e | ||
|
|
7dc5019b9d | ||
|
|
93fa39a14f | ||
|
|
342e6f3ab0 | ||
|
|
013379eb86 | ||
|
|
bc0ffe0d10 | ||
|
|
5f62deaa36 | ||
|
|
ff8605b723 | ||
|
|
45c77a1976 | ||
|
|
8cb71b8d3b | ||
|
|
2233c02720 | ||
|
|
839215148a | ||
|
|
c1eeb63d89 | ||
|
|
7b9ebbe735 | ||
|
|
a5a91d5e48 | ||
|
|
e1f5c49df7 | ||
|
|
3c1fc0b722 | ||
|
|
05faf2f352 | ||
|
|
347c174099 | ||
|
|
5656d69c04 | ||
|
|
ac4df8d06b | ||
|
|
bcd136cee1 | ||
|
|
7ab8534ef6 | ||
|
|
014b39290b | ||
|
|
4f97b739b1 | ||
|
|
d88cba92c0 | ||
|
|
5304bed4ed | ||
|
|
37194a41ec | ||
|
|
d75ff9e784 | ||
|
|
164a07e2be | ||
|
|
44bd200885 | ||
|
|
8242692541 | ||
|
|
09b92e7d08 | ||
|
|
31ac3898ad | ||
|
|
c1159c53e3 | ||
|
|
deb6aedddb | ||
|
|
ed0cd5e7b0 | ||
|
|
9280b4d2a9 | ||
|
|
3a57857707 | ||
|
|
6b7394e789 | ||
|
|
5a8eab3b25 | ||
|
|
15969fdf94 | ||
|
|
9b15e04bc4 | ||
|
|
fd947a097d | ||
|
|
e1383d3821 | ||
|
|
c131205ff1 | ||
|
|
b6df88a134 | ||
|
|
629b137bb0 | ||
|
|
db959a6463 | ||
|
|
4041150660 | ||
|
|
bcb43327b1 | ||
|
|
63c8bbf3eb | ||
|
|
24b1666273 | ||
|
|
86b795cd36 | ||
|
|
bc0bf94680 | ||
|
|
f5d64176f6 | ||
|
|
4f0020d0df | ||
|
|
c83eda9551 | ||
|
|
a36e636a58 | ||
|
|
f5d3627468 | ||
|
|
8eeed49547 | ||
|
|
00933a27af | ||
|
|
2bc33beec4 | ||
|
|
e1c1de1b94 | ||
|
|
26743dfcee | ||
|
|
8b0bda3bad | ||
|
|
a8a6254ea2 | ||
|
|
be4bc3dec5 | ||
|
|
6e02d19b0d | ||
|
|
662f0fa8f4 | ||
|
|
56bf17f879 | ||
|
|
b92909d621 | ||
|
|
8f35a3ec8c | ||
|
|
a4a092794a | ||
|
|
174750c9dd | ||
|
|
f2c0686346 | ||
|
|
c2afae51cb | ||
|
|
6e1d1ad18b | ||
|
|
ab22bb1878 | ||
|
|
e0ed652ed8 | ||
|
|
103fedaf92 | ||
|
|
50fe7483ae | ||
|
|
37f626f5e2 | ||
|
|
b1693f625a | ||
|
|
f0dc1e7527 | ||
|
|
6c7f089ebb | ||
|
|
68a81c3989 | ||
|
|
5222f940cc | ||
|
|
45ea11c1b6 | ||
|
|
b624919d2f | ||
|
|
b5cb5f4525 | ||
|
|
4a70065e5f | ||
|
|
7d77dc4fd2 | ||
|
|
6f69c84d10 | ||
|
|
6b96b37c38 | ||
|
|
b7435f84f0 | ||
|
|
7bc349c3c3 | ||
|
|
fd4e45aafc | ||
|
|
b339d7ad20 | ||
|
|
cedd186c21 | ||
|
|
c6c9114b40 | ||
|
|
f4a05a5ffd | ||
|
|
a82f916a71 | ||
|
|
ff0529c932 | ||
|
|
c0f83a7467 | ||
|
|
9bb3a5782d | ||
|
|
5ec710efc6 | ||
|
|
5866f3ec83 | ||
|
|
01801e3c36 | ||
|
|
d319543377 | ||
|
|
5392bafe28 | ||
|
|
89ce7ba0b0 | ||
|
|
376a1f49d3 | ||
|
|
6042ea8f28 | ||
|
|
78efb62781 | ||
|
|
e9d5079986 | ||
|
|
c6e0abbe13 | ||
|
|
4f166a03f5 | ||
|
|
29b62f7c0a | ||
|
|
09ee3e2a1d | ||
|
|
121e424a7f | ||
|
|
66c1a6a875 | ||
|
|
b26c373f4d | ||
|
|
4dd318ca68 | ||
|
|
ce6d5f5551 | ||
|
|
9e3052968b | ||
|
|
3f1ef2a283 | ||
|
|
bc3e19d0a2 | ||
|
|
850801f510 | ||
|
|
710af87faf | ||
|
|
6612343f33 | ||
|
|
c399295a4e | ||
|
|
e34644d983 | ||
|
|
cc0097c87a | ||
|
|
d71e655a4b | ||
|
|
99e69c32ee | ||
|
|
a2c164a77d | ||
|
|
78d2a584b7 | ||
|
|
f0c8c12c1a | ||
|
|
34cd741e9b | ||
|
|
1684ddc7e6 | ||
|
|
e35145c816 | ||
|
|
4adf44a43c | ||
|
|
cd5a94305c | ||
|
|
b4602aaf28 | ||
|
|
3e69ba1384 | ||
|
|
41bf215367 | ||
|
|
06deaebe19 | ||
|
|
6a13ab8920 | ||
|
|
f1a222d356 | ||
|
|
a87bedf31a | ||
|
|
890b6079b9 | ||
|
|
9c62456487 | ||
|
|
414cdbf83a | ||
|
|
df06bdf33b | ||
|
|
449f51aed5 | ||
|
|
c9e2c7037e | ||
|
|
a49a15f990 | ||
|
|
eb39ddbfe3 | ||
|
|
974d36d35e | ||
|
|
b64e3254fc | ||
|
|
9907db9e1a | ||
|
|
b4dd64aa24 | ||
|
|
6e049225f9 | ||
|
|
831369a44b | ||
|
|
7c9c30db1d | ||
|
|
0c6d868483 | ||
|
|
777760b096 | ||
|
|
e8ad096173 | ||
|
|
2f6f5c6778 | ||
|
|
832e028b39 | ||
|
|
d92af9c95c | ||
|
|
12435159db | ||
|
|
8695239372 | ||
|
|
29b4c40e43 | ||
|
|
53471072f4 | ||
|
|
bf902b2240 | ||
|
|
4b4912ba99 | ||
|
|
fa890ecb23 | ||
|
|
67af8bd730 | ||
|
|
f5eca4fe0b | ||
|
|
057423ed92 | ||
|
|
7dbe608d27 | ||
|
|
d8d4b75a11 | ||
|
|
664047f3fb | ||
|
|
1e20b048d3 | ||
|
|
6c1806df74 | ||
|
|
d97d991b5f | ||
|
|
90e18e37d0 | ||
|
|
c5a2bc5484 | ||
|
|
2ecc7e4f56 | ||
|
|
9f79c5ab4d | ||
|
|
e7721a8c4d | ||
|
|
c8f5089f7a | ||
|
|
a0ea905a7a | ||
|
|
b8fd1a30ee | ||
|
|
ff9ae54ae9 | ||
|
|
a16de15015 | ||
|
|
079e40144e | ||
|
|
a3f3a35c20 | ||
|
|
4fdeab8dad | ||
|
|
9ea58381f4 | ||
|
|
85d51f5c9a | ||
|
|
3b1d763421 | ||
|
|
91ab123860 | ||
|
|
8e021b0c82 | ||
|
|
7aa89db8d0 | ||
|
|
d3ba2755e8 | ||
|
|
0b0e0e9ce8 | ||
|
|
979f890cd5 | ||
|
|
89b6d7fb68 | ||
|
|
644882faff | ||
|
|
edfcbed24f | ||
|
|
f45ab70080 | ||
|
|
33aa9030bf | ||
|
|
4c3aae7583 | ||
|
|
c5dd52bcc9 | ||
|
|
eae7cf81b0 | ||
|
|
20e5df501e | ||
|
|
68e8d9858c | ||
|
|
99238dccbb | ||
|
|
626736bdd3 | ||
|
|
c2de749d0e | ||
|
|
9ad9ea67cf | ||
|
|
82595df6f9 | ||
|
|
281d1a8ec4 | ||
|
|
d2e0e2b79c | ||
|
|
05409d51da | ||
|
|
e98194cdd3 | ||
|
|
317532752c | ||
|
|
c90e45a373 | ||
|
|
8decc9e45f | ||
|
|
8053833e1f | ||
|
|
07221d8859 | ||
|
|
c1abe1ec44 | ||
|
|
b3dfd4930a | ||
|
|
fc844d3dfd | ||
|
|
d8686c2d12 | ||
|
|
90388885db | ||
|
|
33370eaa5c | ||
|
|
2b53b1800e | ||
|
|
807dcddc28 | ||
|
|
a45ce1e8d1 | ||
|
|
3d5128735b | ||
|
|
6173a6c329 | ||
|
|
813e79fa9f | ||
|
|
c0e92b1639 | ||
|
|
ef08ccbaa2 | ||
|
|
93d759c689 | ||
|
|
0d24ce0ef9 | ||
|
|
a4902a3685 | ||
|
|
16b08e333d | ||
|
|
15cf06699a | ||
|
|
fe33661821 | ||
|
|
2b98f326e8 | ||
|
|
d7e0ee6ceb | ||
|
|
ce367d6427 | ||
|
|
6c3886aad0 | ||
|
|
5af4e61aff | ||
|
|
5766c36372 | ||
|
|
61b72f0c0b | ||
|
|
d79f7b28c2 | ||
|
|
84b52b2323 | ||
|
|
eacb234872 | ||
|
|
6317a91541 | ||
|
|
128c45e2d3 | ||
|
|
4d6b4f8343 | ||
|
|
789049d386 | ||
|
|
cf7ce31054 | ||
|
|
2c851b7580 | ||
|
|
f4105e9ed2 | ||
|
|
74733ae310 | ||
|
|
1d823a0be5 | ||
|
|
00429558c2 | ||
|
|
dae6acf028 | ||
|
|
822d72c57d | ||
|
|
c02a0a00f4 | ||
|
|
a08c18febe | ||
|
|
479a5d2f72 | ||
|
|
793fbac405 | ||
|
|
167dacc2e4 | ||
|
|
00883c395c | ||
|
|
83071d0e5f | ||
|
|
b0dac046e6 | ||
|
|
8dcae810d4 | ||
|
|
b43e2ac8f4 | ||
|
|
bc02f05613 | ||
|
|
90651dfe3e | ||
|
|
c583eec4c7 | ||
|
|
0f07d78e01 | ||
|
|
22fe985cfc | ||
|
|
ace8a3adb7 | ||
|
|
4c4b5e8c64 | ||
|
|
2c37ddb2f6 | ||
|
|
b06a9edfd6 | ||
|
|
5140250421 | ||
|
|
88cf2d5c39 | ||
|
|
422a07b382 | ||
|
|
f820f9a976 | ||
|
|
c27aee2b14 | ||
|
|
7ce1a3445c | ||
|
|
42a3c523ae | ||
|
|
bb46dd93be | ||
|
|
b207f0616d | ||
|
|
9dcf788f47 | ||
|
|
6900bc1855 | ||
|
|
b09bfd7889 | ||
|
|
2d8892958e | ||
|
|
f9a43921c5 | ||
|
|
e74efd3072 | ||
|
|
d5a5bd46d2 | ||
|
|
e422e3c620 | ||
|
|
b269d920a9 | ||
|
|
de2bce6f47 | ||
|
|
e061116032 | ||
|
|
878bcbd8c7 | ||
|
|
093135ff30 | ||
|
|
734f8ed4c3 | ||
|
|
dcc9628f31 | ||
|
|
321d105c42 | ||
|
|
460aec7bc9 | ||
|
|
ffe9244458 | ||
|
|
fa09d8187a | ||
|
|
9da30956c0 | ||
|
|
9c7835a244 | ||
|
|
ad057324b7 | ||
|
|
2c583d1584 | ||
|
|
15fbb195e9 | ||
|
|
5867b87680 | ||
|
|
52563d3eea | ||
|
|
21348c418a | ||
|
|
af3589fe91 | ||
|
|
937d40cdde | ||
|
|
319a860f23 | ||
|
|
d3b854a833 | ||
|
|
650fa5ccfb | ||
|
|
db70c7912c | ||
|
|
3160607aaf | ||
|
|
eec54affc3 | ||
|
|
31d6f5a639 | ||
|
|
60424c4ccd | ||
|
|
60bbd72028 | ||
|
|
a78968c68e | ||
|
|
1c3ec21e0f | ||
|
|
8d1fb9c82d | ||
|
|
f01493277f | ||
|
|
0f6bd5ea83 | ||
|
|
0030f46d2d | ||
|
|
06f8f8e608 | ||
|
|
a144464506 | ||
|
|
2770bc0865 | ||
|
|
bcc61bd933 | ||
|
|
38c46fcafd | ||
|
|
f3e7c64de6 | ||
|
|
f9f8c5d07a | ||
|
|
c5f4a7f302 | ||
|
|
389aae270b | ||
|
|
e97eb71a52 | ||
|
|
5a8488af36 | ||
|
|
205cff3a94 | ||
|
|
649a0dec6c | ||
|
|
e8990f4a36 | ||
|
|
acf91e1f60 | ||
|
|
6ed9dae2f7 | ||
|
|
ea5879bf2b | ||
|
|
c7c3b1b0e9 | ||
|
|
c64018d421 | ||
|
|
53d944d013 | ||
|
|
9aa8b09505 | ||
|
|
8984f88a3e | ||
|
|
386aa93e24 | ||
|
|
0cd0fcdecb | ||
|
|
cde2d49c95 | ||
|
|
9e5876dc17 | ||
|
|
1064ad5d58 | ||
|
|
7db0589340 | ||
|
|
c590e90c87 | ||
|
|
101d3fa78d | ||
|
|
468bb5f47a | ||
|
|
1c1494d3e0 | ||
|
|
5fc11fb706 | ||
|
|
f73d61a597 | ||
|
|
3f46bcf142 | ||
|
|
aa67525b70 | ||
|
|
568f6d958b | ||
|
|
b12f515185 | ||
|
|
732de4ac7f | ||
|
|
e4bdb28ba2 | ||
|
|
a87a13c3ab | ||
|
|
19e8a7049b | ||
|
|
a21f184058 | ||
|
|
f4efce3475 | ||
|
|
23d9f46d30 | ||
|
|
6478bb7eab | ||
|
|
962fd4cca3 | ||
|
|
640d4f09bd | ||
|
|
7e2b7941f3 | ||
|
|
aa74ba3da2 | ||
|
|
1b375b715c | ||
|
|
09c1987de4 | ||
|
|
827042f12f | ||
|
|
925938b4d1 | ||
|
|
65c4d39c31 | ||
|
|
4b0e907c3d | ||
|
|
687f762457 | ||
|
|
6eb87e04c0 | ||
|
|
5fe6ef268e | ||
|
|
51e090d67a | ||
|
|
fc5dde15fe | ||
|
|
14f798afec | ||
|
|
6d117ffbb5 | ||
|
|
fcd166149c | ||
|
|
7482b20f7b | ||
|
|
1d6423e71f | ||
|
|
7cf7267085 | ||
|
|
f5fff5eaad | ||
|
|
e4e07eef5a | ||
|
|
b74da7963b | ||
|
|
7383e4348b | ||
|
|
983aa827a8 | ||
|
|
78cd635b7a | ||
|
|
dfb9af36df | ||
|
|
a02a2f5a96 | ||
|
|
dca3efb3dd | ||
|
|
43a97f86f5 | ||
|
|
b5ac415afc | ||
|
|
4417e6eaef | ||
|
|
f8fe780f52 | ||
|
|
eec374426f | ||
|
|
550123882c | ||
|
|
79f21b09d2 | ||
|
|
63843c5682 | ||
|
|
8960db4132 | ||
|
|
66c22f896b | ||
|
|
840773e626 | ||
|
|
2874096e27 | ||
|
|
b86572b084 | ||
|
|
e4f6e55e89 | ||
|
|
c1cbc334ad | ||
|
|
249fdf444a | ||
|
|
547b8b9314 | ||
|
|
ab6045691e | ||
|
|
fc8710f50a | ||
|
|
aacfe4d667 | ||
|
|
f235787703 | ||
|
|
4ca5846c7f | ||
|
|
754ccd0448 | ||
|
|
d4bd20ffb4 | ||
|
|
4bad1a258f | ||
|
|
ffb6913706 | ||
|
|
6531101517 | ||
|
|
bbf7586fe8 | ||
|
|
ef57318259 | ||
|
|
8050e351ed | ||
|
|
c2d7cf388d | ||
|
|
274aa143d3 | ||
|
|
855011360a | ||
|
|
44ff462718 | ||
|
|
9661afff16 | ||
|
|
1a43654207 | ||
|
|
822441e0bd | ||
|
|
66f1e1f714 | ||
|
|
b5e62753b7 | ||
|
|
aae8fda11d | ||
|
|
bebcd3dcdd | ||
|
|
5e0de04eab | ||
|
|
472ca9d8f6 | ||
|
|
41ed37ab02 | ||
|
|
bbdc195a3b | ||
|
|
740fbf72d7 | ||
|
|
8a2aada58d | ||
|
|
7bd53a84d5 | ||
|
|
5f18e849c1 | ||
|
|
49876c3f13 | ||
|
|
399b709aaf | ||
|
|
a477d84729 | ||
|
|
5acd03876b | ||
|
|
3a6fdf8bdf | ||
|
|
9cd3a8d5b0 | ||
|
|
840a920aba | ||
|
|
e4b3ecd372 | ||
|
|
f29eafd044 | ||
|
|
4f1a837bd3 | ||
|
|
d5a4815836 | ||
|
|
210537a4d2 | ||
|
|
0eca79cb6c | ||
|
|
550d893c38 | ||
|
|
71dca5c076 | ||
|
|
7f72b062d1 | ||
|
|
d68f8d11fe | ||
|
|
b54de611d3 | ||
|
|
f3c5d1c608 | ||
|
|
9e17304523 | ||
|
|
0460415bcb | ||
|
|
b4c5f65a5f | ||
|
|
62486a7dd1 | ||
|
|
8e32aca282 | ||
|
|
c7ae5c587a | ||
|
|
2cea1bcc82 | ||
|
|
5ff2dfb8e2 | ||
|
|
4b54b2b953 | ||
|
|
7e4570bc9c | ||
|
|
78d7df02cb | ||
|
|
ee36cf058c | ||
|
|
668194d574 | ||
|
|
c13cb8a1f2 | ||
|
|
72e87d6980 | ||
|
|
a986a61b5f | ||
|
|
5484db34f9 | ||
|
|
109e6c69ff | ||
|
|
e311bc1ca5 | ||
|
|
553d41fedd | ||
|
|
2996d9ab9c | ||
|
|
bf1da0f91f | ||
|
|
ca12a1d466 | ||
|
|
7c90323649 | ||
|
|
27e42b5091 | ||
|
|
65c72c12c4 | ||
|
|
bcf649a116 | ||
|
|
e371de4ea3 | ||
|
|
b27df30222 | ||
|
|
892349d7c9 | ||
|
|
dec8a65730 | ||
|
|
3084cebd6b | ||
|
|
879e795147 | ||
|
|
509c0a6aab | ||
|
|
91d1648230 | ||
|
|
640dac1eff | ||
|
|
9321ab9deb | ||
|
|
a193d790b2 | ||
|
|
b382ef1058 | ||
|
|
488e7b4692 | ||
|
|
be7df6c16f | ||
|
|
ddd964e49a | ||
|
|
a275a86d12 | ||
|
|
1c99f399c2 | ||
|
|
c38c7a29fd | ||
|
|
0fde78cb17 | ||
|
|
5df3317ad0 | ||
|
|
e88c4e1100 | ||
|
|
d85bb8b6a0 | ||
|
|
fd9c2b399e | ||
|
|
e8daa63d7e | ||
|
|
640d6f848a | ||
|
|
8c5e525c57 | ||
|
|
e87feba45d | ||
|
|
9d3438a8b3 | ||
|
|
fd6ef4f870 | ||
|
|
d94bd413e5 | ||
|
|
0c2f697f6d | ||
|
|
b831bed7cd | ||
|
|
d9554622c0 | ||
|
|
89ad48764a | ||
|
|
5ab3c5ea99 | ||
|
|
fdc7273d56 | ||
|
|
a59a0fe475 | ||
|
|
16e29c466e | ||
|
|
35d109389f | ||
|
|
e5b561c87f | ||
|
|
3999c0fc41 | ||
|
|
e2a1ce220e | ||
|
|
369346c03d | ||
|
|
d09ccb2504 | ||
|
|
c514b6b0b9 | ||
|
|
040f27e6da | ||
|
|
a5fdf6d14a | ||
|
|
16c9418ee1 | ||
|
|
d8aba2f7e6 | ||
|
|
db11a2a308 | ||
|
|
f362c6f508 | ||
|
|
7458c4bbd5 | ||
|
|
531f1b6aa4 | ||
|
|
723ef591a5 | ||
|
|
e51b95ffa8 | ||
|
|
9da65d6bfd | ||
|
|
88cde7225e | ||
|
|
e788b858d0 | ||
|
|
c0feb99f0e | ||
|
|
567380ffe1 | ||
|
|
a5e36c9aab | ||
|
|
4c380b48e7 | ||
|
|
3375e65486 | ||
|
|
a1adb7f31c | ||
|
|
9b28a6eed6 | ||
|
|
8be69aa647 | ||
|
|
48510d2ffb | ||
|
|
04077ce934 | ||
|
|
092faa019b | ||
|
|
1f17b975d6 | ||
|
|
15ede02c25 | ||
|
|
4bccf36375 | ||
|
|
21e794a66f | ||
|
|
e1f98e246f | ||
|
|
bf56a327f4 | ||
|
|
cd200f07a5 | ||
|
|
4ff9aac1fa | ||
|
|
988da2c477 | ||
|
|
f510f42b96 | ||
|
|
43314dc8db | ||
|
|
423a0fefa5 | ||
|
|
fd57fce977 | ||
|
|
d8fbaa4cbe | ||
|
|
a6e05f4558 | ||
|
|
42f4490bbc | ||
|
|
852e9ae173 | ||
|
|
26ec6b78eb | ||
|
|
d6a82f7852 | ||
|
|
232e2055aa | ||
|
|
955efdac1a | ||
|
|
654701af4c | ||
|
|
73d21a87ae | ||
|
|
878c7f0267 | ||
|
|
cb78c778dd | ||
|
|
310558508e | ||
|
|
3daca8d251 | ||
|
|
28b01c5464 | ||
|
|
1fbdd21133 | ||
|
|
55a6c3a10a | ||
|
|
fc45647440 | ||
|
|
3bfead66c4 | ||
|
|
b54a97b5f0 | ||
|
|
931f69d6c7 | ||
|
|
ae8c6865c9 | ||
|
|
0133bab038 | ||
|
|
48c5ee4f8b | ||
|
|
9315a8838c | ||
|
|
592564b623 | ||
|
|
79aff6827c | ||
|
|
079e7327a2 | ||
|
|
48864ce8c7 | ||
|
|
2816a70af3 | ||
|
|
6af22a9cdd | ||
|
|
827fe06903 | ||
|
|
45815d8642 | ||
|
|
cf5c770adc | ||
|
|
638f82b46d | ||
|
|
e0e1eea9ce | ||
|
|
27c7240185 | ||
|
|
5ca2a8f670 | ||
|
|
2d60a2d48c | ||
|
|
b70c8ee7a8 | ||
|
|
a3fd7423b0 | ||
|
|
f679a18e82 | ||
|
|
77f3764fea | ||
|
|
1e0c04fc15 | ||
|
|
56b973f3cc | ||
|
|
3479574bd4 | ||
|
|
aa55751b1d | ||
|
|
6c2aade375 | ||
|
|
f51f19bcba | ||
|
|
1d44662b1d | ||
|
|
25f4226dbb | ||
|
|
dd1ba96adf | ||
|
|
d4888fa4af | ||
|
|
b3559f644c | ||
|
|
fe80fb1090 | ||
|
|
43efa05113 | ||
|
|
e5e3f9e210 | ||
|
|
468dfed416 | ||
|
|
3564740255 | ||
|
|
8020729ced | ||
|
|
deec63bb5b | ||
|
|
339d491dfc | ||
|
|
d66ac9f3f4 | ||
|
|
06fb330569 | ||
|
|
ce0e06a935 | ||
|
|
5006f97f70 | ||
|
|
24d001e498 | ||
|
|
eab888c63a | ||
|
|
3d3c09d299 | ||
|
|
97dde8c485 | ||
|
|
14682b9054 | ||
|
|
93ba8e16c3 | ||
|
|
dbcb473040 | ||
|
|
f0811c8863 | ||
|
|
0166db9663 | ||
|
|
c26f073134 | ||
|
|
45668e31fc | ||
|
|
529aed5da1 | ||
|
|
09802acf0d | ||
|
|
9224051b80 | ||
|
|
fd9d3301f6 | ||
|
|
68499a1199 | ||
|
|
f077323e6f | ||
|
|
7f2e752796 | ||
|
|
97683ec052 | ||
|
|
73164c61ad | ||
|
|
564c168420 | ||
|
|
95f4fe0cb8 | ||
|
|
bbc6d374ea | ||
|
|
316da5e5f5 | ||
|
|
e2b9b8e9fd | ||
|
|
7154b8d40f | ||
|
|
fcb3ff3a41 | ||
|
|
342cfc41ec | ||
|
|
aa7d3b0f96 | ||
|
|
3e28bd2cfa | ||
|
|
cc1eec69df | ||
|
|
3fa0de4293 | ||
|
|
2ad8af71b5 | ||
|
|
b648cc1168 | ||
|
|
f24bf873bf | ||
|
|
e0a5033596 | ||
|
|
ef14d58c64 | ||
|
|
547a4adef5 | ||
|
|
5256a2f194 | ||
|
|
0560c2615d | ||
|
|
ff282492a1 | ||
|
|
312dc1c749 | ||
|
|
1e26c34758 | ||
|
|
decaba72c3 | ||
|
|
7e8c77e636 | ||
|
|
ba99980cf4 | ||
|
|
c62f722f99 | ||
|
|
3fd23508bc | ||
|
|
9ff9e0299b | ||
|
|
6488ced3d3 | ||
|
|
9a2be95159 | ||
|
|
ef4e03c9fe | ||
|
|
ca2f0288e5 | ||
|
|
ca63760a4b | ||
|
|
83924f7e10 | ||
|
|
c4a56c3f6e | ||
|
|
cf134ab3aa | ||
|
|
043c585008 | ||
|
|
0d346d4414 | ||
|
|
9067371234 | ||
|
|
40fe05c5e2 | ||
|
|
e3bdfb5def | ||
|
|
55f0713a2f | ||
|
|
5aee59cc3a | ||
|
|
94d3774d9e | ||
|
|
b665254f39 | ||
|
|
4dc8cce8e8 | ||
|
|
d206a20ce7 | ||
|
|
6fcc282a4e | ||
|
|
93c35a7ba5 | ||
|
|
9dfa8d5f8f | ||
|
|
87504056fe | ||
|
|
429c18f9e8 | ||
|
|
5bddc81f60 | ||
|
|
9837b4a61e | ||
|
|
454f143661 | ||
|
|
7376dfc6e9 | ||
|
|
838d47d578 | ||
|
|
14e81d0a9a | ||
|
|
f68c2b2454 | ||
|
|
814c3dfecc | ||
|
|
b8aade776b | ||
|
|
e092e6002d | ||
|
|
673754d16e | ||
|
|
27deeb2f51 | ||
|
|
9a7a84c7a0 | ||
|
|
a3d2588313 | ||
|
|
5c87fee282 | ||
|
|
b24323d500 | ||
|
|
824aca85d0 | ||
|
|
1e4098a29e | ||
|
|
3aa8f32ca9 | ||
|
|
bf42ea70ba | ||
|
|
d69da5f0f5 | ||
|
|
078257dd1b | ||
|
|
8c1c2570b3 | ||
|
|
a80803566d | ||
|
|
f551f5b7b6 | ||
|
|
1978cde4f1 | ||
|
|
c5f6cc6382 | ||
|
|
e9e2c0bee8 | ||
|
|
33a9817388 | ||
|
|
91301bcd5b | ||
|
|
67ad7da5cc | ||
|
|
e0deb704f9 | ||
|
|
abf3790ea6 |
24
.asf.yaml
24
.asf.yaml
@@ -17,7 +17,14 @@
|
|||||||
|
|
||||||
# https://cwiki.apache.org/confluence/display/INFRA/.asf.yaml+features+for+git+repositories
|
# https://cwiki.apache.org/confluence/display/INFRA/.asf.yaml+features+for+git+repositories
|
||||||
---
|
---
|
||||||
|
notifications:
|
||||||
|
commits: commits@superset.apache.org
|
||||||
|
issues: notifications@superset.apache.org
|
||||||
|
pullrequests: notifications@superset.apache.org
|
||||||
|
discussions: notifications@superset.apache.org
|
||||||
|
|
||||||
github:
|
github:
|
||||||
|
del_branch_on_merge: true
|
||||||
description: "Apache Superset is a Data Visualization and Data Exploration Platform"
|
description: "Apache Superset is a Data Visualization and Data Exploration Platform"
|
||||||
homepage: https://superset.apache.org/
|
homepage: https://superset.apache.org/
|
||||||
labels:
|
labels:
|
||||||
@@ -47,12 +54,17 @@ github:
|
|||||||
projects: true
|
projects: true
|
||||||
# Enable wiki for documentation
|
# Enable wiki for documentation
|
||||||
wiki: true
|
wiki: true
|
||||||
|
# Enable discussions
|
||||||
|
discussions: true
|
||||||
|
|
||||||
enabled_merge_buttons:
|
enabled_merge_buttons:
|
||||||
squash: true
|
squash: true
|
||||||
merge: false
|
merge: false
|
||||||
rebase: false
|
rebase: false
|
||||||
|
|
||||||
|
ghp_branch: gh-pages
|
||||||
|
ghp_path: /
|
||||||
|
|
||||||
protected_branches:
|
protected_branches:
|
||||||
master:
|
master:
|
||||||
required_status_checks:
|
required_status_checks:
|
||||||
@@ -69,18 +81,17 @@ github:
|
|||||||
- cypress-matrix (3, chrome)
|
- cypress-matrix (3, chrome)
|
||||||
- cypress-matrix (4, chrome)
|
- cypress-matrix (4, chrome)
|
||||||
- cypress-matrix (5, chrome)
|
- cypress-matrix (5, chrome)
|
||||||
|
- dependency-review
|
||||||
- frontend-build
|
- frontend-build
|
||||||
|
- playwright-tests (chromium)
|
||||||
- pre-commit (current)
|
- pre-commit (current)
|
||||||
- pre-commit (next)
|
|
||||||
- pre-commit (previous)
|
- pre-commit (previous)
|
||||||
- test-mysql
|
- test-mysql
|
||||||
- test-postgres (current)
|
- test-postgres (current)
|
||||||
- test-postgres (next)
|
|
||||||
- test-postgres-hive
|
- test-postgres-hive
|
||||||
- test-postgres-presto
|
- test-postgres-presto
|
||||||
- test-sqlite
|
- test-sqlite
|
||||||
- unit-tests (current)
|
- unit-tests (current)
|
||||||
- unit-tests (next)
|
|
||||||
|
|
||||||
required_pull_request_reviews:
|
required_pull_request_reviews:
|
||||||
dismiss_stale_reviews: false
|
dismiss_stale_reviews: false
|
||||||
@@ -88,3 +99,10 @@ github:
|
|||||||
required_approving_review_count: 1
|
required_approving_review_count: 1
|
||||||
|
|
||||||
required_signatures: false
|
required_signatures: false
|
||||||
|
gh-pages:
|
||||||
|
required_pull_request_reviews:
|
||||||
|
dismiss_stale_reviews: false
|
||||||
|
require_code_owner_reviews: true
|
||||||
|
required_approving_review_count: 1
|
||||||
|
|
||||||
|
required_signatures: false
|
||||||
|
|||||||
10
.claude/commands/js-to-ts.md
Normal file
10
.claude/commands/js-to-ts.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# JavaScript to TypeScript Migration Command
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
```
|
||||||
|
/js-to-ts <core-filename>
|
||||||
|
```
|
||||||
|
- `<core-filename>` - Path to CORE file relative to `superset-frontend/` (e.g., `src/utils/common.js`, `src/middleware/loggerMiddleware.js`)
|
||||||
|
|
||||||
|
## Agent Instructions
|
||||||
|
**See:** [../projects/js-to-ts/AGENT.md](../projects/js-to-ts/AGENT.md) for complete migration guide.
|
||||||
684
.claude/projects/js-to-ts/AGENT.md
Normal file
684
.claude/projects/js-to-ts/AGENT.md
Normal file
@@ -0,0 +1,684 @@
|
|||||||
|
# JavaScript to TypeScript Migration Agent Guide
|
||||||
|
|
||||||
|
**Complete technical reference for converting JavaScript/JSX files to TypeScript/TSX in Apache Superset frontend.**
|
||||||
|
|
||||||
|
**Agent Role:** Atomic migration unit - migrate the core file + ALL related tests/mocks as one cohesive unit. Use `git mv` to preserve history, NO `git commit`. NO global import changes. Report results upon completion.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Migration Principles
|
||||||
|
|
||||||
|
1. **Atomic migration units** - Core file + all related tests/mocks migrate together
|
||||||
|
2. **Zero `any` types** - Use proper TypeScript throughout
|
||||||
|
3. **Leverage existing types** - Reuse established definitions
|
||||||
|
4. **Type inheritance** - Derivatives extend base component types
|
||||||
|
5. **Strategic placement** - File types for maximum discoverability
|
||||||
|
6. **Surgical improvements** - Enhance existing types during migration
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 0: Dependency Check (MANDATORY)
|
||||||
|
|
||||||
|
**Command:**
|
||||||
|
```bash
|
||||||
|
grep -E "from '\.\./.*\.jsx?'|from '\./.*\.jsx?'|from 'src/.*\.jsx?'" superset-frontend/{filename}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Decision:**
|
||||||
|
- ✅ No matches → Proceed with atomic migration (core + tests + mocks)
|
||||||
|
- ❌ Matches found → EXIT with dependency report (see format below)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 1: Identify Related Files (REQUIRED)
|
||||||
|
|
||||||
|
**Atomic Migration Scope:**
|
||||||
|
For core file `src/utils/example.js`, also migrate:
|
||||||
|
- `src/utils/example.test.js` / `src/utils/example.test.jsx`
|
||||||
|
- `src/utils/example.spec.js` / `src/utils/example.spec.jsx`
|
||||||
|
- `src/utils/__mocks__/example.js`
|
||||||
|
- Any other related test/mock files found by pattern matching
|
||||||
|
|
||||||
|
**Find all related test and mock files:**
|
||||||
|
```bash
|
||||||
|
# Pattern-based search for related files
|
||||||
|
basename=$(basename {filename} .js)
|
||||||
|
dirname=$(dirname superset-frontend/{filename})
|
||||||
|
|
||||||
|
# Find test files
|
||||||
|
find "$dirname" -name "${basename}.test.js" -o -name "${basename}.test.jsx"
|
||||||
|
find "$dirname" -name "${basename}.spec.js" -o -name "${basename}.spec.jsx"
|
||||||
|
|
||||||
|
# Find mock files
|
||||||
|
find "$dirname" -name "__mocks__/${basename}.js"
|
||||||
|
find "$dirname" -name "${basename}.mock.js"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Migration Requirement:** All discovered related files MUST be migrated together as one atomic unit.
|
||||||
|
|
||||||
|
**Test File Creation:** If NO test files exist for the core file, CREATE a minimal test file using the following pattern:
|
||||||
|
- Location: Same directory as core file
|
||||||
|
- Name: `{basename}.test.ts` (e.g., `DebouncedMessageQueue.test.ts`)
|
||||||
|
- Content: Basic test structure importing and testing the main functionality
|
||||||
|
- Use proper TypeScript types in test file
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🗺️ Type Reference Map
|
||||||
|
|
||||||
|
### From `@superset-ui/core`
|
||||||
|
```typescript
|
||||||
|
// Data & Query
|
||||||
|
QueryFormData, QueryData, JsonObject, AnnotationData, AdhocMetric
|
||||||
|
LatestQueryFormData, GenericDataType, DatasourceType, ExtraFormData
|
||||||
|
DataMaskStateWithId, NativeFilterScope, NativeFiltersState, NativeFilterTarget
|
||||||
|
|
||||||
|
// UI & Theme
|
||||||
|
FeatureFlagMap, LanguagePack, ColorSchemeConfig, SequentialSchemeConfig
|
||||||
|
```
|
||||||
|
|
||||||
|
### From `@superset-ui/chart-controls`
|
||||||
|
```typescript
|
||||||
|
Dataset, ColumnMeta, ControlStateMapping
|
||||||
|
```
|
||||||
|
|
||||||
|
### From Local Types (`src/types/`)
|
||||||
|
```typescript
|
||||||
|
// Authentication
|
||||||
|
User, UserWithPermissionsAndRoles, BootstrapUser, PermissionsAndRoles
|
||||||
|
|
||||||
|
// Dashboard
|
||||||
|
Dashboard, DashboardState, DashboardInfo, DashboardLayout, LayoutItem
|
||||||
|
ComponentType, ChartConfiguration, ActiveFilters
|
||||||
|
|
||||||
|
// Charts
|
||||||
|
Chart, ChartState, ChartStatus, ChartLinkedDashboard, Slice, SaveActionType
|
||||||
|
|
||||||
|
// Data
|
||||||
|
Datasource, Database, Owner, Role
|
||||||
|
|
||||||
|
// UI Components
|
||||||
|
TagType, FavoriteStatus, Filter, ImportResourceName
|
||||||
|
```
|
||||||
|
|
||||||
|
### From Domain Types
|
||||||
|
```typescript
|
||||||
|
// src/dashboard/types.ts
|
||||||
|
RootState, ChartsState, DatasourcesState, FilterBarOrientation
|
||||||
|
ChartCrossFiltersConfig, ActiveTabs, MenuKeys
|
||||||
|
|
||||||
|
// src/explore/types.ts
|
||||||
|
ExplorePageInitialData, ExplorePageState, ExploreResponsePayload, OptionSortType
|
||||||
|
|
||||||
|
// src/SqlLab/types.ts
|
||||||
|
[SQL Lab specific types]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ Type Organization Strategy
|
||||||
|
|
||||||
|
### Type Placement Hierarchy
|
||||||
|
|
||||||
|
1. **Component-Colocated** (90% of cases)
|
||||||
|
```typescript
|
||||||
|
// Same file as component
|
||||||
|
interface MyComponentProps {
|
||||||
|
title: string;
|
||||||
|
onClick: () => void;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Feature-Shared**
|
||||||
|
```typescript
|
||||||
|
// src/[domain]/components/[Feature]/types.ts
|
||||||
|
export interface FilterConfiguration {
|
||||||
|
filterId: string;
|
||||||
|
targets: NativeFilterTarget[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Domain-Wide**
|
||||||
|
```typescript
|
||||||
|
// src/[domain]/types.ts
|
||||||
|
export interface ExploreFormData extends QueryFormData {
|
||||||
|
viz_type: string;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Global**
|
||||||
|
```typescript
|
||||||
|
// src/types/[TypeName].ts
|
||||||
|
export interface ApiResponse<T> {
|
||||||
|
result: T;
|
||||||
|
count?: number;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Type Discovery Commands
|
||||||
|
```bash
|
||||||
|
# Search existing types before creating
|
||||||
|
find superset-frontend/src -name "types.ts" -exec grep -l "[TypeConcept]" {} \;
|
||||||
|
grep -r "interface.*Props\|type.*Props" superset-frontend/src/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Derivative Component Patterns
|
||||||
|
|
||||||
|
**Rule:** Components that extend others should extend their type interfaces.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// ✅ Base component type
|
||||||
|
interface SelectProps {
|
||||||
|
value: string | number;
|
||||||
|
options: SelectOption[];
|
||||||
|
onChange: (value: string | number) => void;
|
||||||
|
disabled?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Derivative extends base
|
||||||
|
interface ChartSelectProps extends SelectProps {
|
||||||
|
charts: Chart[];
|
||||||
|
onChartSelect: (chart: Chart) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Derivative with modified props
|
||||||
|
interface DatabaseSelectProps extends Omit<SelectProps, 'value' | 'onChange'> {
|
||||||
|
value: number; // Narrowed type
|
||||||
|
onChange: (databaseId: number) => void; // Specific signature
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Common Patterns:**
|
||||||
|
- **Extension:** `extends BaseProps` - adds new props
|
||||||
|
- **Omission:** `Omit<BaseProps, 'prop'>` - removes props
|
||||||
|
- **Modification:** `Omit<BaseProps, 'prop'> & { prop: NewType }` - changes prop type
|
||||||
|
- **Restriction:** Override with narrower types (union → specific)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Migration Recipe
|
||||||
|
|
||||||
|
### Step 2: File Conversion
|
||||||
|
```bash
|
||||||
|
# Use git mv to preserve history
|
||||||
|
git mv component.js component.ts
|
||||||
|
git mv Component.jsx Component.tsx
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Import & Type Setup
|
||||||
|
```typescript
|
||||||
|
// Import order (enforced by linting)
|
||||||
|
import { FC, ReactNode } from 'react';
|
||||||
|
import { JsonObject, QueryFormData } from '@superset-ui/core';
|
||||||
|
import { Dataset } from '@superset-ui/chart-controls';
|
||||||
|
import type { Dashboard } from 'src/types/Dashboard';
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 4: Function & Component Typing
|
||||||
|
```typescript
|
||||||
|
// Functions with proper parameter/return types
|
||||||
|
export function processData(
|
||||||
|
data: Dataset[],
|
||||||
|
config: JsonObject
|
||||||
|
): ProcessedData[] {
|
||||||
|
// implementation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Component props with inheritance
|
||||||
|
interface ComponentProps extends BaseProps {
|
||||||
|
data: Chart[];
|
||||||
|
onSelect: (id: number) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Component: FC<ComponentProps> = ({ data, onSelect }) => {
|
||||||
|
// implementation
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 5: State & Redux Typing
|
||||||
|
```typescript
|
||||||
|
// Hooks with specific types
|
||||||
|
const [data, setData] = useState<Chart[]>([]);
|
||||||
|
const [selected, setSelected] = useState<number | null>(null);
|
||||||
|
|
||||||
|
// Redux with existing RootState
|
||||||
|
const mapStateToProps = (state: RootState) => ({
|
||||||
|
charts: state.charts,
|
||||||
|
user: state.user,
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 Type Debugging Strategies (Real-World Learnings)
|
||||||
|
|
||||||
|
### The Evolution of Type Approaches
|
||||||
|
When you hit type errors, follow this debugging evolution:
|
||||||
|
|
||||||
|
#### 1. ❌ Idealized Union Types (First Attempt)
|
||||||
|
```typescript
|
||||||
|
// Looks clean but doesn't match reality
|
||||||
|
type DatasourceInput = Datasource | QueryEditor;
|
||||||
|
```
|
||||||
|
**Problem**: Real calling sites pass variations, not exact types.
|
||||||
|
|
||||||
|
#### 2. ❌ Overly Precise Types (Second Attempt)
|
||||||
|
```typescript
|
||||||
|
// Tried to match exact calling signatures
|
||||||
|
type DatasourceInput =
|
||||||
|
| IDatasource // From DatasourcePanel
|
||||||
|
| (QueryEditor & { columns: ColumnMeta[] }); // From SaveQuery
|
||||||
|
```
|
||||||
|
**Problem**: Too rigid, doesn't handle legacy variations.
|
||||||
|
|
||||||
|
#### 3. ✅ Flexible Interface (Final Solution)
|
||||||
|
```typescript
|
||||||
|
// Captures what the function actually needs
|
||||||
|
interface DatasourceInput {
|
||||||
|
name?: string | null; // Allow null for compatibility
|
||||||
|
datasource_name?: string | null; // Legacy variations
|
||||||
|
columns?: any[]; // Multiple column types accepted
|
||||||
|
database?: { id?: number };
|
||||||
|
// ... other optional properties
|
||||||
|
}
|
||||||
|
```
|
||||||
|
**Success**: Works with all calling sites, focuses on function needs.
|
||||||
|
|
||||||
|
### Type Debugging Process
|
||||||
|
1. **Start with compilation errors** - they show exact mismatches
|
||||||
|
2. **Examine actual usage** - look at calling sites, not idealized types
|
||||||
|
3. **Build flexible interfaces** - capture what functions need, not rigid contracts
|
||||||
|
4. **Iterate based on downstream validation** - let calling sites guide your types
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 Anti-Patterns to Avoid
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// ❌ Never use any
|
||||||
|
const obj: any = {};
|
||||||
|
|
||||||
|
// ✅ Use proper types
|
||||||
|
const obj: Record<string, JsonObject> = {};
|
||||||
|
|
||||||
|
// ❌ Don't recreate base component props
|
||||||
|
interface ChartSelectProps {
|
||||||
|
value: string; // Duplicated from SelectProps
|
||||||
|
onChange: () => void; // Duplicated from SelectProps
|
||||||
|
charts: Chart[]; // New prop
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Inherit and extend
|
||||||
|
interface ChartSelectProps extends SelectProps {
|
||||||
|
charts: Chart[]; // Only new props
|
||||||
|
}
|
||||||
|
|
||||||
|
// ❌ Don't create ad-hoc type variations
|
||||||
|
interface UserInfo {
|
||||||
|
name: string;
|
||||||
|
email: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Extend existing types (DRY principle)
|
||||||
|
import { User } from 'src/types/bootstrapTypes';
|
||||||
|
type UserDisplayInfo = Pick<User, 'firstName' | 'lastName' | 'email'>;
|
||||||
|
|
||||||
|
// ❌ Don't create overly rigid unions
|
||||||
|
type StrictInput = ExactTypeA | ExactTypeB;
|
||||||
|
|
||||||
|
// ✅ Create flexible interfaces for function parameters
|
||||||
|
interface FlexibleInput {
|
||||||
|
// Focus on what the function actually needs
|
||||||
|
commonProperty: string;
|
||||||
|
optionalVariations?: any; // Allow for legacy variations
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📍 DRY Type Guidelines (WHERE TYPES BELONG)
|
||||||
|
|
||||||
|
### Type Placement Rules
|
||||||
|
**CRITICAL**: Type variations must live close to where they belong, not scattered across files.
|
||||||
|
|
||||||
|
#### ✅ Proper Type Organization
|
||||||
|
```typescript
|
||||||
|
// ❌ Don't create one-off interfaces in utility files
|
||||||
|
// src/utils/datasourceUtils.ts
|
||||||
|
interface DatasourceInput { /* custom interface */ } // Wrong!
|
||||||
|
|
||||||
|
// ✅ Use existing types or extend them in their proper domain
|
||||||
|
// src/utils/datasourceUtils.ts
|
||||||
|
import { IDatasource } from 'src/explore/components/DatasourcePanel';
|
||||||
|
import { QueryEditor } from 'src/SqlLab/types';
|
||||||
|
|
||||||
|
// Create flexible interface that references existing types
|
||||||
|
interface FlexibleDatasourceInput {
|
||||||
|
// Properties that actually exist across variations
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Type Location Hierarchy
|
||||||
|
1. **Domain Types**: `src/{domain}/types.ts` (dashboard, explore, SqlLab)
|
||||||
|
2. **Component Types**: Co-located with components
|
||||||
|
3. **Global Types**: `src/types/` directory
|
||||||
|
4. **Utility Types**: Only when they truly don't belong elsewhere
|
||||||
|
|
||||||
|
#### ✅ DRY Type Patterns
|
||||||
|
```typescript
|
||||||
|
// ✅ Extend existing domain types
|
||||||
|
interface SaveQueryData extends Pick<QueryEditor, 'sql' | 'dbId' | 'catalog'> {
|
||||||
|
columns: ColumnMeta[]; // Add what's needed
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Create flexible interfaces for cross-domain utilities
|
||||||
|
interface CrossDomainInput {
|
||||||
|
// Common properties that exist across different source types
|
||||||
|
name?: string | null; // Accommodate legacy null values
|
||||||
|
// Only include properties the function actually uses
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 PropTypes Auto-Generation (Elegant Approach)
|
||||||
|
|
||||||
|
**IMPORTANT**: Superset has `babel-plugin-typescript-to-proptypes` configured to automatically generate PropTypes from TypeScript interfaces. Use this instead of manual PropTypes duplication!
|
||||||
|
|
||||||
|
### ❌ Manual PropTypes Duplication (Avoid This)
|
||||||
|
```typescript
|
||||||
|
export interface MyComponentProps {
|
||||||
|
title: string;
|
||||||
|
count?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 8+ lines of manual PropTypes duplication 😱
|
||||||
|
const propTypes = PropTypes.shape({
|
||||||
|
title: PropTypes.string.isRequired,
|
||||||
|
count: PropTypes.number,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default propTypes;
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ Auto-Generated PropTypes (Use This)
|
||||||
|
```typescript
|
||||||
|
import { InferProps } from 'prop-types';
|
||||||
|
|
||||||
|
export interface MyComponentProps {
|
||||||
|
title: string;
|
||||||
|
count?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Single validator function - babel plugin auto-generates PropTypes! ✨
|
||||||
|
export default function MyComponentValidator(props: MyComponentProps) {
|
||||||
|
return null; // PropTypes auto-assigned by babel-plugin-typescript-to-proptypes
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional: For consumers needing PropTypes type inference
|
||||||
|
export type MyComponentPropsInferred = InferProps<typeof MyComponentValidator>;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Migration Pattern for Type-Only Files
|
||||||
|
|
||||||
|
**When migrating type-only files with manual PropTypes:**
|
||||||
|
|
||||||
|
1. **Keep the TypeScript interfaces** (single source of truth)
|
||||||
|
2. **Replace manual PropTypes** with validator function
|
||||||
|
3. **Remove PropTypes imports** and manual shape definitions
|
||||||
|
4. **Add InferProps import** if type inference needed
|
||||||
|
|
||||||
|
**Example Migration:**
|
||||||
|
```typescript
|
||||||
|
// Before: 25+ lines with manual PropTypes duplication
|
||||||
|
export interface AdhocFilterType { /* ... */ }
|
||||||
|
const adhocFilterTypePropTypes = PropTypes.oneOfType([...]);
|
||||||
|
|
||||||
|
// After: 3 lines with auto-generation
|
||||||
|
export interface AdhocFilterType { /* ... */ }
|
||||||
|
export default function AdhocFilterValidator(props: { filter: AdhocFilterType }) {
|
||||||
|
return null; // Auto-generated PropTypes by babel plugin
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Component PropTypes Pattern
|
||||||
|
|
||||||
|
**For React components, the babel plugin works automatically:**
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
interface ComponentProps {
|
||||||
|
title: string;
|
||||||
|
onClick: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const MyComponent: FC<ComponentProps> = ({ title, onClick }) => {
|
||||||
|
// Component implementation
|
||||||
|
};
|
||||||
|
|
||||||
|
// PropTypes automatically generated by babel plugin - no manual work needed!
|
||||||
|
export default MyComponent;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Auto-Generation Benefits
|
||||||
|
|
||||||
|
- ✅ **Single source of truth**: TypeScript interfaces drive PropTypes
|
||||||
|
- ✅ **No duplication**: Eliminate 15-20 lines of manual PropTypes code
|
||||||
|
- ✅ **Automatic updates**: Changes to TypeScript automatically update PropTypes
|
||||||
|
- ✅ **Type safety**: Compile-time checking ensures PropTypes match interfaces
|
||||||
|
- ✅ **Backward compatibility**: Existing JavaScript components continue working
|
||||||
|
|
||||||
|
### Babel Plugin Configuration
|
||||||
|
|
||||||
|
The plugin is already configured in `babel.config.js`:
|
||||||
|
```javascript
|
||||||
|
['babel-plugin-typescript-to-proptypes', { loose: true }]
|
||||||
|
```
|
||||||
|
|
||||||
|
**No additional setup required** - just use TypeScript interfaces and the plugin handles the rest!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Test File Migration Patterns
|
||||||
|
|
||||||
|
### Test File Priority
|
||||||
|
- **Always migrate test files** alongside production files
|
||||||
|
- **Test files are often leaf nodes** - good starting candidates
|
||||||
|
- **Create tests if missing** - Leverage new TypeScript types for better test coverage
|
||||||
|
|
||||||
|
### Test-Specific Type Patterns
|
||||||
|
```typescript
|
||||||
|
// Mock interfaces for testing
|
||||||
|
interface MockStore {
|
||||||
|
getState: () => Partial<RootState>; // Partial allows minimal mocking
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type-safe mocking for complex objects
|
||||||
|
const mockDashboardInfo: Partial<DashboardInfo> as DashboardInfo = {
|
||||||
|
id: 123,
|
||||||
|
json_metadata: '{}',
|
||||||
|
};
|
||||||
|
|
||||||
|
// Sinon stub typing
|
||||||
|
let postStub: sinon.SinonStub;
|
||||||
|
beforeEach(() => {
|
||||||
|
postStub = sinon.stub(SupersetClient, 'post');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Use stub reference instead of original method
|
||||||
|
expect(postStub.callCount).toBe(1);
|
||||||
|
expect(postStub.getCall(0).args[0].endpoint).toMatch('/api/');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Test Migration Recipe
|
||||||
|
1. **Migrate production file first** (if both need migration)
|
||||||
|
2. **Update test imports** to point to `.ts/.tsx` files
|
||||||
|
3. **Add proper mock typing** using `Partial<T> as T` pattern
|
||||||
|
4. **Fix stub typing** - Use stub references, not original methods
|
||||||
|
5. **Verify all tests pass** with TypeScript compilation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Type Conflict Resolution
|
||||||
|
|
||||||
|
### Multiple Type Definitions Issue
|
||||||
|
**Problem**: Same type name defined in multiple files causes compilation errors.
|
||||||
|
|
||||||
|
**Example**: `DashboardInfo` defined in both:
|
||||||
|
- `src/dashboard/reducers/types.ts` (minimal)
|
||||||
|
- `src/dashboard/components/Header/types.ts` (different shape)
|
||||||
|
- `src/dashboard/types.ts` (complete - used by RootState)
|
||||||
|
|
||||||
|
### Resolution Strategy
|
||||||
|
1. **Identify the authoritative type**:
|
||||||
|
```bash
|
||||||
|
# Find which type is used by RootState/main interfaces
|
||||||
|
grep -r "DashboardInfo" src/dashboard/types.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Use import from authoritative source**:
|
||||||
|
```typescript
|
||||||
|
// ✅ Import from main domain types
|
||||||
|
import { RootState, DashboardInfo } from 'src/dashboard/types';
|
||||||
|
|
||||||
|
// ❌ Don't import from component-specific files
|
||||||
|
import { DashboardInfo } from 'src/dashboard/components/Header/types';
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Mock complex types in tests**:
|
||||||
|
```typescript
|
||||||
|
// For testing - provide minimal required fields
|
||||||
|
const mockInfo: Partial<DashboardInfo> as DashboardInfo = {
|
||||||
|
id: 123,
|
||||||
|
json_metadata: '{}',
|
||||||
|
// Only provide fields actually used in test
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Type Hierarchy Discovery Commands
|
||||||
|
```bash
|
||||||
|
# Find all definitions of a type
|
||||||
|
grep -r "interface.*TypeName\|type.*TypeName" src/
|
||||||
|
|
||||||
|
# Find import usage patterns
|
||||||
|
grep -r "import.*TypeName" src/
|
||||||
|
|
||||||
|
# Check what RootState uses
|
||||||
|
grep -A 10 -B 10 "TypeName" src/*/types.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agent Constraints (CRITICAL)
|
||||||
|
|
||||||
|
1. **Use git mv** - Run `git mv file.js file.ts` to preserve git history, but NO `git commit`
|
||||||
|
2. **NO global import changes** - Don't update imports across codebase
|
||||||
|
3. **Type files OK** - Can modify existing type files to improve/align types
|
||||||
|
4. **Single-File TypeScript Validation** (CRITICAL) - tsc has known issues with multi-file compilation:
|
||||||
|
- **Core Issue**: TypeScript's `tsc` has documented problems validating multiple files simultaneously in complex projects
|
||||||
|
- **Solution**: ALWAYS validate files one at a time using individual `tsc` calls
|
||||||
|
- **Command Pattern**: `cd superset-frontend && npx tscw --noEmit --allowJs --composite false --project tsconfig.json {single-file-path}`
|
||||||
|
- **Why**: Multi-file validation can produce false positives, miss real errors, and conflict during parallel agent execution
|
||||||
|
5. **Downstream Impact Validation** (CRITICAL) - Your migration affects calling sites:
|
||||||
|
- **Find downstream files**: `find superset-frontend/src -name "*.tsx" -o -name "*.ts" | xargs grep -l "your-core-filename" 2>/dev/null || echo "No files found"`
|
||||||
|
- **Validate each downstream file individually**: `cd superset-frontend && npx tscw --noEmit --allowJs --composite false --project tsconfig.json {each-downstream-file}`
|
||||||
|
- **Fix type mismatches** you introduced in calling sites
|
||||||
|
- **NEVER ignore downstream errors** - they indicate your types don't match reality
|
||||||
|
6. **Avoid Project-Wide Validation During Migration**:
|
||||||
|
- **NEVER use `npm run type`** during parallel agent execution - produces unreliable results
|
||||||
|
- **Single-file validation is authoritative** - trust individual file checks over project-wide scans
|
||||||
|
6. **ESLint validation** - Run `npm run eslint -- --fix {file}` for each migrated file to auto-fix formatting/linting issues
|
||||||
|
6. Zero `any` types - use proper TypeScript types
|
||||||
|
7. Search existing types before creating new ones
|
||||||
|
8. Follow patterns from this guide
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Success Report Format
|
||||||
|
|
||||||
|
```
|
||||||
|
SUCCESS: Atomic Migration of {core-filename}
|
||||||
|
|
||||||
|
## Files Migrated (Atomic Unit)
|
||||||
|
- Core: {core-filename} → {core-filename.ts/tsx}
|
||||||
|
- Tests: {list-of-test-files} → {list-of-test-files.ts/tsx} OR "CREATED: {basename}.test.ts"
|
||||||
|
- Mocks: {list-of-mock-files} → {list-of-mock-files.ts}
|
||||||
|
- Type files modified: {list-of-type-files}
|
||||||
|
|
||||||
|
## Types Created/Improved
|
||||||
|
- {TypeName}: {location} ({scope}) - {rationale}
|
||||||
|
- {ExistingType}: enhanced in {location} - {improvement-description}
|
||||||
|
|
||||||
|
## Documentation Recommendations
|
||||||
|
- ADD_TO_DIRECTORY: {TypeName} - {reason}
|
||||||
|
- NO_DOCUMENTATION: {TypeName} - {reason}
|
||||||
|
|
||||||
|
## Quality Validation
|
||||||
|
- **Single-File TypeScript Validation**: ✅ PASS - Core files individually validated
|
||||||
|
- Core file: `npx tscw --noEmit --allowJs --composite false --project tsconfig.json {core-file}`
|
||||||
|
- Test files: `npx tscw --noEmit --allowJs --composite false --project tsconfig.json {test-file}` (if exists)
|
||||||
|
- **Downstream Impact Check**: ✅ PASS - Found {N} files importing this module, all validate individually
|
||||||
|
- Downstream files: {list-of-files-that-import-your-module}
|
||||||
|
- Individual validation: `npx tscw --noEmit --allowJs --composite false --project tsconfig.json {each-downstream-file}`
|
||||||
|
- **ESLint validation**: ✅ PASS (using `npm run eslint -- --fix {files}` to auto-fix formatting)
|
||||||
|
- **Zero any types**: ✅ PASS
|
||||||
|
- **Local imports resolved**: ✅ PASS
|
||||||
|
- **Functionality preserved**: ✅ PASS
|
||||||
|
- **Tests pass** (if test file): ✅ PASS
|
||||||
|
- **Follow-up action required**: {YES/NO}
|
||||||
|
|
||||||
|
## Validation Strategy Notes
|
||||||
|
- **Single-file approach used**: Avoided multi-file tsc validation due to known TypeScript compilation issues
|
||||||
|
- **Project-wide validation skipped**: `npm run type` not used during parallel migration to prevent false positives
|
||||||
|
|
||||||
|
## Migration Learnings
|
||||||
|
- Type conflicts encountered: {describe any multiple type definitions}
|
||||||
|
- Mock patterns used: {describe test mocking approaches}
|
||||||
|
- Import hierarchy decisions: {note authoritative type sources used}
|
||||||
|
- PropTypes strategy: {AUTO_GENERATED via babel plugin | MANUAL_DUPLICATION_REMOVED | N/A}
|
||||||
|
|
||||||
|
## Improvement Suggestions for Documentation
|
||||||
|
- AGENT.md enhancement: {suggest additions to migration guide}
|
||||||
|
- Common pattern identified: {note reusable patterns for future migrations}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dependency Block Report Format
|
||||||
|
|
||||||
|
```
|
||||||
|
DEPENDENCY_BLOCK: Cannot migrate {filename}
|
||||||
|
|
||||||
|
## Blocking Dependencies
|
||||||
|
- {path}: {type} - {usage} - {priority}
|
||||||
|
|
||||||
|
## Impact Analysis
|
||||||
|
- Estimated types: {number}
|
||||||
|
- Expected locations: {list}
|
||||||
|
- Cross-domain: {YES/NO}
|
||||||
|
|
||||||
|
## Recommended Order
|
||||||
|
{ordered-list}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Quick Reference
|
||||||
|
|
||||||
|
**Type Utilities:**
|
||||||
|
- `Record<K, V>` - Object with specific key/value types
|
||||||
|
- `Partial<T>` - All properties optional
|
||||||
|
- `Pick<T, K>` - Subset of properties
|
||||||
|
- `Omit<T, K>` - Exclude specific properties
|
||||||
|
- `NonNullable<T>` - Exclude null/undefined
|
||||||
|
|
||||||
|
**Event Types:**
|
||||||
|
- `MouseEvent<HTMLButtonElement>`
|
||||||
|
- `ChangeEvent<HTMLInputElement>`
|
||||||
|
- `FormEvent<HTMLFormElement>`
|
||||||
|
|
||||||
|
**React Types:**
|
||||||
|
- `FC<Props>` - Functional component
|
||||||
|
- `ReactNode` - Any renderable content
|
||||||
|
- `CSSProperties` - Style objects
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Remember:** Every type should add value and clarity. The goal is meaningful type safety that catches bugs and improves developer experience.
|
||||||
199
.claude/projects/js-to-ts/COORDINATOR.md
Normal file
199
.claude/projects/js-to-ts/COORDINATOR.md
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
# JS-to-TS Coordinator Workflow
|
||||||
|
|
||||||
|
**Role:** Strategic migration coordination - select leaf-node files, trigger agents, review results, handle integration, manage dependencies.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Core File Selection Strategy
|
||||||
|
|
||||||
|
**Target ONLY Core Files**: Coordinators identify core files (production code), agents handle related tests/mocks atomically.
|
||||||
|
|
||||||
|
**File Analysis Commands**:
|
||||||
|
```bash
|
||||||
|
# Find CORE files with no JS/JSX dependencies (exclude tests/mocks) - SIZE PRIORITIZED
|
||||||
|
find superset-frontend/src -name "*.js" -o -name "*.jsx" | grep -v "test\|spec\|mock" | xargs wc -l | sort -n | head -20
|
||||||
|
|
||||||
|
# Alternative: Get file sizes in lines with paths
|
||||||
|
find superset-frontend/src -name "*.js" -o -name "*.jsx" | grep -v "test\|spec\|mock" | while read file; do
|
||||||
|
lines=$(wc -l < "$file")
|
||||||
|
echo "$lines $file"
|
||||||
|
done | sort -n | head -20
|
||||||
|
|
||||||
|
# Check dependencies for core files only (start with smallest)
|
||||||
|
for file in <core-files-sorted-by-size>; do
|
||||||
|
echo "=== $file ($(wc -l < "$file") lines) ==="
|
||||||
|
grep -E "from '\.\./.*\.jsx?'|from '\./.*\.jsx?'|from 'src/.*\.jsx?'" "$file" || echo "✅ LEAF CANDIDATE"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Identify heavily imported files (migrate last)
|
||||||
|
grep -r "from.*utils/common" superset-frontend/src/ | wc -l
|
||||||
|
|
||||||
|
# Quick leaf analysis with size priority
|
||||||
|
find superset-frontend/src -name "*.js" -o -name "*.jsx" | grep -v "test\|spec\|mock" | head -30 | while read file; do
|
||||||
|
deps=$(grep -E "from '\.\./.*\.jsx?'|from '\./.*\.jsx?'|from 'src/.*\.jsx?'" "$file" | wc -l)
|
||||||
|
lines=$(wc -l < "$file")
|
||||||
|
if [ "$deps" -eq 0 ]; then
|
||||||
|
echo "✅ LEAF: $lines lines - $file"
|
||||||
|
fi
|
||||||
|
done | sort -n
|
||||||
|
```
|
||||||
|
|
||||||
|
**Priority Order** (Smallest files first for easier wins):
|
||||||
|
1. **Small leaf files** (<50 lines) - No JS/JSX imports, quick TypeScript conversion
|
||||||
|
2. **Medium leaf files** (50-200 lines) - Self-contained utilities and helpers
|
||||||
|
3. **Small dependency files** (<100 lines) - Import only already-migrated files
|
||||||
|
4. **Larger components** (200+ lines) - Complex but well-contained functionality
|
||||||
|
5. **Core foundational files** (utils/common.js, controls.jsx) - migrate last regardless of size
|
||||||
|
|
||||||
|
**Size-First Benefits**:
|
||||||
|
- Faster completion builds momentum
|
||||||
|
- Earlier validation of migration patterns
|
||||||
|
- Easier rollback if issues arise
|
||||||
|
- Better success rate for agent learning
|
||||||
|
|
||||||
|
**Migration Unit**: Each agent call migrates:
|
||||||
|
- 1 core file (primary target)
|
||||||
|
- All related `*.test.js/jsx` files
|
||||||
|
- All related `*.mock.js` files
|
||||||
|
- All related `__mocks__/` files
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Task Creation & Agent Control
|
||||||
|
|
||||||
|
### Task Triggering
|
||||||
|
When triggering the `/js-to-ts` command:
|
||||||
|
- **Task Title**: Use the core filename as the task title (e.g., "DebouncedMessageQueue.js migration", "hostNamesConfig.js migration")
|
||||||
|
- **Task Description**: Include the full relative path to help agent locate the file
|
||||||
|
- **Reference**: Point agent to [AGENT.md](./AGENT.md) for technical instructions
|
||||||
|
|
||||||
|
### Post-Processing Workflow
|
||||||
|
After each agent completes:
|
||||||
|
|
||||||
|
1. **Review Agent Report**: Always read and analyze the complete agent report
|
||||||
|
2. **Share Summary**: Provide user with key highlights from agent's work:
|
||||||
|
- Files migrated (core + tests/mocks)
|
||||||
|
- Types created or improved
|
||||||
|
- Any validation issues or coordinator actions needed
|
||||||
|
3. **Quality Assessment**: Evaluate agent's TypeScript implementation against criteria:
|
||||||
|
- ✅ **Type Usage**: Proper types used, no `any` types
|
||||||
|
- ✅ **Type Filing**: Types placed in correct hierarchy (component → feature → domain → global)
|
||||||
|
- ✅ **Side Effects**: No unintended changes to other files
|
||||||
|
- ✅ **Import Alignment**: Proper .ts/.tsx import extensions
|
||||||
|
4. **Integration Decision**:
|
||||||
|
- **COMMIT**: If agent work is complete and high quality
|
||||||
|
- **FIX & COMMIT**: If minor issues need coordinator fixes
|
||||||
|
- **ROLLBACK**: If major issues require complete rework
|
||||||
|
5. **Next Action**: Ask user preference - commit this work or trigger next migration
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Integration Decision Framework
|
||||||
|
|
||||||
|
**Automatic Integration** ✅:
|
||||||
|
- `npm run type` passes without errors
|
||||||
|
- Agent created clean TypeScript with proper types
|
||||||
|
- Types appropriately filed in hierarchy
|
||||||
|
|
||||||
|
**Coordinator Integration** (Fix Side-Effects) 🔧:
|
||||||
|
- `npm run type` fails BUT agent's work is high quality
|
||||||
|
- Good type usage, proper patterns, well-organized
|
||||||
|
- Side-effects are manageable TypeScript compilation errors
|
||||||
|
- **Coordinator Action**: Integrate the change, then fix global compilation issues
|
||||||
|
|
||||||
|
**Rollback Only** ❌:
|
||||||
|
- Agent introduced `any` types or poor type choices
|
||||||
|
- Types poorly organized or conflicting with existing patterns
|
||||||
|
- Fundamental approach issues requiring complete rework
|
||||||
|
|
||||||
|
**Integration Process**:
|
||||||
|
1. **Review**: Agent already used `git mv` to preserve history
|
||||||
|
2. **Fix Side-Effects**: Update dependent files with proper import extensions
|
||||||
|
3. **Resolve Types**: Fix any cascading type issues across codebase
|
||||||
|
4. **Validate**: Ensure `npm run type` passes after fixes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Common Integration Patterns
|
||||||
|
|
||||||
|
**Common Side-Effects (Expect These)**:
|
||||||
|
- **Type import conflicts**: Multiple definitions of same type name
|
||||||
|
- **Mock object typing**: Tests need complete type satisfaction
|
||||||
|
- **Stub method references**: Use stub vars instead of original methods
|
||||||
|
|
||||||
|
**Coordinator Fixes (Standard Process)**:
|
||||||
|
1. **Import Resolution**:
|
||||||
|
```bash
|
||||||
|
# Find authoritative type source
|
||||||
|
grep -r "TypeName" src/*/types.ts
|
||||||
|
# Import from domain types (src/dashboard/types.ts) not component types
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Test Mock Completion**:
|
||||||
|
```typescript
|
||||||
|
// Use Partial<T> as T pattern for minimal mocking
|
||||||
|
const mockDashboard: Partial<DashboardInfo> as DashboardInfo = {
|
||||||
|
id: 123,
|
||||||
|
json_metadata: '{}',
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Stub Reference Fixes**:
|
||||||
|
```typescript
|
||||||
|
// ✅ Use stub variable
|
||||||
|
expect(postStub.callCount).toBe(1);
|
||||||
|
// ❌ Don't use original method
|
||||||
|
expect(SupersetClient.post.callCount).toBe(1);
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Validation Commands**:
|
||||||
|
```bash
|
||||||
|
npm run type # TypeScript compilation
|
||||||
|
npm test -- filename # Test functionality
|
||||||
|
git status # Should show rename, not add/delete
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. File Categories for Planning
|
||||||
|
|
||||||
|
### Leaf Files (Start Here)
|
||||||
|
**Self-contained files with minimal JS/JSX dependencies**:
|
||||||
|
- Test files (80 files) - Usually only import the file being tested
|
||||||
|
- Utility files without internal dependencies
|
||||||
|
- Components importing only external libraries
|
||||||
|
|
||||||
|
### Heavily Imported Files (Migrate Last)
|
||||||
|
**Core files that many others depend on**:
|
||||||
|
- `utils/common.js` - Core utility functions
|
||||||
|
- `utils/reducerUtils.js` - Redux helpers
|
||||||
|
- `@superset-ui/core` equivalent files
|
||||||
|
- Major state management files (`explore/store.js`, `dashboard/actions/`)
|
||||||
|
|
||||||
|
### Complex Components (Middle Priority)
|
||||||
|
**Large files requiring careful type analysis**:
|
||||||
|
- `components/Datasource/DatasourceEditor.jsx` (1,809 lines)
|
||||||
|
- `explore/components/controls/AnnotationLayerControl/AnnotationLayer.jsx` (1,031 lines)
|
||||||
|
- `explore/components/ExploreViewContainer/index.jsx` (911 lines)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Success Metrics & Continuous Improvement
|
||||||
|
|
||||||
|
**Per-File Gates**:
|
||||||
|
- ✅ `npm run type` passes after each migration
|
||||||
|
- ✅ Zero `any` types introduced
|
||||||
|
- ✅ All imports properly typed
|
||||||
|
- ✅ Types filed in correct hierarchy
|
||||||
|
|
||||||
|
**Linear Scheduling**:
|
||||||
|
When agents report `DEPENDENCY_BLOCK`:
|
||||||
|
- Queue dependencies in linear order
|
||||||
|
- Process one file at a time to avoid conflicts
|
||||||
|
- Handle cascading type changes between files
|
||||||
|
|
||||||
|
**After Each Migration**:
|
||||||
|
1. **Update guides** with new patterns discovered
|
||||||
|
2. **Document coordinator fixes** that become common
|
||||||
|
3. **Enhance agent instructions** based on recurring issues
|
||||||
|
4. **Track success metrics** - automatic vs coordinator integration rates
|
||||||
76
.claude/projects/js-to-ts/PROJECT.md
Normal file
76
.claude/projects/js-to-ts/PROJECT.md
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# JavaScript to TypeScript Migration Project
|
||||||
|
|
||||||
|
Progressive migration of 219 JS/JSX files to TypeScript in Apache Superset frontend.
|
||||||
|
|
||||||
|
## 📁 Project Documentation
|
||||||
|
|
||||||
|
- **[AGENT.md](./AGENT.md)** - Complete technical migration guide for agents (includes type reference, patterns, validation)
|
||||||
|
- **[COORDINATOR.md](./COORDINATOR.md)** - Strategic workflow for coordinators (file selection, task management, integration)
|
||||||
|
|
||||||
|
## 🎯 Quick Start
|
||||||
|
|
||||||
|
**For Agents:** Read [AGENT.md](./AGENT.md) for complete migration instructions
|
||||||
|
**For Coordinators:** Read [COORDINATOR.md](./COORDINATOR.md) for workflow and [AGENT.md](./AGENT.md) for supervision
|
||||||
|
|
||||||
|
**Command:** `/js-to-ts <filename>` - See [../../commands/js-to-ts.md](../../commands/js-to-ts.md)
|
||||||
|
|
||||||
|
## 📊 Migration Progress
|
||||||
|
|
||||||
|
**Scope**: 219 files total (112 JS + 107 JSX)
|
||||||
|
- Production files: 139 (63%)
|
||||||
|
- Test files: 80 (37%)
|
||||||
|
|
||||||
|
**Strategy**: Leaf-first migration with dependency-aware coordination
|
||||||
|
|
||||||
|
### Completed Migrations ✅
|
||||||
|
|
||||||
|
1. **roundDecimal** - `plugins/legacy-plugin-chart-map-box/src/utils/roundDecimal.js`
|
||||||
|
- Migrated core + test files
|
||||||
|
- Added proper TypeScript function signature with optional precision parameter
|
||||||
|
- All tests pass
|
||||||
|
|
||||||
|
2. **timeGrainSqlaAnimationOverrides** - `src/explore/controlPanels/timeGrainSqlaAnimationOverrides.js`
|
||||||
|
- Migrated to TypeScript with ControlPanelState and Dataset types
|
||||||
|
- Added TimeGrainOverrideState interface for return type
|
||||||
|
- Used type guards for safe property access
|
||||||
|
|
||||||
|
3. **DebouncedMessageQueue** - `src/utils/DebouncedMessageQueue.js`
|
||||||
|
- Migrated to TypeScript with proper generics
|
||||||
|
- Created DebouncedMessageQueueOptions interface
|
||||||
|
- **CREATED test file** with 4 comprehensive test cases
|
||||||
|
- Excellent class property typing with private/readonly modifiers
|
||||||
|
|
||||||
|
**Files Migrated**: 3/219 (1.4%)
|
||||||
|
**Tests Created**: 2 (roundDecimal had existing, DebouncedMessageQueue created)
|
||||||
|
|
||||||
|
### Next Candidates (Leaf Nodes) 🎯
|
||||||
|
|
||||||
|
**Identified leaf files with no JS/JSX dependencies:**
|
||||||
|
- `src/utils/hostNamesConfig.js` - Domain configuration utility
|
||||||
|
- `src/explore/controlPanels/Separator.js` - Control panel configuration
|
||||||
|
- `src/middleware/loggerMiddleware.js` - Logging middleware
|
||||||
|
|
||||||
|
**Migration Quality**: All completed migrations have:
|
||||||
|
- ✅ Zero `any` types
|
||||||
|
- ✅ Proper TypeScript compilation
|
||||||
|
- ✅ ESLint validation passed
|
||||||
|
- ✅ Test coverage (created where missing)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📈 Success Metrics
|
||||||
|
|
||||||
|
**Per-File Gates**:
|
||||||
|
- ✅ `npm run type` passes after each migration
|
||||||
|
- ✅ Zero `any` types introduced
|
||||||
|
- ✅ All imports properly typed
|
||||||
|
- ✅ Types filed in correct hierarchy
|
||||||
|
|
||||||
|
**Overall Progress**:
|
||||||
|
- **Automatic Integration Rate**: 100% (3/3 migrations required no coordinator fixes)
|
||||||
|
- **Test Coverage**: Improved (1 new test file created)
|
||||||
|
- **Type Safety**: Enhanced with proper interfaces and generics
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*This is a claudette-managed progressive refactor. All documentation and coordination resources are organized under `.claude/projects/js-to-ts/`*
|
||||||
36
.coveragerc
Normal file
36
.coveragerc
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# .coveragerc to control coverage.py
|
||||||
|
[run]
|
||||||
|
branch = True
|
||||||
|
source = superset
|
||||||
|
# omit = bad_file.py
|
||||||
|
|
||||||
|
[paths]
|
||||||
|
source =
|
||||||
|
superset/
|
||||||
|
*/site-packages/
|
||||||
|
|
||||||
|
[report]
|
||||||
|
# Regexes for lines to exclude from consideration
|
||||||
|
exclude_lines =
|
||||||
|
# Have to re-enable the standard pragma
|
||||||
|
pragma: no cover
|
||||||
|
|
||||||
|
# Don't complain about missing debug-only code:
|
||||||
|
def __repr__
|
||||||
|
if self\.debug
|
||||||
|
|
||||||
|
# Don't complain if tests don't hit defensive assertion code:
|
||||||
|
raise AssertionError
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
# Don't complain if non-runnable code isn't run:
|
||||||
|
if 0:
|
||||||
|
if __name__ == .__main__.:
|
||||||
|
|
||||||
|
# Ignore importlib backport
|
||||||
|
from importlib
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
|
||||||
|
#fail_under = 100
|
||||||
|
show_missing = True
|
||||||
125
.cursor/rules/dev-standard.mdc
Normal file
125
.cursor/rules/dev-standard.mdc
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
---
|
||||||
|
description: Apache Superset development standards and guidelines for Cursor IDE
|
||||||
|
globs: ["**/*.py", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.sql", "**/*.md"]
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Apache Superset Development Standards for Cursor IDE
|
||||||
|
|
||||||
|
Apache Superset is a data visualization platform with Flask/Python backend and React/TypeScript frontend.
|
||||||
|
|
||||||
|
## ⚠️ CRITICAL: Ongoing Refactors (What NOT to Do)
|
||||||
|
|
||||||
|
**These migrations are actively happening - avoid deprecated patterns:**
|
||||||
|
|
||||||
|
### Frontend Modernization
|
||||||
|
- **NO `any` types** - Use proper TypeScript types
|
||||||
|
- **NO JavaScript files** - Convert to TypeScript (.ts/.tsx)
|
||||||
|
- **NO Enzyme** - Use React Testing Library/Jest (Enzyme fully removed)
|
||||||
|
- **Use @superset-ui/core** - Don't import Ant Design directly
|
||||||
|
|
||||||
|
### Testing Strategy Migration
|
||||||
|
- **Prefer unit tests** over integration tests
|
||||||
|
- **Prefer integration tests** over Cypress end-to-end tests
|
||||||
|
- **Cypress is last resort** - Actively moving away from Cypress
|
||||||
|
- **Use Jest + React Testing Library** for component testing
|
||||||
|
|
||||||
|
### Backend Type Safety
|
||||||
|
- **Add type hints** - All new Python code needs proper typing
|
||||||
|
- **MyPy compliance** - Run `pre-commit run mypy` to validate
|
||||||
|
- **SQLAlchemy typing** - Use proper model annotations
|
||||||
|
|
||||||
|
## Code Standards
|
||||||
|
|
||||||
|
### TypeScript Frontend
|
||||||
|
- **NO `any` types** - Use proper TypeScript
|
||||||
|
- **Functional components** with hooks
|
||||||
|
- **@superset-ui/core** for UI components (not direct antd)
|
||||||
|
- **Jest** for testing (NO Enzyme)
|
||||||
|
- **Redux** for global state, hooks for local
|
||||||
|
|
||||||
|
### Python Backend
|
||||||
|
- **Type hints required** for all new code
|
||||||
|
- **MyPy compliant** - run `pre-commit run mypy`
|
||||||
|
- **SQLAlchemy models** with proper typing
|
||||||
|
- **pytest** for testing
|
||||||
|
|
||||||
|
### Apache License Headers
|
||||||
|
- **New files require ASF license headers** - When creating new code files, include the standard Apache Software Foundation license header
|
||||||
|
- **LLM instruction files are excluded** - Files like LLMS.md, CLAUDE.md, etc. are in `.rat-excludes` to avoid header token overhead
|
||||||
|
|
||||||
|
## Key Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
superset/
|
||||||
|
├── superset/ # Python backend (Flask, SQLAlchemy)
|
||||||
|
│ ├── views/api/ # REST API endpoints
|
||||||
|
│ ├── models/ # Database models
|
||||||
|
│ └── connectors/ # Database connections
|
||||||
|
├── superset-frontend/src/ # React TypeScript frontend
|
||||||
|
│ ├── components/ # Reusable components
|
||||||
|
│ ├── explore/ # Chart builder
|
||||||
|
│ ├── dashboard/ # Dashboard interface
|
||||||
|
│ └── SqlLab/ # SQL editor
|
||||||
|
├── superset-frontend/packages/
|
||||||
|
│ └── superset-ui-core/ # UI component library (USE THIS)
|
||||||
|
├── tests/ # Python/integration tests
|
||||||
|
├── docs/ # Documentation (UPDATE FOR CHANGES)
|
||||||
|
└── UPDATING.md # Breaking changes log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture Patterns
|
||||||
|
|
||||||
|
### Dataset-Centric Approach
|
||||||
|
Charts built from enriched datasets containing:
|
||||||
|
- Dimension columns with labels/descriptions
|
||||||
|
- Predefined metrics as SQL expressions
|
||||||
|
- Self-service analytics within defined contexts
|
||||||
|
|
||||||
|
### Security & Features
|
||||||
|
- **RBAC**: Role-based access via Flask-AppBuilder
|
||||||
|
- **Feature flags**: Control feature rollouts
|
||||||
|
- **Row-level security**: SQL-based data access control
|
||||||
|
|
||||||
|
## Test Utilities
|
||||||
|
|
||||||
|
### Python Test Helpers
|
||||||
|
- **`SupersetTestCase`** - Base class in `tests/integration_tests/base_tests.py`
|
||||||
|
- **`@with_config`** - Config mocking decorator
|
||||||
|
- **`@with_feature_flags`** - Feature flag testing
|
||||||
|
- **`login_as()`, `login_as_admin()`** - Authentication helpers
|
||||||
|
- **`create_dashboard()`, `create_slice()`** - Data setup utilities
|
||||||
|
|
||||||
|
### TypeScript Test Helpers
|
||||||
|
- **`superset-frontend/spec/helpers/testing-library.tsx`** - Custom render() with providers
|
||||||
|
- **`createWrapper()`** - Redux/Router/Theme wrapper
|
||||||
|
- **`selectOption()`** - Select component helper
|
||||||
|
- **React Testing Library** - NO Enzyme (removed)
|
||||||
|
|
||||||
|
## Pre-commit Validation
|
||||||
|
|
||||||
|
**Use pre-commit hooks for quality validation:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install hooks
|
||||||
|
pre-commit install
|
||||||
|
|
||||||
|
# Quick validation (faster than --all-files)
|
||||||
|
pre-commit run # Staged files only
|
||||||
|
pre-commit run mypy # Python type checking
|
||||||
|
pre-commit run prettier # Code formatting
|
||||||
|
pre-commit run eslint # Frontend linting
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development Guidelines
|
||||||
|
|
||||||
|
- **Documentation**: Update docs/ for any user-facing changes
|
||||||
|
- **Breaking Changes**: Add to UPDATING.md
|
||||||
|
- **Docstrings**: Required for new functions/classes
|
||||||
|
- **Follow existing patterns**: Mimic code style, use existing libraries and utilities
|
||||||
|
- **Type Safety**: This codebase is actively modernizing toward full TypeScript and type safety
|
||||||
|
- **Always run `pre-commit run`** to validate changes before committing
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Note**: This codebase is actively modernizing toward full TypeScript and type safety. Always run `pre-commit run` to validate changes. Follow the ongoing refactors section to avoid deprecated patterns.
|
||||||
20
.devcontainer/Dockerfile
Normal file
20
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Keep this in sync with the base image in the main Dockerfile (ARG PY_VER)
|
||||||
|
FROM python:3.11.13-trixie AS base
|
||||||
|
|
||||||
|
# Install system dependencies that Superset needs
|
||||||
|
# This layer will be cached across Codespace sessions
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libsasl2-dev \
|
||||||
|
libldap2-dev \
|
||||||
|
libpq-dev \
|
||||||
|
tmux \
|
||||||
|
gh \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Install uv for fast Python package management
|
||||||
|
# This will also be cached in the image
|
||||||
|
RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \
|
||||||
|
echo 'export PATH="/root/.cargo/bin:$PATH"' >> /etc/bash.bashrc
|
||||||
|
|
||||||
|
# Set the cargo/bin directory in PATH for all users
|
||||||
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
||||||
5
.devcontainer/README.md
Normal file
5
.devcontainer/README.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Superset Development with GitHub Codespaces
|
||||||
|
|
||||||
|
For complete documentation on using GitHub Codespaces with Apache Superset, please see:
|
||||||
|
|
||||||
|
**[Setting up a Development Environment - GitHub Codespaces](https://superset.apache.org/docs/contributing/development#github-codespaces-cloud-development)**
|
||||||
62
.devcontainer/bashrc-additions
Normal file
62
.devcontainer/bashrc-additions
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Superset Codespaces environment setup
|
||||||
|
# This file is appended to ~/.bashrc during Codespace setup
|
||||||
|
|
||||||
|
# Find the workspace directory (handles both 'superset' and 'superset-2' names)
|
||||||
|
WORKSPACE_DIR=$(find /workspaces -maxdepth 1 -name "superset*" -type d | head -1)
|
||||||
|
|
||||||
|
if [ -n "$WORKSPACE_DIR" ]; then
|
||||||
|
# Check if virtual environment exists
|
||||||
|
if [ -d "$WORKSPACE_DIR/.venv" ]; then
|
||||||
|
# Activate the virtual environment
|
||||||
|
source "$WORKSPACE_DIR/.venv/bin/activate"
|
||||||
|
echo "✅ Python virtual environment activated"
|
||||||
|
|
||||||
|
# Verify pre-commit is installed and set up
|
||||||
|
if command -v pre-commit &> /dev/null; then
|
||||||
|
echo "✅ pre-commit is available ($(pre-commit --version))"
|
||||||
|
# Install git hooks if not already installed
|
||||||
|
if [ -d "$WORKSPACE_DIR/.git" ] && [ ! -f "$WORKSPACE_DIR/.git/hooks/pre-commit" ]; then
|
||||||
|
echo "🪝 Installing pre-commit hooks..."
|
||||||
|
cd "$WORKSPACE_DIR" && pre-commit install
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "⚠️ pre-commit not found. Run: pip install pre-commit"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "⚠️ Python virtual environment not found at $WORKSPACE_DIR/.venv"
|
||||||
|
echo " Run: cd $WORKSPACE_DIR && .devcontainer/setup-dev.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Always cd to the workspace directory for convenience
|
||||||
|
cd "$WORKSPACE_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add helpful aliases for Superset development
|
||||||
|
alias start-superset="$WORKSPACE_DIR/.devcontainer/start-superset.sh"
|
||||||
|
alias setup-dev="$WORKSPACE_DIR/.devcontainer/setup-dev.sh"
|
||||||
|
|
||||||
|
# Show helpful message on login
|
||||||
|
echo ""
|
||||||
|
echo "🚀 Superset Codespaces Environment"
|
||||||
|
echo "=================================="
|
||||||
|
|
||||||
|
# Check if Superset is running
|
||||||
|
if docker ps 2>/dev/null | grep -q "superset"; then
|
||||||
|
echo "✅ Superset is running!"
|
||||||
|
echo " - Check the 'Ports' tab for your live Superset URL"
|
||||||
|
echo " - Initial startup takes 10-20 minutes"
|
||||||
|
echo " - Login: admin/admin"
|
||||||
|
else
|
||||||
|
echo "⚠️ Superset is not running. Use: start-superset"
|
||||||
|
# Check if there's a startup log
|
||||||
|
if [ -f "/tmp/superset-startup.log" ]; then
|
||||||
|
echo " 📋 Startup log found: cat /tmp/superset-startup.log"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Quick commands:"
|
||||||
|
echo " start-superset - Start Superset with Docker Compose"
|
||||||
|
echo " setup-dev - Set up Python environment (if not already done)"
|
||||||
|
echo " pre-commit run - Run pre-commit checks on staged files"
|
||||||
|
echo ""
|
||||||
20
.devcontainer/build-and-push-image.sh
Executable file
20
.devcontainer/build-and-push-image.sh
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Script to build and push the devcontainer image to GitHub Container Registry
|
||||||
|
# This allows caching the image between Codespace sessions
|
||||||
|
|
||||||
|
# You'll need to run this with appropriate GitHub permissions
|
||||||
|
# gh auth login --scopes write:packages
|
||||||
|
|
||||||
|
REGISTRY="ghcr.io"
|
||||||
|
OWNER="apache"
|
||||||
|
REPO="superset"
|
||||||
|
TAG="devcontainer-base"
|
||||||
|
|
||||||
|
echo "Building devcontainer image..."
|
||||||
|
docker build -t $REGISTRY/$OWNER/$REPO:$TAG .devcontainer/
|
||||||
|
|
||||||
|
echo "Pushing to GitHub Container Registry..."
|
||||||
|
docker push $REGISTRY/$OWNER/$REPO:$TAG
|
||||||
|
|
||||||
|
echo "Done! Update .devcontainer/devcontainer.json to use:"
|
||||||
|
echo " \"image\": \"$REGISTRY/$OWNER/$REPO:$TAG\""
|
||||||
19
.devcontainer/default/devcontainer.json
Normal file
19
.devcontainer/default/devcontainer.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
// Extend the base configuration
|
||||||
|
"extends": "../devcontainer-base.json",
|
||||||
|
|
||||||
|
"name": "Apache Superset Development (Default)",
|
||||||
|
|
||||||
|
// Forward ports for development
|
||||||
|
"forwardPorts": [9001],
|
||||||
|
"portsAttributes": {
|
||||||
|
"9001": {
|
||||||
|
"label": "Superset (via Webpack Dev Server)",
|
||||||
|
"onAutoForward": "notify",
|
||||||
|
"visibility": "public"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Auto-start Superset on Codespace resume
|
||||||
|
"postStartCommand": ".devcontainer/start-superset.sh"
|
||||||
|
}
|
||||||
39
.devcontainer/devcontainer-base.json
Normal file
39
.devcontainer/devcontainer-base.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "Apache Superset Development",
|
||||||
|
// Keep this in sync with the base image in Dockerfile (ARG PY_VER)
|
||||||
|
// Using the same base as Dockerfile, but non-slim for dev tools
|
||||||
|
"image": "python:3.11.13-bookworm",
|
||||||
|
|
||||||
|
"features": {
|
||||||
|
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
||||||
|
"moby": true,
|
||||||
|
"dockerDashComposeVersion": "v2"
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers/features/node:1": {
|
||||||
|
"version": "20"
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers/features/git:1": {},
|
||||||
|
"ghcr.io/devcontainers/features/common-utils:2": {
|
||||||
|
"configureZshAsDefaultShell": true
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers/features/sshd:1": {
|
||||||
|
"version": "latest"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Run commands after container is created
|
||||||
|
"postCreateCommand": "chmod +x .devcontainer/setup-dev.sh && .devcontainer/setup-dev.sh",
|
||||||
|
|
||||||
|
// VS Code customizations
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": [
|
||||||
|
"ms-python.python",
|
||||||
|
"ms-python.vscode-pylance",
|
||||||
|
"charliermarsh.ruff",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
66
.devcontainer/devcontainer.json
Normal file
66
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"name": "Apache Superset Development",
|
||||||
|
// Option 1: Use pre-built image directly
|
||||||
|
// "image": "ghcr.io/apache/superset:devcontainer-base",
|
||||||
|
|
||||||
|
// Option 2: Build from Dockerfile with cache (current approach)
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile",
|
||||||
|
"context": ".",
|
||||||
|
// Cache from the Apache registry image
|
||||||
|
"cacheFrom": ["ghcr.io/apache/superset:devcontainer-base"]
|
||||||
|
},
|
||||||
|
|
||||||
|
"features": {
|
||||||
|
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
||||||
|
"moby": true,
|
||||||
|
"dockerDashComposeVersion": "v2"
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers/features/node:1": {
|
||||||
|
"version": "20"
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers/features/git:1": {},
|
||||||
|
"ghcr.io/devcontainers/features/common-utils:2": {
|
||||||
|
"configureZshAsDefaultShell": true
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers/features/sshd:1": {
|
||||||
|
"version": "latest"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Forward ports for development
|
||||||
|
"forwardPorts": [9001],
|
||||||
|
"portsAttributes": {
|
||||||
|
"9001": {
|
||||||
|
"label": "Superset (via Webpack Dev Server)",
|
||||||
|
"onAutoForward": "notify",
|
||||||
|
"visibility": "public"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Run commands after container is created
|
||||||
|
"postCreateCommand": "bash .devcontainer/setup-dev.sh || echo '⚠️ Setup had issues - run .devcontainer/setup-dev.sh manually'",
|
||||||
|
|
||||||
|
// Auto-start Superset after ensuring Docker is ready
|
||||||
|
// Run in foreground to see any errors, but don't block on failures
|
||||||
|
"postStartCommand": "bash -c 'echo \"Waiting 30s for services to initialize...\"; sleep 30; .devcontainer/start-superset.sh || echo \"⚠️ Auto-start failed - run start-superset manually\"'",
|
||||||
|
|
||||||
|
// Set environment variables
|
||||||
|
"remoteEnv": {
|
||||||
|
// Removed automatic venv activation to prevent startup issues
|
||||||
|
// The setup script will handle this
|
||||||
|
},
|
||||||
|
|
||||||
|
// VS Code customizations
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": [
|
||||||
|
"ms-python.python",
|
||||||
|
"ms-python.vscode-pylance",
|
||||||
|
"charliermarsh.ruff",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
32
.devcontainer/setup-dev.sh
Executable file
32
.devcontainer/setup-dev.sh
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Setup script for Superset Codespaces development environment
|
||||||
|
|
||||||
|
echo "🔧 Setting up Superset development environment..."
|
||||||
|
|
||||||
|
# The universal image has most tools, just need Superset-specific libs
|
||||||
|
echo "📦 Installing Superset-specific dependencies..."
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y \
|
||||||
|
libsasl2-dev \
|
||||||
|
libldap2-dev \
|
||||||
|
libpq-dev \
|
||||||
|
tmux \
|
||||||
|
gh
|
||||||
|
|
||||||
|
# Install uv for fast Python package management
|
||||||
|
echo "📦 Installing uv..."
|
||||||
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
|
|
||||||
|
# Add cargo/bin to PATH for uv
|
||||||
|
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
|
||||||
|
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.zshrc
|
||||||
|
|
||||||
|
# Install Claude Code CLI via npm
|
||||||
|
echo "🤖 Installing Claude Code..."
|
||||||
|
npm install -g @anthropic-ai/claude-code
|
||||||
|
|
||||||
|
# Make the start script executable
|
||||||
|
chmod +x .devcontainer/start-superset.sh
|
||||||
|
|
||||||
|
echo "✅ Development environment setup complete!"
|
||||||
|
echo "🚀 Run '.devcontainer/start-superset.sh' to start Superset"
|
||||||
69
.devcontainer/start-superset.sh
Executable file
69
.devcontainer/start-superset.sh
Executable file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Startup script for Superset in Codespaces
|
||||||
|
|
||||||
|
echo "🚀 Starting Superset in Codespaces..."
|
||||||
|
echo "🌐 Frontend will be available at port 9001"
|
||||||
|
|
||||||
|
# Check if MCP is enabled
|
||||||
|
if [ "$ENABLE_MCP" = "true" ]; then
|
||||||
|
echo "🤖 MCP Service will be available at port 5008"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find the workspace directory (Codespaces clones as 'superset', not 'superset-2')
|
||||||
|
WORKSPACE_DIR=$(find /workspaces -maxdepth 1 -name "superset*" -type d | head -1)
|
||||||
|
if [ -n "$WORKSPACE_DIR" ]; then
|
||||||
|
cd "$WORKSPACE_DIR"
|
||||||
|
echo "📁 Working in: $WORKSPACE_DIR"
|
||||||
|
else
|
||||||
|
echo "📁 Using current directory: $(pwd)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if docker is running
|
||||||
|
if ! docker info > /dev/null 2>&1; then
|
||||||
|
echo "⏳ Waiting for Docker to start..."
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clean up any existing containers
|
||||||
|
echo "🧹 Cleaning up existing containers..."
|
||||||
|
docker-compose -f docker-compose-light.yml --profile mcp down
|
||||||
|
|
||||||
|
# Start services
|
||||||
|
echo "🏗️ Building and starting services..."
|
||||||
|
echo ""
|
||||||
|
echo "📝 Once started, login with:"
|
||||||
|
echo " Username: admin"
|
||||||
|
echo " Password: admin"
|
||||||
|
echo ""
|
||||||
|
echo "📋 Running in foreground with live logs (Ctrl+C to stop)..."
|
||||||
|
|
||||||
|
# Run docker-compose and capture exit code
|
||||||
|
if [ "$ENABLE_MCP" = "true" ]; then
|
||||||
|
echo "🤖 Starting with MCP Service enabled..."
|
||||||
|
docker-compose -f docker-compose-light.yml --profile mcp up
|
||||||
|
else
|
||||||
|
docker-compose -f docker-compose-light.yml up
|
||||||
|
fi
|
||||||
|
EXIT_CODE=$?
|
||||||
|
|
||||||
|
# If it failed, provide helpful instructions
|
||||||
|
if [ $EXIT_CODE -ne 0 ] && [ $EXIT_CODE -ne 130 ]; then # 130 is Ctrl+C
|
||||||
|
echo ""
|
||||||
|
echo "❌ Superset startup failed (exit code: $EXIT_CODE)"
|
||||||
|
echo ""
|
||||||
|
echo "🔄 To restart Superset, run:"
|
||||||
|
echo " .devcontainer/start-superset.sh"
|
||||||
|
echo ""
|
||||||
|
echo "🔧 For troubleshooting:"
|
||||||
|
echo " # View logs:"
|
||||||
|
echo " docker-compose -f docker-compose-light.yml logs"
|
||||||
|
echo ""
|
||||||
|
echo " # Clean restart (removes volumes):"
|
||||||
|
echo " docker-compose -f docker-compose-light.yml down -v"
|
||||||
|
echo " .devcontainer/start-superset.sh"
|
||||||
|
echo ""
|
||||||
|
echo " # Common issues:"
|
||||||
|
echo " - Network timeouts: Just retry, often transient"
|
||||||
|
echo " - Port conflicts: Check 'docker ps'"
|
||||||
|
echo " - Database issues: Try clean restart with -v"
|
||||||
|
fi
|
||||||
29
.devcontainer/with-mcp/devcontainer.json
Normal file
29
.devcontainer/with-mcp/devcontainer.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
// Extend the base configuration
|
||||||
|
"extends": "../devcontainer-base.json",
|
||||||
|
|
||||||
|
"name": "Apache Superset Development with MCP",
|
||||||
|
|
||||||
|
// Forward ports for development
|
||||||
|
"forwardPorts": [9001, 5008],
|
||||||
|
"portsAttributes": {
|
||||||
|
"9001": {
|
||||||
|
"label": "Superset (via Webpack Dev Server)",
|
||||||
|
"onAutoForward": "notify",
|
||||||
|
"visibility": "public"
|
||||||
|
},
|
||||||
|
"5008": {
|
||||||
|
"label": "MCP Service (Model Context Protocol)",
|
||||||
|
"onAutoForward": "notify",
|
||||||
|
"visibility": "private"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Auto-start Superset with MCP on Codespace resume
|
||||||
|
"postStartCommand": "ENABLE_MCP=true .devcontainer/start-superset.sh",
|
||||||
|
|
||||||
|
// Environment variables
|
||||||
|
"containerEnv": {
|
||||||
|
"ENABLE_MCP": "true"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -34,7 +34,6 @@
|
|||||||
**/*.sqllite
|
**/*.sqllite
|
||||||
**/*.swp
|
**/*.swp
|
||||||
**/.terser-plugin-cache/
|
**/.terser-plugin-cache/
|
||||||
**/.storybook/
|
|
||||||
**/node_modules/
|
**/node_modules/
|
||||||
|
|
||||||
tests/
|
tests/
|
||||||
@@ -42,6 +41,8 @@ docs/
|
|||||||
install/
|
install/
|
||||||
superset-frontend/cypress-base/
|
superset-frontend/cypress-base/
|
||||||
superset-frontend/coverage/
|
superset-frontend/coverage/
|
||||||
|
superset-frontend/.temp_cache/
|
||||||
superset/static/assets/
|
superset/static/assets/
|
||||||
superset-websocket/dist/
|
superset-websocket/dist/
|
||||||
venv
|
venv
|
||||||
|
.venv
|
||||||
|
|||||||
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1,2 +1,4 @@
|
|||||||
docker/**/*.sh text eol=lf
|
docker/**/*.sh text eol=lf
|
||||||
*.svg binary
|
*.svg binary
|
||||||
|
*.ipynb binary
|
||||||
|
*.geojson binary
|
||||||
|
|||||||
22
.github/CODEOWNERS
vendored
22
.github/CODEOWNERS
vendored
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# https://github.com/apache/superset/issues/13351
|
# https://github.com/apache/superset/issues/13351
|
||||||
|
|
||||||
/superset/migrations/ @mistercrunch @michael-s-molina @betodealmeida @eschutho
|
/superset/migrations/ @mistercrunch @michael-s-molina @betodealmeida @eschutho @sadpandajoe
|
||||||
|
|
||||||
# Notify some committers of changes in the components
|
# Notify some committers of changes in the components
|
||||||
|
|
||||||
@@ -12,21 +12,31 @@
|
|||||||
|
|
||||||
# Notify Helm Chart maintainers about changes in it
|
# Notify Helm Chart maintainers about changes in it
|
||||||
|
|
||||||
/helm/superset/ @craig-rueda @dpgaspar @villebro @nytai @michael-s-molina
|
/helm/superset/ @craig-rueda @dpgaspar @villebro @nytai @michael-s-molina @mistercrunch @rusackas @Antonio-RiveroMartnez
|
||||||
|
|
||||||
# Notify E2E test maintainers of changes
|
# Notify E2E test maintainers of changes
|
||||||
|
|
||||||
/superset-frontend/cypress-base/ @jinghua-qa @geido @eschutho @rusackas @betodealmeida
|
/superset-frontend/cypress-base/ @sadpandajoe @geido @eschutho @rusackas @betodealmeida @mistercrunch
|
||||||
|
|
||||||
# Notify PMC members of changes to GitHub Actions
|
# Notify PMC members of changes to GitHub Actions
|
||||||
|
|
||||||
/.github/ @villebro @geido @eschutho @rusackas @betodealmeida @nytai @mistercrunch @craig-rueda @john-bodley @kgabryje @dpgaspar
|
/.github/ @villebro @geido @eschutho @rusackas @betodealmeida @nytai @mistercrunch @craig-rueda @kgabryje @dpgaspar @sadpandajoe
|
||||||
|
|
||||||
# Notify PMC members of changes to required GitHub Actions
|
# Notify PMC members of changes to required GitHub Actions
|
||||||
|
|
||||||
/.asf.yaml @villebro @geido @eschutho @rusackas @betodealmeida @nytai @mistercrunch @craig-rueda @john-bodley @kgabryje @dpgaspar
|
/.asf.yaml @villebro @geido @eschutho @rusackas @betodealmeida @nytai @mistercrunch @craig-rueda @kgabryje @dpgaspar @Antonio-RiveroMartnez
|
||||||
|
|
||||||
# Maps are a finnicky contribution process we care about
|
# Maps are a finicky contribution process we care about
|
||||||
|
|
||||||
**/*.geojson @villebro @rusackas
|
**/*.geojson @villebro @rusackas
|
||||||
/superset-frontend/plugins/legacy-plugin-chart-country-map/ @villebro @rusackas
|
/superset-frontend/plugins/legacy-plugin-chart-country-map/ @villebro @rusackas
|
||||||
|
|
||||||
|
# Notify PMC members of changes to extension-related files
|
||||||
|
|
||||||
|
/superset-core/ @michael-s-molina @villebro @geido @eschutho @rusackas @kgabryje
|
||||||
|
/superset-extensions-cli/ @michael-s-molina @villebro @geido @eschutho @rusackas @kgabryje
|
||||||
|
/superset/core/ @michael-s-molina @villebro @geido @eschutho @rusackas @kgabryje
|
||||||
|
/superset/extensions/ @michael-s-molina @villebro @geido @eschutho @rusackas @kgabryje
|
||||||
|
/superset-frontend/src/packages/superset-core/ @michael-s-molina @villebro @geido @eschutho @rusackas @kgabryje
|
||||||
|
/superset-frontend/src/core/ @michael-s-molina @villebro @geido @eschutho @rusackas @kgabryje
|
||||||
|
/superset-frontend/src/extensions/ @michael-s-molina @villebro @geido @eschutho @rusackas @kgabryje
|
||||||
|
|||||||
4
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
4
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -41,8 +41,8 @@ body:
|
|||||||
label: Superset version
|
label: Superset version
|
||||||
options:
|
options:
|
||||||
- master / latest-dev
|
- master / latest-dev
|
||||||
- "4.1.0"
|
- "5.0.0"
|
||||||
- "3.1.3"
|
- "4.1.3"
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
|
|||||||
19
.github/actions/change-detector/action.yml
vendored
19
.github/actions/change-detector/action.yml
vendored
@@ -1,24 +1,27 @@
|
|||||||
name: 'Change Detector'
|
name: Change Detector
|
||||||
description: 'Detects file changes for pull request and push events'
|
description: Detects file changes for pull request and push events
|
||||||
inputs:
|
inputs:
|
||||||
token:
|
token:
|
||||||
description: 'GitHub token for authentication'
|
description: GitHub token for authentication
|
||||||
required: true
|
required: true
|
||||||
outputs:
|
outputs:
|
||||||
python:
|
python:
|
||||||
description: 'Whether Python-related files were changed'
|
description: Whether Python-related files were changed
|
||||||
value: ${{ steps.change-detector.outputs.python }}
|
value: ${{ steps.change-detector.outputs.python }}
|
||||||
frontend:
|
frontend:
|
||||||
description: 'Whether frontend-related files were changed'
|
description: Whether frontend-related files were changed
|
||||||
value: ${{ steps.change-detector.outputs.frontend }}
|
value: ${{ steps.change-detector.outputs.frontend }}
|
||||||
docker:
|
docker:
|
||||||
description: 'Whether docker-related files were changed'
|
description: Whether docker-related files were changed
|
||||||
value: ${{ steps.change-detector.outputs.docker }}
|
value: ${{ steps.change-detector.outputs.docker }}
|
||||||
docs:
|
docs:
|
||||||
description: 'Whether docs-related files were changed'
|
description: Whether docs-related files were changed
|
||||||
value: ${{ steps.change-detector.outputs.docs }}
|
value: ${{ steps.change-detector.outputs.docs }}
|
||||||
|
superset-extensions-cli:
|
||||||
|
description: Whether superset-extensions-cli package-related files were changed
|
||||||
|
value: ${{ steps.change-detector.outputs.superset-extensions-cli }}
|
||||||
runs:
|
runs:
|
||||||
using: 'composite'
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- name: Detect file changes
|
- name: Detect file changes
|
||||||
id: change-detector
|
id: change-detector
|
||||||
|
|||||||
23
.github/actions/change-detector/label-draft-pr.yml
vendored
Normal file
23
.github/actions/change-detector/label-draft-pr.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
name: Label Draft PRs
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- converted_to_draft
|
||||||
|
jobs:
|
||||||
|
label-draft:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check if the PR is a draft
|
||||||
|
id: check-draft
|
||||||
|
uses: actions/github-script@v6
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const isDraft = context.payload.pull_request.draft;
|
||||||
|
core.setOutput('isDraft', isDraft);
|
||||||
|
- name: Add `review:draft` Label
|
||||||
|
if: steps.check-draft.outputs.isDraft == 'true'
|
||||||
|
uses: actions-ecosystem/action-add-labels@v1
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
labels: "review:draft"
|
||||||
17
.github/actions/setup-backend/action.yml
vendored
17
.github/actions/setup-backend/action.yml
vendored
@@ -26,11 +26,12 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
if [ "${{ inputs.python-version }}" = "current" ]; then
|
if [ "${{ inputs.python-version }}" = "current" ]; then
|
||||||
echo "PYTHON_VERSION=3.10" >> $GITHUB_ENV
|
|
||||||
elif [ "${{ inputs.python-version }}" = "next" ]; then
|
|
||||||
echo "PYTHON_VERSION=3.11" >> $GITHUB_ENV
|
echo "PYTHON_VERSION=3.11" >> $GITHUB_ENV
|
||||||
|
elif [ "${{ inputs.python-version }}" = "next" ]; then
|
||||||
|
# currently disabled in GHA matrixes because of library compatibility issues
|
||||||
|
echo "PYTHON_VERSION=3.12" >> $GITHUB_ENV
|
||||||
elif [ "${{ inputs.python-version }}" = "previous" ]; then
|
elif [ "${{ inputs.python-version }}" = "previous" ]; then
|
||||||
echo "PYTHON_VERSION=3.9" >> $GITHUB_ENV
|
echo "PYTHON_VERSION=3.10" >> $GITHUB_ENV
|
||||||
else
|
else
|
||||||
echo "PYTHON_VERSION=${{ inputs.python-version }}" >> $GITHUB_ENV
|
echo "PYTHON_VERSION=${{ inputs.python-version }}" >> $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
@@ -43,11 +44,15 @@ runs:
|
|||||||
run: |
|
run: |
|
||||||
if [ "${{ inputs.install-superset }}" = "true" ]; then
|
if [ "${{ inputs.install-superset }}" = "true" ]; then
|
||||||
sudo apt-get update && sudo apt-get -y install libldap2-dev libsasl2-dev
|
sudo apt-get update && sudo apt-get -y install libldap2-dev libsasl2-dev
|
||||||
pip install --upgrade pip setuptools wheel
|
|
||||||
|
pip install --upgrade pip setuptools wheel uv
|
||||||
|
|
||||||
if [ "${{ inputs.requirements-type }}" = "dev" ]; then
|
if [ "${{ inputs.requirements-type }}" = "dev" ]; then
|
||||||
pip install -r requirements/development.txt
|
uv pip install --system -r requirements/development.txt
|
||||||
elif [ "${{ inputs.requirements-type }}" = "base" ]; then
|
elif [ "${{ inputs.requirements-type }}" = "base" ]; then
|
||||||
pip install -r requirements/base.txt
|
uv pip install --system -r requirements/base.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
uv pip install --system -e .
|
||||||
fi
|
fi
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
69
.github/actions/setup-docker/action.yml
vendored
Normal file
69
.github/actions/setup-docker/action.yml
vendored
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
name: "Setup Docker Environment"
|
||||||
|
description: "Reusable steps for setting up QEMU, Docker Buildx, DockerHub login, Supersetbot, and optionally Docker Compose"
|
||||||
|
inputs:
|
||||||
|
build:
|
||||||
|
description: "Used for building?"
|
||||||
|
required: false
|
||||||
|
default: "false"
|
||||||
|
dockerhub-user:
|
||||||
|
description: "DockerHub username"
|
||||||
|
required: false
|
||||||
|
dockerhub-token:
|
||||||
|
description: "DockerHub token"
|
||||||
|
required: false
|
||||||
|
install-docker-compose:
|
||||||
|
description: "Flag to install Docker Compose"
|
||||||
|
required: false
|
||||||
|
default: "true"
|
||||||
|
login-to-dockerhub:
|
||||||
|
description: "Whether you want to log into dockerhub"
|
||||||
|
required: false
|
||||||
|
default: "true"
|
||||||
|
outputs: {}
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
if: ${{ inputs.build == 'true' }}
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
if: ${{ inputs.build == 'true' }}
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Try to login to DockerHub
|
||||||
|
if: ${{ inputs.login-to-dockerhub == 'true' }}
|
||||||
|
continue-on-error: true
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ inputs.dockerhub-user }}
|
||||||
|
password: ${{ inputs.dockerhub-token }}
|
||||||
|
|
||||||
|
- name: Install Docker Compose
|
||||||
|
if: ${{ inputs.install-docker-compose == 'true' }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y ca-certificates curl
|
||||||
|
sudo install -m 0755 -d /etc/apt/keyrings
|
||||||
|
|
||||||
|
# Download and save the Docker GPG key in the correct format
|
||||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
|
|
||||||
|
# Ensure the key file is readable
|
||||||
|
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||||||
|
|
||||||
|
# Add the Docker repository using the correct key
|
||||||
|
echo \
|
||||||
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
|
||||||
|
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
||||||
|
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
|
# Update package lists and install Docker Compose plugin
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y docker-compose-plugin
|
||||||
|
|
||||||
|
- name: Docker Version Info
|
||||||
|
shell: bash
|
||||||
|
run: docker info
|
||||||
1
.github/copilot-instructions.md
vendored
Symbolic link
1
.github/copilot-instructions.md
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../AGENTS.md
|
||||||
93
.github/dependabot.yml
vendored
93
.github/dependabot.yml
vendored
@@ -1,19 +1,24 @@
|
|||||||
version: 2
|
version: 2
|
||||||
|
enable-beta-ecosystems: true
|
||||||
updates:
|
updates:
|
||||||
|
|
||||||
- package-ecosystem: "github-actions"
|
- package-ecosystem: "github-actions"
|
||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
ignore:
|
ignore:
|
||||||
# not until React >= 18.0.0
|
# not until React >= 18.0.0
|
||||||
- dependency-name: "storybook"
|
- dependency-name: "storybook"
|
||||||
- dependency-name: "@storybook*"
|
- dependency-name: "@storybook*"
|
||||||
|
# JSDOM v30 doesn't play well with Jest v30
|
||||||
|
# Source: https://jestjs.io/blog#known-issues
|
||||||
|
# GH thread: https://github.com/jsdom/jsdom/issues/3492
|
||||||
|
- dependency-name: "jest-environment-jsdom"
|
||||||
directory: "/superset-frontend/"
|
directory: "/superset-frontend/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -21,29 +26,35 @@ updates:
|
|||||||
versioning-strategy: increase
|
versioning-strategy: increase
|
||||||
|
|
||||||
|
|
||||||
# - package-ecosystem: "pip"
|
# NOTE: `uv` support is in beta, more details here:
|
||||||
# NOTE: as dependabot isn't compatible with our python
|
# https://github.com/dependabot/dependabot-core/pull/10040#issuecomment-2696978430
|
||||||
# dependency setup (pip-compile-multi), we'll be using
|
- package-ecosystem: "uv"
|
||||||
# `supersetbot` instead
|
directory: "requirements/"
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
|
labels:
|
||||||
|
- uv
|
||||||
|
- dependabot
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: ".github/actions"
|
directory: ".github/actions"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
open-pull-requests-limit: 10
|
open-pull-requests-limit: 10
|
||||||
versioning-strategy: increase
|
versioning-strategy: increase
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/docs/"
|
directory: "/docs/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
open-pull-requests-limit: 10
|
open-pull-requests-limit: 10
|
||||||
versioning-strategy: increase
|
versioning-strategy: increase
|
||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-websocket/"
|
directory: "/superset-websocket/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -52,7 +63,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-websocket/utils/client-ws-app/"
|
directory: "/superset-websocket/utils/client-ws-app/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -64,7 +75,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-calendar/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-calendar/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -74,7 +85,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-histogram/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-histogram/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -84,7 +95,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-partition/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-partition/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -94,7 +105,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-world-map/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-world-map/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -104,7 +115,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/plugin-chart-pivot-table/"
|
directory: "/superset-frontend/plugins/plugin-chart-pivot-table/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -114,7 +125,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-chord/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-chord/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -124,7 +135,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-horizon/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-horizon/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -134,7 +145,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-rose/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-rose/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -144,7 +155,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-preset-chart-deckgl/"
|
directory: "/superset-frontend/plugins/legacy-preset-chart-deckgl/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -154,7 +165,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/plugin-chart-table/"
|
directory: "/superset-frontend/plugins/plugin-chart-table/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -164,7 +175,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-country-map/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-country-map/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -174,7 +185,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-map-box/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-map-box/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -184,7 +195,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sankey/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-sankey/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -194,7 +205,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-preset-chart-nvd3/"
|
directory: "/superset-frontend/plugins/legacy-preset-chart-nvd3/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -204,7 +215,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/plugin-chart-word-cloud/"
|
directory: "/superset-frontend/plugins/plugin-chart-word-cloud/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -214,7 +225,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-event-flow/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-event-flow/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -224,7 +235,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -234,7 +245,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sankey-loop/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-sankey-loop/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -244,7 +255,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/plugin-chart-echarts/"
|
directory: "/superset-frontend/plugins/plugin-chart-echarts/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -254,7 +265,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/preset-chart-xy/"
|
directory: "/superset-frontend/plugins/preset-chart-xy/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -264,7 +275,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-heatmap/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-heatmap/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -274,7 +285,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -284,7 +295,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sunburst/"
|
directory: "/superset-frontend/plugins/legacy-plugin-chart-sunburst/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -294,7 +305,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/plugins/plugin-chart-handlebars/"
|
directory: "/superset-frontend/plugins/plugin-chart-handlebars/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -304,7 +315,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/packages/generator-superset/"
|
directory: "/superset-frontend/packages/generator-superset/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -314,7 +325,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/packages/superset-ui-chart-controls/"
|
directory: "/superset-frontend/packages/superset-ui-chart-controls/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -323,8 +334,12 @@ updates:
|
|||||||
|
|
||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/packages/superset-ui-core/"
|
directory: "/superset-frontend/packages/superset-ui-core/"
|
||||||
|
ignore:
|
||||||
|
# not until React >= 18.0.0
|
||||||
|
- dependency-name: "react-markdown"
|
||||||
|
- dependency-name: "remark-gfm"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -334,7 +349,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/packages/superset-ui-demo/"
|
directory: "/superset-frontend/packages/superset-ui-demo/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
@@ -344,7 +359,7 @@ updates:
|
|||||||
- package-ecosystem: "npm"
|
- package-ecosystem: "npm"
|
||||||
directory: "/superset-frontend/packages/superset-ui-switchboard/"
|
directory: "/superset-frontend/packages/superset-ui-switchboard/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "monthly"
|
interval: "daily"
|
||||||
labels:
|
labels:
|
||||||
- npm
|
- npm
|
||||||
- dependabot
|
- dependabot
|
||||||
|
|||||||
5
.github/labeler.yml
vendored
5
.github/labeler.yml
vendored
@@ -127,6 +127,11 @@
|
|||||||
- any-glob-to-any-file:
|
- any-glob-to-any-file:
|
||||||
- 'superset/translations/es/**'
|
- 'superset/translations/es/**'
|
||||||
|
|
||||||
|
"i18n:persian":
|
||||||
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'superset/translations/fa/**'
|
||||||
|
|
||||||
############################################
|
############################################
|
||||||
# Sub-projects and monorepo packages
|
# Sub-projects and monorepo packages
|
||||||
############################################
|
############################################
|
||||||
|
|||||||
97
.github/workflows/bashlib.sh
vendored
97
.github/workflows/bashlib.sh
vendored
@@ -145,6 +145,7 @@ cypress-install() {
|
|||||||
|
|
||||||
cypress-run-all() {
|
cypress-run-all() {
|
||||||
local USE_DASHBOARD=$1
|
local USE_DASHBOARD=$1
|
||||||
|
local APP_ROOT=$2
|
||||||
cd "$GITHUB_WORKSPACE/superset-frontend/cypress-base"
|
cd "$GITHUB_WORKSPACE/superset-frontend/cypress-base"
|
||||||
|
|
||||||
# Start Flask and run it in background
|
# Start Flask and run it in background
|
||||||
@@ -152,7 +153,12 @@ cypress-run-all() {
|
|||||||
# so errors can print to stderr.
|
# so errors can print to stderr.
|
||||||
local flasklog="${HOME}/flask.log"
|
local flasklog="${HOME}/flask.log"
|
||||||
local port=8081
|
local port=8081
|
||||||
export CYPRESS_BASE_URL="http://localhost:${port}"
|
CYPRESS_BASE_URL="http://localhost:${port}"
|
||||||
|
if [ -n "$APP_ROOT" ]; then
|
||||||
|
export SUPERSET_APP_ROOT=$APP_ROOT
|
||||||
|
CYPRESS_BASE_URL=${CYPRESS_BASE_URL}${APP_ROOT}
|
||||||
|
fi
|
||||||
|
export CYPRESS_BASE_URL
|
||||||
|
|
||||||
nohup flask run --no-debugger -p $port >"$flasklog" 2>&1 </dev/null &
|
nohup flask run --no-debugger -p $port >"$flasklog" 2>&1 </dev/null &
|
||||||
local flaskProcessId=$!
|
local flaskProcessId=$!
|
||||||
@@ -176,6 +182,95 @@ cypress-run-all() {
|
|||||||
kill $flaskProcessId
|
kill $flaskProcessId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
playwright-install() {
|
||||||
|
cd "$GITHUB_WORKSPACE/superset-frontend"
|
||||||
|
|
||||||
|
say "::group::Install Playwright browsers"
|
||||||
|
npx playwright install --with-deps chromium
|
||||||
|
# Create output directories for test results and debugging
|
||||||
|
mkdir -p playwright-results
|
||||||
|
mkdir -p test-results
|
||||||
|
say "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
playwright-run() {
|
||||||
|
local APP_ROOT=$1
|
||||||
|
local TEST_PATH=$2
|
||||||
|
|
||||||
|
# Start Flask from the project root (same as Cypress)
|
||||||
|
cd "$GITHUB_WORKSPACE"
|
||||||
|
local flasklog="${HOME}/flask-playwright.log"
|
||||||
|
local port=8081
|
||||||
|
PLAYWRIGHT_BASE_URL="http://localhost:${port}"
|
||||||
|
if [ -n "$APP_ROOT" ]; then
|
||||||
|
export SUPERSET_APP_ROOT=$APP_ROOT
|
||||||
|
PLAYWRIGHT_BASE_URL=${PLAYWRIGHT_BASE_URL}${APP_ROOT}/
|
||||||
|
fi
|
||||||
|
export PLAYWRIGHT_BASE_URL
|
||||||
|
|
||||||
|
nohup flask run --no-debugger -p $port >"$flasklog" 2>&1 </dev/null &
|
||||||
|
local flaskProcessId=$!
|
||||||
|
|
||||||
|
# Ensure cleanup on exit
|
||||||
|
trap "kill $flaskProcessId 2>/dev/null || true" EXIT
|
||||||
|
|
||||||
|
# Wait for server to be ready with health check
|
||||||
|
local timeout=60
|
||||||
|
say "Waiting for Flask server to start on port $port..."
|
||||||
|
while [ $timeout -gt 0 ]; do
|
||||||
|
if curl -f ${PLAYWRIGHT_BASE_URL}/health >/dev/null 2>&1; then
|
||||||
|
say "Flask server is ready"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
timeout=$((timeout - 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $timeout -eq 0 ]; then
|
||||||
|
echo "::error::Flask server failed to start within 60 seconds"
|
||||||
|
echo "::group::Flask startup log"
|
||||||
|
cat "$flasklog"
|
||||||
|
echo "::endgroup::"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Change to frontend directory for Playwright execution
|
||||||
|
cd "$GITHUB_WORKSPACE/superset-frontend"
|
||||||
|
|
||||||
|
say "::group::Run Playwright tests"
|
||||||
|
echo "Running Playwright with baseURL: ${PLAYWRIGHT_BASE_URL}"
|
||||||
|
if [ -n "$TEST_PATH" ]; then
|
||||||
|
# Check if there are any test files in the specified path
|
||||||
|
if ! find "playwright/tests/${TEST_PATH}" -name "*.spec.ts" -type f 2>/dev/null | grep -q .; then
|
||||||
|
echo "No test files found in ${TEST_PATH} - skipping test run"
|
||||||
|
say "::endgroup::"
|
||||||
|
kill $flaskProcessId
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "Running tests: ${TEST_PATH}"
|
||||||
|
# Set INCLUDE_EXPERIMENTAL=true to allow experimental tests to run
|
||||||
|
export INCLUDE_EXPERIMENTAL=true
|
||||||
|
npx playwright test "${TEST_PATH}" --output=playwright-results
|
||||||
|
local status=$?
|
||||||
|
# Unset to prevent leaking into subsequent commands
|
||||||
|
unset INCLUDE_EXPERIMENTAL
|
||||||
|
else
|
||||||
|
echo "Running all required tests (experimental/ excluded via playwright.config.ts)"
|
||||||
|
npx playwright test --output=playwright-results
|
||||||
|
local status=$?
|
||||||
|
fi
|
||||||
|
say "::endgroup::"
|
||||||
|
|
||||||
|
# After job is done, print out Flask log for debugging
|
||||||
|
echo "::group::Flask log for Playwright run"
|
||||||
|
cat "$flasklog"
|
||||||
|
echo "::endgroup::"
|
||||||
|
# make sure the program exits
|
||||||
|
kill $flaskProcessId
|
||||||
|
|
||||||
|
return $status
|
||||||
|
}
|
||||||
|
|
||||||
eyes-storybook-dependencies() {
|
eyes-storybook-dependencies() {
|
||||||
say "::group::install eyes-storyook dependencies"
|
say "::group::install eyes-storyook dependencies"
|
||||||
sudo apt-get update -y && sudo apt-get -y install gconf-service ca-certificates libxshmfence-dev fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libglib2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libnspr4 libnss3 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release xdg-utils libappindicator1
|
sudo apt-get update -y && sudo apt-get -y install gconf-service ca-certificates libxshmfence-dev fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libglib2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libnspr4 libnss3 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release xdg-utils libappindicator1
|
||||||
|
|||||||
21
.github/workflows/bump-python-package.yml
vendored
21
.github/workflows/bump-python-package.yml
vendored
@@ -14,10 +14,16 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
description: Max number of PRs to open (0 for no limit)
|
description: Max number of PRs to open (0 for no limit)
|
||||||
default: 5
|
default: 5
|
||||||
|
extra-flags:
|
||||||
|
required: false
|
||||||
|
default: --only-base
|
||||||
|
description: Additional flags to pass to the bump-python command
|
||||||
|
#schedule:
|
||||||
|
# - cron: '0 0 * * *' # Runs daily at midnight UTC
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
bump-python-package:
|
bump-python-package:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
actions: write
|
actions: write
|
||||||
contents: write
|
contents: write
|
||||||
@@ -26,7 +32,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: true
|
persist-credentials: true
|
||||||
ref: master
|
ref: master
|
||||||
@@ -35,12 +41,12 @@ jobs:
|
|||||||
uses: ./.github/actions/setup-supersetbot/
|
uses: ./.github/actions/setup-supersetbot/
|
||||||
|
|
||||||
- name: Set up Python ${{ inputs.python-version }}
|
- name: Set up Python ${{ inputs.python-version }}
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: "3.10"
|
||||||
|
|
||||||
- name: Install pip-compile-multi
|
- name: Install uv
|
||||||
run: pip install pip-compile-multi
|
run: pip install uv
|
||||||
|
|
||||||
- name: supersetbot bump-python -p "${{ github.event.inputs.package }}"
|
- name: supersetbot bump-python -p "${{ github.event.inputs.package }}"
|
||||||
env:
|
env:
|
||||||
@@ -59,10 +65,13 @@ jobs:
|
|||||||
GROUP_OPT="-g ${{ github.event.inputs.group }}"
|
GROUP_OPT="-g ${{ github.event.inputs.group }}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
EXTRA_FLAGS="${{ github.event.inputs.extra-flags }}"
|
||||||
|
|
||||||
supersetbot bump-python \
|
supersetbot bump-python \
|
||||||
--verbose \
|
--verbose \
|
||||||
--use-current-repo \
|
--use-current-repo \
|
||||||
--include-subpackages \
|
--include-subpackages \
|
||||||
--limit ${{ github.event.inputs.limit }} \
|
--limit ${{ github.event.inputs.limit }} \
|
||||||
$PACKAGE_OPT \
|
$PACKAGE_OPT \
|
||||||
$GROUP_OPT
|
$GROUP_OPT \
|
||||||
|
$EXTRA_FLAGS
|
||||||
|
|||||||
4
.github/workflows/cancel_duplicates.yml
vendored
4
.github/workflows/cancel_duplicates.yml
vendored
@@ -9,7 +9,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
cancel-duplicate-runs:
|
cancel-duplicate-runs:
|
||||||
name: Cancel duplicate workflow runs
|
name: Cancel duplicate workflow runs
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
actions: write
|
actions: write
|
||||||
contents: read
|
contents: read
|
||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
|
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
if: steps.check_queued.outputs.count >= 20
|
if: steps.check_queued.outputs.count >= 20
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Cancel duplicate workflow runs
|
- name: Cancel duplicate workflow runs
|
||||||
if: steps.check_queued.outputs.count >= 20
|
if: steps.check_queued.outputs.count >= 20
|
||||||
|
|||||||
59
.github/workflows/check-python-deps.yml
vendored
Normal file
59
.github/workflows/check-python-deps.yml
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
name: Check python dependencies
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "master"
|
||||||
|
- "[0-9].[0-9]*"
|
||||||
|
pull_request:
|
||||||
|
types: [synchronize, opened, reopened, ready_for_review]
|
||||||
|
|
||||||
|
# cancel previous workflow jobs for PRs
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-python-deps:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
submodules: recursive
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Check for file changes
|
||||||
|
id: check
|
||||||
|
uses: ./.github/actions/change-detector/
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
if: steps.check.outputs.python
|
||||||
|
uses: ./.github/actions/setup-backend/
|
||||||
|
|
||||||
|
- name: Run uv
|
||||||
|
if: steps.check.outputs.python
|
||||||
|
run: ./scripts/uv-pip-compile.sh
|
||||||
|
|
||||||
|
- name: Check for uncommitted changes
|
||||||
|
if: steps.check.outputs.python
|
||||||
|
run: |
|
||||||
|
echo "Full diff (for logging/debugging):"
|
||||||
|
git diff
|
||||||
|
|
||||||
|
echo "Filtered diff (excluding comments and whitespace):"
|
||||||
|
filtered_diff=$(git diff -U0 | grep '^[-+]' | grep -vE '^[-+]{3}' | grep -vE '^[-+][[:space:]]*#' | grep -vE '^[-+][[:space:]]*$' || true)
|
||||||
|
echo "$filtered_diff"
|
||||||
|
|
||||||
|
if [[ -n "$filtered_diff" ]]; then
|
||||||
|
echo
|
||||||
|
echo "ERROR: The pinned dependencies are not up-to-date."
|
||||||
|
echo "Please run './scripts/uv-pip-compile.sh' and commit the changes."
|
||||||
|
echo "More info: https://github.com/apache/superset/tree/master/requirements"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "Pinned dependencies are up-to-date."
|
||||||
|
fi
|
||||||
@@ -19,15 +19,15 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
check_db_migration_conflict:
|
check_db_migration_conflict:
|
||||||
name: Check DB migration conflict
|
name: Check DB migration conflict
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Check and notify
|
- name: Check and notify
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v8
|
||||||
with:
|
with:
|
||||||
github-token: ${{ github.token }}
|
github-token: ${{ github.token }}
|
||||||
script: |
|
script: |
|
||||||
|
|||||||
82
.github/workflows/claude.yml
vendored
Normal file
82
.github/workflows/claude.yml
vendored
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
name: Claude PR Assistant
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_review_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-permissions:
|
||||||
|
if: |
|
||||||
|
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||||
|
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude'))
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
allowed: ${{ steps.check.outputs.allowed }}
|
||||||
|
steps:
|
||||||
|
- name: Check if user is allowed
|
||||||
|
id: check
|
||||||
|
run: |
|
||||||
|
# List of allowed users
|
||||||
|
ALLOWED_USERS="mistercrunch,rusackas"
|
||||||
|
|
||||||
|
# Get the commenter's username
|
||||||
|
COMMENTER="${{ github.event.comment.user.login }}"
|
||||||
|
|
||||||
|
echo "Checking permissions for user: $COMMENTER"
|
||||||
|
|
||||||
|
# Check if user is in allowed list
|
||||||
|
if [[ ",$ALLOWED_USERS," == *",$COMMENTER,"* ]]; then
|
||||||
|
echo "allowed=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "✅ User $COMMENTER is allowed to use Claude"
|
||||||
|
else
|
||||||
|
echo "allowed=false" >> $GITHUB_OUTPUT
|
||||||
|
echo "❌ User $COMMENTER is not allowed to use Claude"
|
||||||
|
fi
|
||||||
|
|
||||||
|
deny-access:
|
||||||
|
needs: check-permissions
|
||||||
|
if: needs.check-permissions.outputs.allowed == 'false'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- name: Comment access denied
|
||||||
|
uses: actions/github-script@v8
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const message = `👋 Hi @${{ github.event.comment.user.login || github.event.review.user.login || github.event.issue.user.login }}!
|
||||||
|
|
||||||
|
Thanks for trying to use Claude Code, but currently only certain team members have access to this feature.
|
||||||
|
|
||||||
|
If you believe you should have access, please contact a project maintainer.`;
|
||||||
|
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
body: message
|
||||||
|
});
|
||||||
|
|
||||||
|
claude-code-action:
|
||||||
|
needs: check-permissions
|
||||||
|
if: needs.check-permissions.outputs.allowed == 'true'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
issues: write
|
||||||
|
id-token: write
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Run Claude PR Action
|
||||||
|
uses: anthropics/claude-code-action@beta
|
||||||
|
with:
|
||||||
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||||
|
timeout_minutes: "60"
|
||||||
8
.github/workflows/codeql-analysis.yml
vendored
8
.github/workflows/codeql-analysis.yml
vendored
@@ -17,7 +17,7 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
actions: read
|
actions: read
|
||||||
contents: read
|
contents: read
|
||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Check for file changes
|
- name: Check for file changes
|
||||||
id: check
|
id: check
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@v4
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@@ -53,6 +53,6 @@ jobs:
|
|||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
if: steps.check.outputs.python || steps.check.outputs.frontend
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
uses: github/codeql-action/analyze@v3
|
uses: github/codeql-action/analyze@v4
|
||||||
with:
|
with:
|
||||||
category: "/language:${{matrix.language}}"
|
category: "/language:${{matrix.language}}"
|
||||||
|
|||||||
44
.github/workflows/dependency-review.yml
vendored
44
.github/workflows/dependency-review.yml
vendored
@@ -5,19 +5,32 @@
|
|||||||
# Source repository: https://github.com/actions/dependency-review-action
|
# 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
|
# 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"
|
name: "Dependency Review"
|
||||||
on: [pull_request]
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "master"
|
||||||
|
- "[0-9].[0-9]*"
|
||||||
|
pull_request:
|
||||||
|
types: [synchronize, opened, reopened, ready_for_review]
|
||||||
|
|
||||||
|
# cancel previous workflow jobs for PRs
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
dependency-review:
|
dependency-review:
|
||||||
runs-on: ubuntu-22.04
|
if: github.event_name == 'pull_request'
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout Repository"
|
- name: "Checkout Repository"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: "Dependency Review"
|
- name: "Dependency Review"
|
||||||
uses: actions/dependency-review-action@v4
|
uses: actions/dependency-review-action@v4
|
||||||
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
fail-on-severity: critical
|
fail-on-severity: critical
|
||||||
# compatible/incompatible licenses addressed here: https://www.apache.org/legal/resolved.html
|
# compatible/incompatible licenses addressed here: https://www.apache.org/legal/resolved.html
|
||||||
@@ -32,4 +45,27 @@ jobs:
|
|||||||
# license: https://applitools.com/legal/open-source-terms-of-use/
|
# license: https://applitools.com/legal/open-source-terms-of-use/
|
||||||
# pkg:npm/node-forge@1.3.1
|
# pkg:npm/node-forge@1.3.1
|
||||||
# selecting BSD-3-Clause licensing terms for node-forge to ensure compatibility with Apache
|
# selecting BSD-3-Clause licensing terms for node-forge to ensure compatibility with Apache
|
||||||
allow-dependencies-licenses: pkg:npm/store2@2.14.2, pkg:npm/applitools/core, pkg:npm/applitools/core-base, pkg:npm/applitools/css-tree, pkg:npm/applitools/ec-client, pkg:npm/applitools/eg-socks5-proxy-server, pkg:npm/applitools/eyes, pkg:npm/applitools/eyes-cypress, pkg:npm/applitools/nml-client, pkg:npm/applitools/tunnel-client, pkg:npm/applitools/utils, pkg:npm/node-forge@1.3.1, pkg:npm/rgbcolor
|
allow-dependencies-licenses: pkg:npm/store2@2.14.2, pkg:npm/applitools/core, pkg:npm/applitools/core-base, pkg:npm/applitools/css-tree, pkg:npm/applitools/ec-client, pkg:npm/applitools/eg-socks5-proxy-server, pkg:npm/applitools/eyes, pkg:npm/applitools/eyes-cypress, pkg:npm/applitools/nml-client, pkg:npm/applitools/tunnel-client, pkg:npm/applitools/utils, pkg:npm/node-forge@1.3.1, pkg:npm/rgbcolor, pkg:npm/jszip@3.10.1
|
||||||
|
|
||||||
|
python-dependency-liccheck:
|
||||||
|
# NOTE: Configuration for liccheck lives in our pyproject.yml.
|
||||||
|
# You cannot use a liccheck.ini file in this workflow.
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- name: "Checkout Repository"
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./.github/actions/setup-backend/
|
||||||
|
with:
|
||||||
|
requirements-type: base
|
||||||
|
|
||||||
|
- name: "Set up liccheck"
|
||||||
|
run: |
|
||||||
|
uv pip install --system liccheck
|
||||||
|
- name: "Run liccheck"
|
||||||
|
run: |
|
||||||
|
# run the checks
|
||||||
|
liccheck -R output.txt
|
||||||
|
# Print the report
|
||||||
|
cat output.txt
|
||||||
|
|||||||
84
.github/workflows/docker.yml
vendored
84
.github/workflows/docker.yml
vendored
@@ -14,21 +14,22 @@ concurrency:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
setup_matrix:
|
setup_matrix:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
matrix_config: ${{ steps.set_matrix.outputs.matrix_config }}
|
matrix_config: ${{ steps.set_matrix.outputs.matrix_config }}
|
||||||
steps:
|
steps:
|
||||||
- id: set_matrix
|
- id: set_matrix
|
||||||
run: |
|
run: |
|
||||||
MATRIX_CONFIG=$(if [ "${{ github.event_name }}" == "pull_request" ]; then echo '["dev"]'; else echo '["dev", "lean", "py310", "websocket", "dockerize", "py311"]'; fi)
|
MATRIX_CONFIG=$(if [ "${{ github.event_name }}" == "pull_request" ]; then echo '["dev", "lean"]'; else echo '["dev", "lean", "py310", "websocket", "dockerize", "py311", "py312"]'; fi)
|
||||||
echo "matrix_config=${MATRIX_CONFIG}" >> $GITHUB_OUTPUT
|
echo "matrix_config=${MATRIX_CONFIG}" >> $GITHUB_OUTPUT
|
||||||
echo $GITHUB_OUTPUT
|
echo $GITHUB_OUTPUT
|
||||||
|
|
||||||
docker-build:
|
docker-build:
|
||||||
name: docker-build
|
name: docker-build
|
||||||
needs: setup_matrix
|
needs: setup_matrix
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
build_preset: ${{fromJson(needs.setup_matrix.outputs.matrix_config)}}
|
build_preset: ${{fromJson(needs.setup_matrix.outputs.matrix_config)}}
|
||||||
@@ -36,11 +37,12 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
IMAGE_TAG: apache/superset:GHA-${{ matrix.build_preset }}-${{ github.run_id }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
@@ -50,21 +52,13 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Setup Docker Environment
|
||||||
if: steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker
|
if: steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: ./.github/actions/setup-docker
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
if: steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Try to login to DockerHub
|
|
||||||
if: steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker
|
|
||||||
continue-on-error: true
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USER }}
|
dockerhub-user: ${{ secrets.DOCKERHUB_USER }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
build: "true"
|
||||||
|
|
||||||
- name: Setup supersetbot
|
- name: Setup supersetbot
|
||||||
if: steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker
|
if: steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker
|
||||||
@@ -79,12 +73,68 @@ jobs:
|
|||||||
# Single platform builds in pull_request context to speed things up
|
# Single platform builds in pull_request context to speed things up
|
||||||
if [ "${{ github.event_name }}" = "push" ]; then
|
if [ "${{ github.event_name }}" = "push" ]; then
|
||||||
PLATFORM_ARG="--platform linux/arm64 --platform linux/amd64"
|
PLATFORM_ARG="--platform linux/arm64 --platform linux/amd64"
|
||||||
|
# can only --load images in single-platform builds
|
||||||
|
PUSH_OR_LOAD="--push"
|
||||||
elif [ "${{ github.event_name }}" = "pull_request" ]; then
|
elif [ "${{ github.event_name }}" = "pull_request" ]; then
|
||||||
PLATFORM_ARG="--platform linux/amd64"
|
PLATFORM_ARG="--platform linux/amd64"
|
||||||
|
PUSH_OR_LOAD="--load"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
supersetbot docker \
|
supersetbot docker \
|
||||||
|
$PUSH_OR_LOAD \
|
||||||
--preset ${{ matrix.build_preset }} \
|
--preset ${{ matrix.build_preset }} \
|
||||||
--context "$EVENT" \
|
--context "$EVENT" \
|
||||||
--context-ref "$RELEASE" $FORCE_LATEST \
|
--context-ref "$RELEASE" $FORCE_LATEST \
|
||||||
|
--extra-flags "--build-arg INCLUDE_CHROMIUM=false --tag $IMAGE_TAG" \
|
||||||
$PLATFORM_ARG
|
$PLATFORM_ARG
|
||||||
|
|
||||||
|
# in the context of push (using multi-platform build), we need to pull the image locally
|
||||||
|
- name: Docker pull
|
||||||
|
if: github.event_name == 'push' && (steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker)
|
||||||
|
run: docker pull $IMAGE_TAG
|
||||||
|
|
||||||
|
- name: Print docker stats
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker
|
||||||
|
run: |
|
||||||
|
echo "SHA: ${{ github.sha }}"
|
||||||
|
echo "IMAGE: $IMAGE_TAG"
|
||||||
|
docker images $IMAGE_TAG
|
||||||
|
docker history $IMAGE_TAG
|
||||||
|
|
||||||
|
- name: docker-compose sanity check
|
||||||
|
if: (steps.check.outputs.python || steps.check.outputs.frontend || steps.check.outputs.docker) && matrix.build_preset == 'dev'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
export SUPERSET_BUILD_TARGET=${{ matrix.build_preset }}
|
||||||
|
# This should reuse the CACHED image built in the previous steps
|
||||||
|
docker compose build superset-init --build-arg DEV_MODE=false --build-arg INCLUDE_CHROMIUM=false
|
||||||
|
docker compose up superset-init --exit-code-from superset-init
|
||||||
|
|
||||||
|
docker-compose-image-tag:
|
||||||
|
# Run this job only on pushes to master (not for PRs)
|
||||||
|
# goal is to check that building the latest image works, not required for all PR pushes
|
||||||
|
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
- name: Check for file changes
|
||||||
|
id: check
|
||||||
|
uses: ./.github/actions/change-detector/
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Setup Docker Environment
|
||||||
|
if: steps.check.outputs.docker
|
||||||
|
uses: ./.github/actions/setup-docker
|
||||||
|
with:
|
||||||
|
dockerhub-user: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
build: "false"
|
||||||
|
install-docker-compose: "true"
|
||||||
|
- name: docker-compose sanity check
|
||||||
|
if: steps.check.outputs.docker
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
docker compose -f docker-compose-image-tag.yml up superset-init --exit-code-from superset-init
|
||||||
|
|||||||
10
.github/workflows/embedded-sdk-release.yml
vendored
10
.github/workflows/embedded-sdk-release.yml
vendored
@@ -8,7 +8,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -23,15 +23,15 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: superset-embedded-sdk
|
working-directory: superset-embedded-sdk
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version-file: './superset-embedded-sdk/.nvmrc'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm run ci:release
|
- run: npm run ci:release
|
||||||
|
|||||||
8
.github/workflows/embedded-sdk-test.yml
vendored
8
.github/workflows/embedded-sdk-test.yml
vendored
@@ -13,15 +13,15 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
embedded-sdk-test:
|
embedded-sdk-test:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: superset-embedded-sdk
|
working-directory: superset-embedded-sdk
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version-file: './superset-embedded-sdk/.nvmrc'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
|
|||||||
18
.github/workflows/ephemeral-env-pr-close.yml
vendored
18
.github/workflows/ephemeral-env-pr-close.yml
vendored
@@ -1,4 +1,10 @@
|
|||||||
name: Cleanup ephemeral envs (PR close)
|
name: Cleanup ephemeral envs (PR close) [DEPRECATED]
|
||||||
|
|
||||||
|
# ⚠️ DEPRECATION NOTICE ⚠️
|
||||||
|
# This workflow is deprecated and will be removed in a future version.
|
||||||
|
# The new Superset Showtime workflow handles cleanup automatically.
|
||||||
|
# See .github/workflows/showtime.yml and showtime-cleanup.yml for replacements.
|
||||||
|
# Migration guide: https://github.com/mistercrunch/superset-showtime
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
@@ -6,7 +12,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -22,12 +28,12 @@ jobs:
|
|||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
name: Cleanup ephemeral envs
|
name: Cleanup ephemeral envs
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
uses: aws-actions/configure-aws-credentials@v4
|
uses: aws-actions/configure-aws-credentials@v5
|
||||||
with:
|
with:
|
||||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
@@ -63,7 +69,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Comment (success)
|
- name: Comment (success)
|
||||||
if: steps.describe-services.outputs.active == 'true'
|
if: steps.describe-services.outputs.active == 'true'
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v8
|
||||||
with:
|
with:
|
||||||
github-token: ${{github.token}}
|
github-token: ${{github.token}}
|
||||||
script: |
|
script: |
|
||||||
@@ -71,5 +77,5 @@ jobs:
|
|||||||
issue_number: ${{ github.event.number }},
|
issue_number: ${{ github.event.number }},
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
body: 'Ephemeral environment shutdown and build artifacts deleted.'
|
body: '⚠️ **DEPRECATED WORKFLOW** - Ephemeral environment shutdown and build artifacts deleted. Please migrate to the new Superset Showtime system for future PRs.'
|
||||||
})
|
})
|
||||||
|
|||||||
503
.github/workflows/ephemeral-env.yml
vendored
503
.github/workflows/ephemeral-env.yml
vendored
@@ -1,135 +1,195 @@
|
|||||||
name: Ephemeral env workflow
|
name: Ephemeral env workflow [DEPRECATED]
|
||||||
|
|
||||||
|
# ⚠️ DEPRECATION NOTICE ⚠️
|
||||||
|
# This workflow is deprecated and will be removed in a future version.
|
||||||
|
# Please use the new Superset Showtime workflow instead:
|
||||||
|
# - Use label "🎪 trigger-start" instead of "testenv-up"
|
||||||
|
# - Showtime provides better reliability and easier management
|
||||||
|
# - See .github/workflows/showtime.yml for the replacement
|
||||||
|
# - Migration guide: https://github.com/mistercrunch/superset-showtime
|
||||||
|
|
||||||
|
# Example manual trigger:
|
||||||
|
# gh workflow run ephemeral-env.yml --ref fix_ephemerals --field label_name="testenv-up" --field issue_number=666
|
||||||
|
|
||||||
on:
|
on:
|
||||||
issue_comment:
|
pull_request_target:
|
||||||
types: [created]
|
types:
|
||||||
|
- labeled
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
label_name:
|
||||||
|
description: 'Label name to simulate label-based /testenv trigger'
|
||||||
|
required: true
|
||||||
|
default: 'testenv-up'
|
||||||
|
issue_number:
|
||||||
|
description: 'Issue or PR number'
|
||||||
|
required: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
ephemeral-env-label:
|
||||||
runs-on: "ubuntu-22.04"
|
|
||||||
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:
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.event.issue.number || github.run_id }}-comment
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}-label
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
needs: config
|
name: Evaluate ephemeral env label trigger
|
||||||
if: needs.config.outputs.has-secrets
|
runs-on: ubuntu-24.04
|
||||||
name: Evaluate ephemeral env comment trigger (/testenv)
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
outputs:
|
outputs:
|
||||||
slash-command: ${{ steps.eval-body.outputs.result }}
|
slash-command: ${{ steps.eval-label.outputs.result }}
|
||||||
feature-flags: ${{ steps.eval-feature-flags.outputs.result }}
|
feature-flags: ${{ steps.eval-feature-flags.outputs.result }}
|
||||||
|
sha: ${{ steps.get-sha.outputs.sha }}
|
||||||
|
env:
|
||||||
|
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Debug
|
- name: Check for the "testenv-up" label
|
||||||
run: |
|
id: eval-label
|
||||||
echo "Comment on PR #${{ github.event.issue.number }} by ${{ github.event.issue.user.login }}, ${{ github.event.comment.author_association }}"
|
run: |
|
||||||
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
||||||
|
LABEL_NAME="${{ github.event.inputs.label_name }}"
|
||||||
|
else
|
||||||
|
LABEL_NAME="${{ github.event.label.name }}"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Eval comment body for /testenv slash command
|
echo "Evaluating label: $LABEL_NAME"
|
||||||
uses: actions/github-script@v7
|
|
||||||
id: eval-body
|
|
||||||
with:
|
|
||||||
result-encoding: string
|
|
||||||
script: |
|
|
||||||
const pattern = /^\/testenv (up|down)/
|
|
||||||
const result = pattern.exec(context.payload.comment.body)
|
|
||||||
return result === null ? 'noop' : result[1]
|
|
||||||
|
|
||||||
- name: Eval comment body for feature flags
|
if [[ "$LABEL_NAME" == "testenv-up" ]]; then
|
||||||
uses: actions/github-script@v7
|
echo "result=up" >> $GITHUB_OUTPUT
|
||||||
id: eval-feature-flags
|
else
|
||||||
with:
|
echo "result=noop" >> $GITHUB_OUTPUT
|
||||||
script: |
|
fi
|
||||||
const pattern = /FEATURE_(\w+)=(\w+)/g;
|
|
||||||
let results = [];
|
|
||||||
[...context.payload.comment.body.matchAll(pattern)].forEach(match => {
|
|
||||||
const config = {
|
|
||||||
name: `SUPERSET_FEATURE_${match[1]}`,
|
|
||||||
value: match[2],
|
|
||||||
};
|
|
||||||
results.push(config);
|
|
||||||
});
|
|
||||||
return results;
|
|
||||||
|
|
||||||
- name: Limit to committers
|
- name: Get event SHA
|
||||||
if: >
|
id: get-sha
|
||||||
steps.eval-body.outputs.result != 'noop' &&
|
if: steps.eval-label.outputs.result == 'up'
|
||||||
github.event.comment.author_association != 'MEMBER' &&
|
uses: actions/github-script@v8
|
||||||
github.event.comment.author_association != 'OWNER'
|
with:
|
||||||
uses: actions/github-script@v7
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
script: |
|
||||||
github-token: ${{github.token}}
|
let prSha;
|
||||||
script: |
|
|
||||||
const errMsg = '@${{ github.event.comment.user.login }} Ephemeral environment creation is currently limited to committers.'
|
// If event is workflow_dispatch, use the issue_number from inputs
|
||||||
github.rest.issues.createComment({
|
if (context.eventName === "workflow_dispatch") {
|
||||||
issue_number: ${{ github.event.issue.number }},
|
const prNumber = "${{ github.event.inputs.issue_number }}";
|
||||||
owner: context.repo.owner,
|
if (!prNumber) {
|
||||||
repo: context.repo.repo,
|
console.log("No PR number found.");
|
||||||
body: errMsg
|
return;
|
||||||
})
|
}
|
||||||
core.setFailed(errMsg)
|
|
||||||
|
// Fetch PR details using the provided issue_number
|
||||||
|
const { data: pr } = await github.rest.pulls.get({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: prNumber
|
||||||
|
});
|
||||||
|
|
||||||
|
prSha = pr.head.sha;
|
||||||
|
} else {
|
||||||
|
// If it's not workflow_dispatch, use the PR head sha from the event
|
||||||
|
prSha = context.payload.pull_request.head.sha;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`PR SHA: ${prSha}`);
|
||||||
|
core.setOutput("sha", prSha);
|
||||||
|
|
||||||
|
- name: Looking for feature flags in PR description
|
||||||
|
uses: actions/github-script@v8
|
||||||
|
id: eval-feature-flags
|
||||||
|
if: steps.eval-label.outputs.result == 'up'
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const description = context.payload.pull_request
|
||||||
|
? context.payload.pull_request.body || ''
|
||||||
|
: context.payload.inputs.pr_description || '';
|
||||||
|
|
||||||
|
const pattern = /FEATURE_(\w+)=(\w+)/g;
|
||||||
|
let results = [];
|
||||||
|
[...description.matchAll(pattern)].forEach(match => {
|
||||||
|
const config = {
|
||||||
|
name: `SUPERSET_FEATURE_${match[1]}`,
|
||||||
|
value: match[2],
|
||||||
|
};
|
||||||
|
results.push(config);
|
||||||
|
});
|
||||||
|
|
||||||
|
return results;
|
||||||
|
|
||||||
|
- name: Reply with confirmation comment
|
||||||
|
uses: actions/github-script@v8
|
||||||
|
if: steps.eval-label.outputs.result == 'up'
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const action = '${{ steps.eval-label.outputs.result }}';
|
||||||
|
const user = context.actor;
|
||||||
|
const runId = context.runId;
|
||||||
|
const workflowUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`;
|
||||||
|
|
||||||
|
const issueNumber = context.payload.pull_request
|
||||||
|
? context.payload.pull_request.number
|
||||||
|
: context.payload.inputs.issue_number;
|
||||||
|
|
||||||
|
if (!issueNumber) {
|
||||||
|
throw new Error("Issue number is not available.");
|
||||||
|
}
|
||||||
|
|
||||||
|
const body = `⚠️ **DEPRECATED WORKFLOW** ⚠️\n\n@${user} This workflow is deprecated! Please use the new **Superset Showtime** system instead:\n\n` +
|
||||||
|
`- Replace "testenv-up" label with "🎪 trigger-start"\n` +
|
||||||
|
`- Better reliability and easier management\n` +
|
||||||
|
`- See https://github.com/mistercrunch/superset-showtime for details\n\n` +
|
||||||
|
`Processing your ephemeral environment request [here](${workflowUrl}). Action: **${action}**.` +
|
||||||
|
` More information on [how to use or configure ephemeral environments]` +
|
||||||
|
`(https://superset.apache.org/docs/contributing/howtos/#github-ephemeral-environments)`;
|
||||||
|
|
||||||
|
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: issueNumber,
|
||||||
|
body,
|
||||||
|
});
|
||||||
|
|
||||||
ephemeral-docker-build:
|
ephemeral-docker-build:
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.event.issue.number || github.run_id }}-build
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}-build
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
needs: ephemeral-env-comment
|
needs: ephemeral-env-label
|
||||||
|
if: needs.ephemeral-env-label.outputs.slash-command == 'up'
|
||||||
name: ephemeral-docker-build
|
name: ephemeral-docker-build
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Get Info from comment
|
- name: "Checkout ${{ github.ref }} ( ${{ needs.ephemeral-env-label.outputs.sha }} : ${{steps.get-sha.outputs.sha}} )"
|
||||||
uses: actions/github-script@v7
|
uses: actions/checkout@v5
|
||||||
id: get-pr-info
|
|
||||||
with:
|
with:
|
||||||
script: |
|
ref: ${{ needs.ephemeral-env-label.outputs.sha }}
|
||||||
const request = {
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
pull_number: ${{ github.event.issue.number }},
|
|
||||||
}
|
|
||||||
core.info(`Getting PR #${request.pull_number} from ${request.owner}/${request.repo}`)
|
|
||||||
const pr = await github.rest.pulls.get(request);
|
|
||||||
return pr.data;
|
|
||||||
|
|
||||||
- name: Debug
|
|
||||||
id: get-sha
|
|
||||||
run: |
|
|
||||||
echo "sha=${{ fromJSON(steps.get-pr-info.outputs.result).head.sha }}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} : ${{steps.get-sha.outputs.sha}} )"
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
ref: ${{ steps.get-sha.outputs.sha }}
|
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Setup Docker Environment
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: ./.github/actions/setup-docker
|
||||||
|
with:
|
||||||
|
dockerhub-user: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
build: "true"
|
||||||
|
install-docker-compose: "false"
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Setup supersetbot
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: ./.github/actions/setup-supersetbot/
|
||||||
|
|
||||||
- name: Build ephemeral env image
|
- name: Build ephemeral env image
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
./scripts/build_docker.py \
|
supersetbot docker \
|
||||||
"ci" \
|
--push \
|
||||||
"pull_request" \
|
--load \
|
||||||
--build_context_ref ${{ github.event.issue.number }}
|
--preset ci \
|
||||||
|
--platform linux/amd64 \
|
||||||
|
--context-ref "$RELEASE" \
|
||||||
|
--extra-flags "--build-arg INCLUDE_CHROMIUM=false"
|
||||||
|
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
uses: aws-actions/configure-aws-credentials@v4
|
uses: aws-actions/configure-aws-credentials@v5
|
||||||
with:
|
with:
|
||||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
@@ -144,140 +204,141 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
|
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
|
||||||
ECR_REPOSITORY: superset-ci
|
ECR_REPOSITORY: superset-ci
|
||||||
IMAGE_TAG: apache/superset:${{ steps.get-sha.outputs.sha }}-ci
|
IMAGE_TAG: apache/superset:${{ needs.ephemeral-env-label.outputs.sha }}-ci
|
||||||
|
PR_NUMBER: ${{ github.event.inputs.issue_number || github.event.pull_request.number }}
|
||||||
run: |
|
run: |
|
||||||
docker tag $IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:pr-${{ github.event.issue.number }}-ci
|
docker tag $IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:pr-$PR_NUMBER-ci
|
||||||
docker push -a $ECR_REGISTRY/$ECR_REPOSITORY
|
docker push -a $ECR_REGISTRY/$ECR_REPOSITORY
|
||||||
|
|
||||||
ephemeral-env-up:
|
ephemeral-env-up:
|
||||||
needs: [ephemeral-env-comment, ephemeral-docker-build]
|
needs: [ephemeral-env-label, ephemeral-docker-build]
|
||||||
if: needs.ephemeral-env-comment.outputs.slash-command == 'up'
|
if: needs.ephemeral-env-label.outputs.slash-command == 'up'
|
||||||
name: Spin up an ephemeral environment
|
name: Spin up an ephemeral environment
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Configure AWS credentials
|
- name: Configure AWS credentials
|
||||||
uses: aws-actions/configure-aws-credentials@v4
|
uses: aws-actions/configure-aws-credentials@v5
|
||||||
with:
|
with:
|
||||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
aws-region: us-west-2
|
aws-region: us-west-2
|
||||||
|
|
||||||
- name: Login to Amazon ECR
|
- name: Login to Amazon ECR
|
||||||
id: login-ecr
|
id: login-ecr
|
||||||
uses: aws-actions/amazon-ecr-login@v2
|
uses: aws-actions/amazon-ecr-login@v2
|
||||||
|
|
||||||
- name: Check target image exists in ECR
|
- name: Check target image exists in ECR
|
||||||
id: check-image
|
id: check-image
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: |
|
env:
|
||||||
aws ecr describe-images \
|
PR_NUMBER: ${{ github.event.inputs.issue_number || github.event.pull_request.number }}
|
||||||
--registry-id $(echo "${{ steps.login-ecr.outputs.registry }}" | grep -Eo "^[0-9]+") \
|
run: |
|
||||||
--repository-name superset-ci \
|
aws ecr describe-images \
|
||||||
--image-ids imageTag=pr-${{ github.event.issue.number }}-ci
|
--registry-id $(echo "${{ steps.login-ecr.outputs.registry }}" | grep -Eo "^[0-9]+") \
|
||||||
|
--repository-name superset-ci \
|
||||||
|
--image-ids imageTag=pr-$PR_NUMBER-ci
|
||||||
|
|
||||||
- name: Fail on missing container image
|
- name: Fail on missing container image
|
||||||
if: steps.check-image.outcome == 'failure'
|
if: steps.check-image.outcome == 'failure'
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v8
|
||||||
with:
|
with:
|
||||||
github-token: ${{github.token}}
|
github-token: ${{ github.token }}
|
||||||
script: |
|
script: |
|
||||||
const errMsg = '@${{ github.event.comment.user.login }} Container image not yet published for this PR. Please try again when build is complete.'
|
const errMsg = '@${{ github.event.comment.user.login }} Container image not yet published for this PR. Please try again when build is complete.';
|
||||||
github.rest.issues.createComment({
|
github.rest.issues.createComment({
|
||||||
issue_number: ${{ github.event.issue.number }},
|
issue_number: ${{ github.event.inputs.issue_number || github.event.pull_request.number }},
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
body: errMsg
|
body: errMsg
|
||||||
})
|
});
|
||||||
core.setFailed(errMsg)
|
core.setFailed(errMsg);
|
||||||
|
|
||||||
- name: Fill in the new image ID in the Amazon ECS task definition
|
- name: Fill in the new image ID in the Amazon ECS task definition
|
||||||
id: task-def
|
id: task-def
|
||||||
uses: aws-actions/amazon-ecs-render-task-definition@v1
|
uses: aws-actions/amazon-ecs-render-task-definition@v1
|
||||||
with:
|
with:
|
||||||
task-definition: .github/workflows/ecs-task-definition.json
|
task-definition: .github/workflows/ecs-task-definition.json
|
||||||
container-name: superset-ci
|
container-name: superset-ci
|
||||||
image: ${{ steps.login-ecr.outputs.registry }}/superset-ci:pr-${{ github.event.issue.number }}-ci
|
image: ${{ steps.login-ecr.outputs.registry }}/superset-ci:pr-${{ github.event.inputs.issue_number || github.event.pull_request.number }}-ci
|
||||||
|
|
||||||
- name: Update env vars in the Amazon ECS task definition
|
- name: Update env vars in the Amazon ECS task definition
|
||||||
run: |
|
run: |
|
||||||
cat <<< "$(jq '.containerDefinitions[0].environment += ${{ needs.ephemeral-env-comment.outputs.feature-flags }}' < ${{ steps.task-def.outputs.task-definition }})" > ${{ steps.task-def.outputs.task-definition }}
|
cat <<< "$(jq '.containerDefinitions[0].environment += ${{ needs.ephemeral-env-label.outputs.feature-flags }}' < ${{ steps.task-def.outputs.task-definition }})" > ${{ steps.task-def.outputs.task-definition }}
|
||||||
|
|
||||||
- name: Describe ECS service
|
- name: Describe ECS service
|
||||||
id: describe-services
|
id: describe-services
|
||||||
run: |
|
run: |
|
||||||
echo "active=$(aws ecs describe-services --cluster superset-ci --services pr-${{ github.event.issue.number }}-service | jq '.services[] | select(.status == "ACTIVE") | any')" >> $GITHUB_OUTPUT
|
echo "active=$(aws ecs describe-services --cluster superset-ci --services pr-${{ github.event.inputs.issue_number || github.event.pull_request.number }}-service | jq '.services[] | select(.status == "ACTIVE") | any')" >> $GITHUB_OUTPUT
|
||||||
- name: Create ECS service
|
- name: Create ECS service
|
||||||
if: steps.describe-services.outputs.active != 'true'
|
id: create-service
|
||||||
id: create-service
|
if: steps.describe-services.outputs.active != 'true'
|
||||||
env:
|
env:
|
||||||
ECR_SUBNETS: subnet-0e15a5034b4121710,subnet-0e8efef4a72224974
|
ECR_SUBNETS: subnet-0e15a5034b4121710,subnet-0e8efef4a72224974
|
||||||
ECR_SECURITY_GROUP: sg-092ff3a6ae0574d91
|
ECR_SECURITY_GROUP: sg-092ff3a6ae0574d91
|
||||||
run: |
|
PR_NUMBER: ${{ github.event.inputs.issue_number || github.event.pull_request.number }}
|
||||||
aws ecs create-service \
|
run: |
|
||||||
--cluster superset-ci \
|
aws ecs create-service \
|
||||||
--service-name pr-${{ github.event.issue.number }}-service \
|
--cluster superset-ci \
|
||||||
--task-definition superset-ci \
|
--service-name pr-$PR_NUMBER-service \
|
||||||
--launch-type FARGATE \
|
--task-definition superset-ci \
|
||||||
--desired-count 1 \
|
--launch-type FARGATE \
|
||||||
--platform-version LATEST \
|
--desired-count 1 \
|
||||||
--network-configuration "awsvpcConfiguration={subnets=[$ECR_SUBNETS],securityGroups=[$ECR_SECURITY_GROUP],assignPublicIp=ENABLED}" \
|
--platform-version LATEST \
|
||||||
--tags key=pr,value=${{ github.event.issue.number }} key=github_user,value=${{ github.actor }}
|
--network-configuration "awsvpcConfiguration={subnets=[$ECR_SUBNETS],securityGroups=[$ECR_SECURITY_GROUP],assignPublicIp=ENABLED}" \
|
||||||
|
--tags key=pr,value=$PR_NUMBER key=github_user,value=${{ github.actor }}
|
||||||
|
- name: Deploy Amazon ECS task definition
|
||||||
|
id: deploy-task
|
||||||
|
uses: aws-actions/amazon-ecs-deploy-task-definition@v2
|
||||||
|
with:
|
||||||
|
task-definition: ${{ steps.task-def.outputs.task-definition }}
|
||||||
|
service: pr-${{ github.event.inputs.issue_number || github.event.pull_request.number }}-service
|
||||||
|
cluster: superset-ci
|
||||||
|
wait-for-service-stability: true
|
||||||
|
wait-for-minutes: 10
|
||||||
|
|
||||||
- name: Deploy Amazon ECS task definition
|
- name: List tasks
|
||||||
id: deploy-task
|
id: list-tasks
|
||||||
uses: aws-actions/amazon-ecs-deploy-task-definition@v2
|
run: |
|
||||||
with:
|
echo "task=$(aws ecs list-tasks --cluster superset-ci --service-name pr-${{ github.event.inputs.issue_number || github.event.pull_request.number }}-service | jq '.taskArns | first')" >> $GITHUB_OUTPUT
|
||||||
task-definition: ${{ steps.task-def.outputs.task-definition }}
|
- name: Get network interface
|
||||||
service: pr-${{ github.event.issue.number }}-service
|
id: get-eni
|
||||||
cluster: superset-ci
|
run: |
|
||||||
wait-for-service-stability: true
|
echo "eni=$(aws ecs describe-tasks --cluster superset-ci --tasks ${{ steps.list-tasks.outputs.task }} | jq '.tasks[0].attachments[0].details | map(select(.name=="networkInterfaceId"))[0].value')" >> $GITHUB_OUTPUT
|
||||||
wait-for-minutes: 10
|
- name: Get public IP
|
||||||
|
id: get-ip
|
||||||
- name: List tasks
|
run: |
|
||||||
id: list-tasks
|
echo "ip=$(aws ec2 describe-network-interfaces --network-interface-ids ${{ steps.get-eni.outputs.eni }} | jq -r '.NetworkInterfaces | first | .Association.PublicIp')" >> $GITHUB_OUTPUT
|
||||||
run: |
|
- name: Comment (success)
|
||||||
echo "task=$(aws ecs list-tasks --cluster superset-ci --service-name pr-${{ github.event.issue.number }}-service | jq '.taskArns | first')" >> $GITHUB_OUTPUT
|
if: ${{ success() }}
|
||||||
|
uses: actions/github-script@v8
|
||||||
- name: Get network interface
|
with:
|
||||||
id: get-eni
|
github-token: ${{github.token}}
|
||||||
run: |
|
script: |
|
||||||
echo "eni=$(aws ecs describe-tasks --cluster superset-ci --tasks ${{ steps.list-tasks.outputs.task }} | jq '.tasks | .[0] | .attachments | .[0] | .details | map(select(.name=="networkInterfaceId")) | .[0] | .value')" >> $GITHUB_OUTPUT
|
const issue_number = context.payload.inputs?.issue_number || context.issue.number;
|
||||||
|
github.rest.issues.createComment({
|
||||||
- name: Get public IP
|
issue_number: issue_number,
|
||||||
id: get-ip
|
owner: context.repo.owner,
|
||||||
run: |
|
repo: context.repo.repo,
|
||||||
echo "ip=$(aws ec2 describe-network-interfaces --network-interface-ids ${{ steps.get-eni.outputs.eni }} | jq -r '.NetworkInterfaces | first | .Association.PublicIp')" >> $GITHUB_OUTPUT
|
body: `@${{ github.actor }} Ephemeral environment spinning up at http://${{ steps.get-ip.outputs.ip }}:8080. Credentials are 'admin'/'admin'. Please allow several minutes for bootstrapping and startup.`
|
||||||
|
});
|
||||||
- name: Comment (success)
|
- name: Comment (failure)
|
||||||
if: ${{ success() }}
|
if: ${{ failure() }}
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v8
|
||||||
with:
|
with:
|
||||||
github-token: ${{github.token}}
|
github-token: ${{github.token}}
|
||||||
script: |
|
script: |
|
||||||
github.rest.issues.createComment({
|
const issue_number = context.payload.inputs?.issue_number || context.issue.number;
|
||||||
issue_number: ${{ github.event.issue.number }},
|
github.rest.issues.createComment({
|
||||||
owner: context.repo.owner,
|
issue_number: issue_number,
|
||||||
repo: context.repo.repo,
|
owner: context.repo.owner,
|
||||||
body: '@${{ github.event.comment.user.login }} Ephemeral environment spinning up at http://${{ steps.get-ip.outputs.ip }}:8080. Credentials are `admin`/`admin`. Please allow several minutes for bootstrapping and startup.'
|
repo: context.repo.repo,
|
||||||
})
|
body: '@${{ github.event.inputs.user_login || github.event.comment.user.login }} Ephemeral environment creation failed. Please check the Actions logs for details.'
|
||||||
|
})
|
||||||
- name: Comment (failure)
|
|
||||||
if: ${{ failure() }}
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
github-token: ${{github.token}}
|
|
||||||
script: |
|
|
||||||
github.rest.issues.createComment({
|
|
||||||
issue_number: ${{ github.event.issue.number }},
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
body: '@${{ github.event.comment.user.login }} Ephemeral environment creation failed. Please check the Actions logs for details.'
|
|
||||||
})
|
|
||||||
|
|||||||
8
.github/workflows/generate-FOSSA-report.yml
vendored
8
.github/workflows/generate-FOSSA-report.yml
vendored
@@ -8,7 +8,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -24,15 +24,15 @@ jobs:
|
|||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
name: Generate Report
|
name: Generate Report
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v5
|
||||||
with:
|
with:
|
||||||
distribution: "temurin"
|
distribution: "temurin"
|
||||||
java-version: "11"
|
java-version: "11"
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
validate-all-ghas:
|
validate-all-ghas:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: '20'
|
node-version: '20'
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/issue_creation.yml
vendored
4
.github/workflows/issue_creation.yml
vendored
@@ -9,7 +9,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
superbot-orglabel:
|
superbot-orglabel:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/labeler.yml
vendored
4
.github/workflows/labeler.yml
vendored
@@ -7,9 +7,9 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/labeler@v5
|
- uses: actions/labeler@v6
|
||||||
with:
|
with:
|
||||||
sync-labels: true
|
sync-labels: true
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/latest-release-tag.yml
vendored
4
.github/workflows/latest-release-tag.yml
vendored
@@ -6,13 +6,13 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
latest-release:
|
latest-release:
|
||||||
name: Add/update tag to new release
|
name: Add/update tag to new release
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|||||||
6
.github/workflows/license-check.yml
vendored
6
.github/workflows/license-check.yml
vendored
@@ -12,15 +12,15 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
license_check:
|
license_check:
|
||||||
name: License Check
|
name: License Check
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v5
|
||||||
with:
|
with:
|
||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
java-version: '11'
|
java-version: '11'
|
||||||
|
|||||||
4
.github/workflows/no-hold-label.yml
vendored
4
.github/workflows/no-hold-label.yml
vendored
@@ -11,10 +11,10 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-hold-label:
|
check-hold-label:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Check for 'hold' label
|
- name: Check for 'hold' label
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v8
|
||||||
with:
|
with:
|
||||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||||
script: |
|
script: |
|
||||||
|
|||||||
4
.github/workflows/pr-lint.yml
vendored
4
.github/workflows/pr-lint.yml
vendored
@@ -10,13 +10,13 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint-check:
|
lint-check:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|||||||
45
.github/workflows/pre-commit.yml
vendored
45
.github/workflows/pre-commit.yml
vendored
@@ -15,13 +15,13 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pre-commit:
|
pre-commit:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["current", "next", "previous"]
|
python-version: ["current", "previous", "next"]
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -38,12 +38,47 @@ jobs:
|
|||||||
echo "HOMEBREW_CELLAR=$HOMEBREW_CELLAR" >>"${GITHUB_ENV}"
|
echo "HOMEBREW_CELLAR=$HOMEBREW_CELLAR" >>"${GITHUB_ENV}"
|
||||||
echo "HOMEBREW_REPOSITORY=$HOMEBREW_REPOSITORY" >>"${GITHUB_ENV}"
|
echo "HOMEBREW_REPOSITORY=$HOMEBREW_REPOSITORY" >>"${GITHUB_ENV}"
|
||||||
brew install norwoodj/tap/helm-docs
|
brew install norwoodj/tap/helm-docs
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version: '20'
|
||||||
|
|
||||||
|
- name: Install Frontend Dependencies
|
||||||
|
run: |
|
||||||
|
cd superset-frontend
|
||||||
|
npm ci
|
||||||
|
|
||||||
|
- name: Install Docs Dependencies
|
||||||
|
run: |
|
||||||
|
cd docs
|
||||||
|
yarn install --immutable
|
||||||
|
|
||||||
|
- name: Cache pre-commit environments
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pre-commit
|
||||||
|
key: pre-commit-v2-${{ runner.os }}-py${{ matrix.python-version }}-${{ hashFiles('.pre-commit-config.yaml') }}
|
||||||
|
restore-keys: |
|
||||||
|
pre-commit-v2-${{ runner.os }}-py${{ matrix.python-version }}-
|
||||||
|
|
||||||
- name: pre-commit
|
- name: pre-commit
|
||||||
run: |
|
run: |
|
||||||
set +e # Don't exit immediately on failure
|
set +e # Don't exit immediately on failure
|
||||||
|
export SKIP=eslint-frontend,type-checking-frontend
|
||||||
pre-commit run --all-files
|
pre-commit run --all-files
|
||||||
if [ $? -ne 0 ] || ! git diff --quiet --exit-code; then
|
PRE_COMMIT_EXIT_CODE=$?
|
||||||
echo "❌ Pre-commit check failed."
|
git diff --quiet --exit-code
|
||||||
|
GIT_DIFF_EXIT_CODE=$?
|
||||||
|
if [ "${PRE_COMMIT_EXIT_CODE}" -ne 0 ] || [ "${GIT_DIFF_EXIT_CODE}" -ne 0 ]; then
|
||||||
|
if [ "${PRE_COMMIT_EXIT_CODE}" -ne 0 ]; then
|
||||||
|
echo "❌ Pre-commit check failed (exit code: ${EXIT_CODE})."
|
||||||
|
else
|
||||||
|
echo "❌ Git working directory is dirty."
|
||||||
|
echo "📌 This likely means that pre-commit made changes that were not committed."
|
||||||
|
echo "🔍 Modified files:"
|
||||||
|
git diff --name-only
|
||||||
|
fi
|
||||||
|
|
||||||
echo "🚒 To prevent/address this CI issue, please install/use pre-commit locally."
|
echo "🚒 To prevent/address this CI issue, please install/use pre-commit locally."
|
||||||
echo "📖 More details here: https://superset.apache.org/docs/contributing/development#git-hooks"
|
echo "📖 More details here: https://superset.apache.org/docs/contributing/development#git-hooks"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
4
.github/workflows/prefer-typescript.yml
vendored
4
.github/workflows/prefer-typescript.yml
vendored
@@ -21,13 +21,13 @@ jobs:
|
|||||||
prefer_typescript:
|
prefer_typescript:
|
||||||
if: github.ref == 'ref/heads/master' && github.event_name == 'pull_request'
|
if: github.ref == 'ref/heads/master' && github.event_name == 'pull_request'
|
||||||
name: Prefer TypeScript
|
name: Prefer TypeScript
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|||||||
18
.github/workflows/release.yml
vendored
18
.github/workflows/release.yml
vendored
@@ -8,7 +8,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -24,15 +24,9 @@ jobs:
|
|||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
name: Bump version and publish package(s)
|
name: Bump version and publish package(s)
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [20]
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
# pulls all commits (needed for lerna / semantic release to correctly version)
|
# pulls all commits (needed for lerna / semantic release to correctly version)
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -46,11 +40,11 @@ jobs:
|
|||||||
git fetch --prune --unshallow
|
git fetch --prune --unshallow
|
||||||
git tag -d `git tag | grep -E '^trigger-'`
|
git tag -d `git tag | grep -E '^trigger-'`
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Install Node.js
|
||||||
if: env.HAS_TAGS
|
if: env.HAS_TAGS
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version-file: './superset-frontend/.nvmrc'
|
||||||
|
|
||||||
- name: Cache npm
|
- name: Cache npm
|
||||||
if: env.HAS_TAGS
|
if: env.HAS_TAGS
|
||||||
|
|||||||
50
.github/workflows/showtime-cleanup.yml
vendored
Normal file
50
.github/workflows/showtime-cleanup.yml
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
name: 🎪 Showtime Cleanup
|
||||||
|
|
||||||
|
# Scheduled cleanup of expired environments
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 */6 * * *' # Every 6 hours
|
||||||
|
|
||||||
|
# Manual trigger for testing
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
max_age_hours:
|
||||||
|
description: 'Maximum age in hours before cleanup'
|
||||||
|
required: false
|
||||||
|
default: '48'
|
||||||
|
type: string
|
||||||
|
|
||||||
|
# Common environment variables
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
AWS_REGION: ${{ vars.AWS_REGION || 'us-west-2' }}
|
||||||
|
GITHUB_ORG: ${{ github.repository_owner }}
|
||||||
|
GITHUB_REPO: ${{ github.event.repository.name }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cleanup-expired:
|
||||||
|
name: Clean up expired showtime environments
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Install Superset Showtime
|
||||||
|
run: pip install superset-showtime
|
||||||
|
|
||||||
|
- name: Cleanup expired environments
|
||||||
|
run: |
|
||||||
|
MAX_AGE="${{ github.event.inputs.max_age_hours || '48' }}"
|
||||||
|
|
||||||
|
# Validate max_age is numeric
|
||||||
|
if [[ ! "$MAX_AGE" =~ ^[0-9]+$ ]]; then
|
||||||
|
echo "❌ Invalid max_age_hours format: $MAX_AGE (must be numeric)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Cleaning up environments older than ${MAX_AGE}h"
|
||||||
|
python -m showtime cleanup --older-than "${MAX_AGE}h"
|
||||||
179
.github/workflows/showtime-trigger.yml
vendored
Normal file
179
.github/workflows/showtime-trigger.yml
vendored
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
name: 🎪 Superset Showtime
|
||||||
|
|
||||||
|
# Ultra-simple: just sync on any PR state change
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [labeled, unlabeled, synchronize, closed]
|
||||||
|
|
||||||
|
# Manual testing
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
pr_number:
|
||||||
|
description: 'PR number to sync'
|
||||||
|
required: true
|
||||||
|
type: number
|
||||||
|
sha:
|
||||||
|
description: 'Specific SHA to deploy (optional, defaults to latest)'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
|
||||||
|
# Common environment variables for all jobs (non-sensitive only)
|
||||||
|
env:
|
||||||
|
AWS_REGION: us-west-2
|
||||||
|
GITHUB_ORG: ${{ github.repository_owner }}
|
||||||
|
GITHUB_REPO: ${{ github.event.repository.name }}
|
||||||
|
GITHUB_ACTOR: ${{ github.actor }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync:
|
||||||
|
name: 🎪 Sync PR to desired state
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 90
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Security Check - Authorize Maintainers Only
|
||||||
|
id: auth
|
||||||
|
uses: actions/github-script@v8
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const actor = context.actor;
|
||||||
|
console.log(`🔍 Checking authorization for ${actor}`);
|
||||||
|
|
||||||
|
// Early exit for workflow_dispatch - assume authorized since it's manually triggered
|
||||||
|
if (context.eventName === 'workflow_dispatch') {
|
||||||
|
console.log(`✅ Workflow dispatch event - assuming authorized for ${actor}`);
|
||||||
|
core.setOutput('authorized', 'true');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
username: actor
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`📊 Permission level for ${actor}: ${permission.permission}`);
|
||||||
|
const authorized = ['write', 'admin'].includes(permission.permission);
|
||||||
|
|
||||||
|
// If this is a synchronize event from unauthorized user, check if Showtime is active and set blocked label
|
||||||
|
if (!authorized && context.eventName === 'pull_request_target' && context.payload.action === 'synchronize') {
|
||||||
|
console.log(`🔒 Synchronize event detected - checking if Showtime is active`);
|
||||||
|
|
||||||
|
// Check if PR has any circus tent labels (Showtime is in use)
|
||||||
|
const { data: issue } = await github.rest.issues.get({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.payload.pull_request.number
|
||||||
|
});
|
||||||
|
|
||||||
|
const hasCircusLabels = issue.labels.some(label => label.name.startsWith('🎪 '));
|
||||||
|
|
||||||
|
if (hasCircusLabels) {
|
||||||
|
console.log(`🎪 Circus labels found - setting blocked label to prevent auto-deployment`);
|
||||||
|
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.payload.pull_request.number,
|
||||||
|
labels: ['🎪 🔒 showtime-blocked']
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`✅ Blocked label set - Showtime will detect and skip operations`);
|
||||||
|
} else {
|
||||||
|
console.log(`ℹ️ No circus labels found - Showtime not in use, skipping block`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!authorized) {
|
||||||
|
console.log(`🚨 Unauthorized user ${actor} - skipping all operations`);
|
||||||
|
core.setOutput('authorized', 'false');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`✅ Authorized maintainer: ${actor}`);
|
||||||
|
core.setOutput('authorized', 'true');
|
||||||
|
|
||||||
|
- name: Install Superset Showtime
|
||||||
|
if: steps.auth.outputs.authorized == 'true'
|
||||||
|
run: |
|
||||||
|
echo "::notice::Maintainer ${{ github.actor }} triggered deploy for PR ${{ github.event.pull_request.number || github.event.inputs.pr_number }}"
|
||||||
|
pip install --upgrade superset-showtime
|
||||||
|
showtime version
|
||||||
|
|
||||||
|
- name: Check what actions are needed
|
||||||
|
if: steps.auth.outputs.authorized == 'true'
|
||||||
|
id: check
|
||||||
|
env:
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
# Bulletproof PR number extraction
|
||||||
|
if [[ -n "${{ github.event.pull_request.number }}" ]]; then
|
||||||
|
PR_NUM="${{ github.event.pull_request.number }}"
|
||||||
|
elif [[ -n "${{ github.event.inputs.pr_number }}" ]]; then
|
||||||
|
PR_NUM="${{ github.event.inputs.pr_number }}"
|
||||||
|
else
|
||||||
|
echo "❌ No PR number found in event or inputs"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Using PR number: $PR_NUM"
|
||||||
|
|
||||||
|
# Run sync check-only with optional SHA override
|
||||||
|
if [[ -n "${{ github.event.inputs.sha }}" ]]; then
|
||||||
|
OUTPUT=$(python -m showtime sync $PR_NUM --check-only --sha "${{ github.event.inputs.sha }}")
|
||||||
|
else
|
||||||
|
OUTPUT=$(python -m showtime sync $PR_NUM --check-only)
|
||||||
|
fi
|
||||||
|
echo "$OUTPUT"
|
||||||
|
|
||||||
|
# Extract the outputs we need for conditional steps
|
||||||
|
BUILD=$(echo "$OUTPUT" | grep "build_needed=" | cut -d'=' -f2)
|
||||||
|
SYNC=$(echo "$OUTPUT" | grep "sync_needed=" | cut -d'=' -f2)
|
||||||
|
PR_NUM_OUT=$(echo "$OUTPUT" | grep "pr_number=" | cut -d'=' -f2)
|
||||||
|
TARGET_SHA=$(echo "$OUTPUT" | grep "target_sha=" | cut -d'=' -f2)
|
||||||
|
|
||||||
|
echo "build_needed=$BUILD" >> $GITHUB_OUTPUT
|
||||||
|
echo "sync_needed=$SYNC" >> $GITHUB_OUTPUT
|
||||||
|
echo "pr_number=$PR_NUM_OUT" >> $GITHUB_OUTPUT
|
||||||
|
echo "target_sha=$TARGET_SHA" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Checkout PR code (only if build needed)
|
||||||
|
if: steps.auth.outputs.authorized == 'true' && steps.check.outputs.build_needed == 'true'
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
ref: ${{ steps.check.outputs.target_sha }}
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup Docker Environment (only if build needed)
|
||||||
|
if: steps.auth.outputs.authorized == 'true' && steps.check.outputs.build_needed == 'true'
|
||||||
|
uses: ./.github/actions/setup-docker
|
||||||
|
with:
|
||||||
|
dockerhub-user: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
build: "true"
|
||||||
|
install-docker-compose: "false"
|
||||||
|
|
||||||
|
- name: Execute sync (handles everything)
|
||||||
|
if: steps.auth.outputs.authorized == 'true' && steps.check.outputs.sync_needed == 'true'
|
||||||
|
env:
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
PR_NUM="${{ steps.check.outputs.pr_number }}"
|
||||||
|
TARGET_SHA="${{ steps.check.outputs.target_sha }}"
|
||||||
|
if [[ -n "$TARGET_SHA" ]]; then
|
||||||
|
python -m showtime sync $PR_NUM --sha "$TARGET_SHA"
|
||||||
|
else
|
||||||
|
python -m showtime sync $PR_NUM
|
||||||
|
fi
|
||||||
67
.github/workflows/superset-app-cli.yml
vendored
Normal file
67
.github/workflows/superset-app-cli.yml
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
name: Superset App CLI tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "master"
|
||||||
|
- "[0-9].[0-9]*"
|
||||||
|
pull_request:
|
||||||
|
types: [synchronize, opened, reopened, ready_for_review]
|
||||||
|
|
||||||
|
# cancel previous workflow jobs for PRs
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-load-examples:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
env:
|
||||||
|
PYTHONPATH: ${{ github.workspace }}
|
||||||
|
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||||
|
REDIS_PORT: 16379
|
||||||
|
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
env:
|
||||||
|
POSTGRES_USER: superset
|
||||||
|
POSTGRES_PASSWORD: superset
|
||||||
|
ports:
|
||||||
|
# Use custom ports for services to avoid accidentally connecting to
|
||||||
|
# GitHub action runner's default installations
|
||||||
|
- 15432:5432
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
ports:
|
||||||
|
- 16379:6379
|
||||||
|
steps:
|
||||||
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
submodules: recursive
|
||||||
|
- name: Check for file changes
|
||||||
|
id: check
|
||||||
|
uses: ./.github/actions/change-detector/
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Setup Python
|
||||||
|
if: steps.check.outputs.python
|
||||||
|
uses: ./.github/actions/setup-backend/
|
||||||
|
- name: Setup Postgres
|
||||||
|
if: steps.check.outputs.python
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: setup-postgres
|
||||||
|
- name: superset init
|
||||||
|
if: steps.check.outputs.python
|
||||||
|
run: |
|
||||||
|
pip install -e .
|
||||||
|
superset db upgrade
|
||||||
|
superset load_test_users
|
||||||
|
- name: superset load_examples
|
||||||
|
if: steps.check.outputs.python
|
||||||
|
run: |
|
||||||
|
# load examples without test data
|
||||||
|
superset load_examples --load-big-data
|
||||||
13
.github/workflows/superset-applitool-cypress.yml
vendored
13
.github/workflows/superset-applitool-cypress.yml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -21,12 +21,11 @@ jobs:
|
|||||||
cypress-applitools:
|
cypress-applitools:
|
||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
browser: ["chrome"]
|
browser: ["chrome"]
|
||||||
node: [20]
|
|
||||||
env:
|
env:
|
||||||
SUPERSET_ENV: development
|
SUPERSET_ENV: development
|
||||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||||
@@ -40,7 +39,7 @@ jobs:
|
|||||||
APPLITOOLS_BATCH_NAME: Superset Cypress
|
APPLITOOLS_BATCH_NAME: Superset Cypress
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:16-alpine
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: superset
|
POSTGRES_USER: superset
|
||||||
POSTGRES_PASSWORD: superset
|
POSTGRES_PASSWORD: superset
|
||||||
@@ -52,7 +51,7 @@ jobs:
|
|||||||
- 16379:6379
|
- 16379:6379
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -64,9 +63,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
run: testdata
|
run: testdata
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node }}
|
node-version-file: './superset-frontend/.nvmrc'
|
||||||
- name: Install npm dependencies
|
- name: Install npm dependencies
|
||||||
uses: ./.github/actions/cached-dependencies
|
uses: ./.github/actions/cached-dependencies
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -27,21 +27,18 @@ jobs:
|
|||||||
cron:
|
cron:
|
||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node: [20]
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
ref: master
|
ref: master
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node }}
|
node-version-file: './superset-frontend/.nvmrc'
|
||||||
- name: Install eyes-storybook dependencies
|
- name: Install eyes-storybook dependencies
|
||||||
uses: ./.github/actions/cached-dependencies
|
uses: ./.github/actions/cached-dependencies
|
||||||
with:
|
with:
|
||||||
|
|||||||
67
.github/workflows/superset-cli.yml
vendored
67
.github/workflows/superset-cli.yml
vendored
@@ -1,67 +0,0 @@
|
|||||||
name: Superset CLI tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- "master"
|
|
||||||
- "[0-9].[0-9]*"
|
|
||||||
pull_request:
|
|
||||||
types: [synchronize, opened, reopened, ready_for_review]
|
|
||||||
|
|
||||||
# cancel previous workflow jobs for PRs
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test-load-examples:
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
env:
|
|
||||||
PYTHONPATH: ${{ github.workspace }}
|
|
||||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
|
||||||
REDIS_PORT: 16379
|
|
||||||
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
|
||||||
services:
|
|
||||||
postgres:
|
|
||||||
image: postgres:15-alpine
|
|
||||||
env:
|
|
||||||
POSTGRES_USER: superset
|
|
||||||
POSTGRES_PASSWORD: superset
|
|
||||||
ports:
|
|
||||||
# Use custom ports for services to avoid accidentally connecting to
|
|
||||||
# GitHub action runner's default installations
|
|
||||||
- 15432:5432
|
|
||||||
redis:
|
|
||||||
image: redis:7-alpine
|
|
||||||
ports:
|
|
||||||
- 16379:6379
|
|
||||||
steps:
|
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
submodules: recursive
|
|
||||||
- name: Check for file changes
|
|
||||||
id: check
|
|
||||||
uses: ./.github/actions/change-detector/
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Setup Python
|
|
||||||
if: steps.check.outputs.python
|
|
||||||
uses: ./.github/actions/setup-backend/
|
|
||||||
- name: Setup Postgres
|
|
||||||
if: steps.check.outputs.python
|
|
||||||
uses: ./.github/actions/cached-dependencies
|
|
||||||
with:
|
|
||||||
run: setup-postgres
|
|
||||||
- name: superset init
|
|
||||||
if: steps.check.outputs.python
|
|
||||||
run: |
|
|
||||||
pip install -e .
|
|
||||||
superset db upgrade
|
|
||||||
superset load_test_users
|
|
||||||
- name: superset load_examples
|
|
||||||
if: steps.check.outputs.python
|
|
||||||
run: |
|
|
||||||
# load examples without test data
|
|
||||||
superset load_examples --load-big-data
|
|
||||||
14
.github/workflows/superset-docs-deploy.yml
vendored
14
.github/workflows/superset-docs-deploy.yml
vendored
@@ -12,7 +12,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -28,20 +28,20 @@ jobs:
|
|||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
name: Build & Deploy
|
name: Build & Deploy
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up Node.js 20
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: '20'
|
node-version-file: './docs/.nvmrc'
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: ./.github/actions/setup-backend/
|
uses: ./.github/actions/setup-backend/
|
||||||
- uses: actions/setup-java@v4
|
- uses: actions/setup-java@v5
|
||||||
with:
|
with:
|
||||||
distribution: 'zulu'
|
distribution: 'zulu'
|
||||||
java-version: '21'
|
java-version: '21'
|
||||||
|
|||||||
33
.github/workflows/superset-docs-verify.yml
vendored
33
.github/workflows/superset-docs-verify.yml
vendored
@@ -18,17 +18,18 @@ jobs:
|
|||||||
name: Link Checking
|
name: Link Checking
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
# Do not bump this linkinator-action version without opening
|
# Do not bump this linkinator-action version without opening
|
||||||
# an ASF Infra ticket to allow the new verison first!
|
# an ASF Infra ticket to allow the new version first!
|
||||||
- uses: JustinBeckwith/linkinator-action@v1.11.0
|
- uses: JustinBeckwith/linkinator-action@3d5ba091319fa7b0ac14703761eebb7d100e6f6d # v1.11.0
|
||||||
continue-on-error: true # This will make the job advisory (non-blocking, no red X)
|
continue-on-error: true # This will make the job advisory (non-blocking, no red X)
|
||||||
with:
|
with:
|
||||||
paths: "**/*.md, **/*.mdx"
|
paths: "**/*.md, **/*.mdx"
|
||||||
linksToSkip: >-
|
linksToSkip: >-
|
||||||
^https://github.com/apache/(superset|incubator-superset)/(pull|issue)/\d+,
|
^https://github.com/apache/(superset|incubator-superset)/(pull|issues)/\d+,
|
||||||
|
^https://github.com/apache/(superset|incubator-superset)/commit/[a-f0-9]+,
|
||||||
|
superset-frontend/.*CHANGELOG\.md,
|
||||||
http://localhost:8088/,
|
http://localhost:8088/,
|
||||||
docker/.env-non-dev,
|
|
||||||
http://127.0.0.1:3000/,
|
http://127.0.0.1:3000/,
|
||||||
http://localhost:9001/,
|
http://localhost:9001/,
|
||||||
https://charts.bitnami.com/bitnami,
|
https://charts.bitnami.com/bitnami,
|
||||||
@@ -42,29 +43,29 @@ jobs:
|
|||||||
http://theiconic.com.au/,
|
http://theiconic.com.au/,
|
||||||
https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html,
|
https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html,
|
||||||
^https://img\.shields\.io/.*,
|
^https://img\.shields\.io/.*,
|
||||||
https://vkusvill.ru/
|
https://vkusvill.ru/,
|
||||||
https://www.linkedin.com/in/mark-thomas-b16751158/
|
https://www.linkedin.com/in/mark-thomas-b16751158/,
|
||||||
https://theiconic.com.au/
|
https://theiconic.com.au/,
|
||||||
https://wattbewerb.de/
|
https://wattbewerb.de/,
|
||||||
https://timbr.ai/
|
https://timbr.ai/,
|
||||||
https://opensource.org/license/apache-2-0
|
https://opensource.org/license/apache-2-0,
|
||||||
https://www.plaidcloud.com/
|
https://www.plaidcloud.com/
|
||||||
build-deploy:
|
build-deploy:
|
||||||
name: Build & Deploy
|
name: Build & Deploy
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: docs
|
working-directory: docs
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up Node.js 20
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: '20'
|
node-version-file: './docs/.nvmrc'
|
||||||
- name: yarn install
|
- name: yarn install
|
||||||
run: |
|
run: |
|
||||||
yarn install --check-cache
|
yarn install --check-cache
|
||||||
|
|||||||
147
.github/workflows/superset-e2e.yml
vendored
147
.github/workflows/superset-e2e.yml
vendored
@@ -28,6 +28,7 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
cypress-matrix:
|
cypress-matrix:
|
||||||
|
# Somehow one test flakes on 24.04 for unknown reasons, this is the only GHA left on 22.04
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -41,6 +42,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
parallel_id: [0, 1, 2, 3, 4, 5]
|
parallel_id: [0, 1, 2, 3, 4, 5]
|
||||||
browser: ["chrome"]
|
browser: ["chrome"]
|
||||||
|
app_root: ["", "/app/prefix"]
|
||||||
env:
|
env:
|
||||||
SUPERSET_ENV: development
|
SUPERSET_ENV: development
|
||||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||||
@@ -48,11 +50,11 @@ jobs:
|
|||||||
PYTHONPATH: ${{ github.workspace }}
|
PYTHONPATH: ${{ github.workspace }}
|
||||||
REDIS_PORT: 16379
|
REDIS_PORT: 16379
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
# use the dashboard feature when running manually OR merging to master
|
# Only use dashboard when explicitly requested via workflow_dispatch
|
||||||
USE_DASHBOARD: ${{ github.event.inputs.use_dashboard == 'true'|| (github.ref == 'refs/heads/master' && 'true') || 'false' }}
|
USE_DASHBOARD: ${{ github.event.inputs.use_dashboard == 'true' || 'false' }}
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:16-alpine
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: superset
|
POSTGRES_USER: superset
|
||||||
POSTGRES_PASSWORD: superset
|
POSTGRES_PASSWORD: superset
|
||||||
@@ -67,20 +69,21 @@ jobs:
|
|||||||
# Conditional checkout based on context
|
# Conditional checkout based on context
|
||||||
- name: Checkout for push or pull_request event
|
- name: Checkout for push or pull_request event
|
||||||
if: github.event_name == 'push' || github.event_name == 'pull_request'
|
if: github.event_name == 'push' || github.event_name == 'pull_request'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
|
||||||
- name: Checkout using ref (workflow_dispatch)
|
- name: Checkout using ref (workflow_dispatch)
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != ''
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != ''
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
ref: ${{ github.event.inputs.ref }}
|
ref: ${{ github.event.inputs.ref }}
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Checkout using PR ID (workflow_dispatch)
|
- name: Checkout using PR ID (workflow_dispatch)
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != ''
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != ''
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
ref: refs/pull/${{ github.event.inputs.pr_id }}/merge
|
ref: refs/pull/${{ github.event.inputs.pr_id }}/merge
|
||||||
@@ -106,9 +109,9 @@ jobs:
|
|||||||
run: testdata
|
run: testdata
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
if: steps.check.outputs.python || steps.check.outputs.frontend
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version-file: './superset-frontend/.nvmrc'
|
||||||
- name: Install npm dependencies
|
- name: Install npm dependencies
|
||||||
if: steps.check.outputs.python || steps.check.outputs.frontend
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
uses: ./.github/actions/cached-dependencies
|
uses: ./.github/actions/cached-dependencies
|
||||||
@@ -134,10 +137,132 @@ jobs:
|
|||||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||||
NODE_OPTIONS: "--max-old-space-size=4096"
|
NODE_OPTIONS: "--max-old-space-size=4096"
|
||||||
with:
|
with:
|
||||||
run: cypress-run-all ${{ env.USE_DASHBOARD }}
|
run: cypress-run-all ${{ env.USE_DASHBOARD }} ${{ matrix.app_root }}
|
||||||
|
- name: Set safe app root
|
||||||
|
if: failure()
|
||||||
|
id: set-safe-app-root
|
||||||
|
run: |
|
||||||
|
APP_ROOT="${{ matrix.app_root }}"
|
||||||
|
SAFE_APP_ROOT=${APP_ROOT//\//_}
|
||||||
|
echo "safe_app_root=$SAFE_APP_ROOT" >> $GITHUB_OUTPUT
|
||||||
- name: Upload Artifacts
|
- name: Upload Artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: github.event_name == 'workflow_dispatch' && (steps.check.outputs.python || steps.check.outputs.frontend)
|
if: failure()
|
||||||
with:
|
with:
|
||||||
path: ${{ github.workspace }}/superset-frontend/cypress-base/cypress/screenshots
|
path: ${{ github.workspace }}/superset-frontend/cypress-base/cypress/screenshots
|
||||||
name: cypress-artifact-${{ github.run_id }}-${{ github.job }}
|
name: cypress-artifact-${{ github.run_id }}-${{ github.job }}-${{ matrix.browser }}-${{ matrix.parallel_id }}--${{ steps.set-safe-app-root.outputs.safe_app_root }}
|
||||||
|
|
||||||
|
playwright-tests:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
browser: ["chromium"]
|
||||||
|
app_root: ["", "/app/prefix"]
|
||||||
|
env:
|
||||||
|
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: ${{ github.token }}
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
env:
|
||||||
|
POSTGRES_USER: superset
|
||||||
|
POSTGRES_PASSWORD: superset
|
||||||
|
ports:
|
||||||
|
- 15432:5432
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
ports:
|
||||||
|
- 16379:6379
|
||||||
|
steps:
|
||||||
|
# -------------------------------------------------------
|
||||||
|
# Conditional checkout based on context (same as Cypress workflow)
|
||||||
|
- name: Checkout for push or pull_request event
|
||||||
|
if: github.event_name == 'push' || github.event_name == 'pull_request'
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
submodules: recursive
|
||||||
|
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
|
||||||
|
- name: Checkout using ref (workflow_dispatch)
|
||||||
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != ''
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
ref: ${{ github.event.inputs.ref }}
|
||||||
|
submodules: recursive
|
||||||
|
- name: Checkout using PR ID (workflow_dispatch)
|
||||||
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != ''
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
ref: refs/pull/${{ github.event.inputs.pr_id }}/merge
|
||||||
|
submodules: recursive
|
||||||
|
# -------------------------------------------------------
|
||||||
|
- name: Check for file changes
|
||||||
|
id: check
|
||||||
|
uses: ./.github/actions/change-detector/
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./.github/actions/setup-backend/
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
- name: Setup postgres
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: setup-postgres
|
||||||
|
- name: Import test data
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: testdata
|
||||||
|
- name: Setup Node.js
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: actions/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version-file: './superset-frontend/.nvmrc'
|
||||||
|
- name: Install npm dependencies
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: npm-install
|
||||||
|
- name: Build javascript packages
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: build-instrumented-assets
|
||||||
|
- name: Install Playwright
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: playwright-install
|
||||||
|
- name: Run Playwright (Required Tests)
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
env:
|
||||||
|
NODE_OPTIONS: "--max-old-space-size=4096"
|
||||||
|
with:
|
||||||
|
run: playwright-run "${{ matrix.app_root }}"
|
||||||
|
- name: Set safe app root
|
||||||
|
if: failure()
|
||||||
|
id: set-safe-app-root
|
||||||
|
run: |
|
||||||
|
APP_ROOT="${{ matrix.app_root }}"
|
||||||
|
SAFE_APP_ROOT=${APP_ROOT//\//_}
|
||||||
|
echo "safe_app_root=$SAFE_APP_ROOT" >> $GITHUB_OUTPUT
|
||||||
|
- name: Upload Playwright Artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
${{ github.workspace }}/superset-frontend/playwright-results/
|
||||||
|
${{ github.workspace }}/superset-frontend/test-results/
|
||||||
|
name: playwright-artifact-${{ github.run_id }}-${{ github.job }}-${{ matrix.browser }}--${{ steps.set-safe-app-root.outputs.safe_app_root }}
|
||||||
|
|||||||
64
.github/workflows/superset-extensions-cli.yml
vendored
Normal file
64
.github/workflows/superset-extensions-cli.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
name: Superset Extensions CLI Package Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "master"
|
||||||
|
- "[0-9].[0-9]*"
|
||||||
|
pull_request:
|
||||||
|
types: [synchronize, opened, reopened, ready_for_review]
|
||||||
|
|
||||||
|
# cancel previous workflow jobs for PRs
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-superset-extensions-cli-package:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
python-version: ["previous", "current", "next"]
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: superset-extensions-cli
|
||||||
|
steps:
|
||||||
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Check for file changes
|
||||||
|
id: check
|
||||||
|
uses: ./.github/actions/change-detector/
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
if: steps.check.outputs.superset-extensions-cli
|
||||||
|
uses: ./.github/actions/setup-backend/
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
requirements-type: dev
|
||||||
|
|
||||||
|
- name: Run pytest with coverage
|
||||||
|
if: steps.check.outputs.superset-extensions-cli
|
||||||
|
run: |
|
||||||
|
pytest --cov=superset_extensions_cli --cov-report=xml --cov-report=term-missing --cov-report=html -v --tb=short
|
||||||
|
|
||||||
|
- name: Upload coverage reports to Codecov
|
||||||
|
if: steps.check.outputs.superset-extensions-cli
|
||||||
|
uses: codecov/codecov-action@v5
|
||||||
|
with:
|
||||||
|
file: ./coverage.xml
|
||||||
|
flags: superset-extensions-cli
|
||||||
|
name: superset-extensions-cli-coverage
|
||||||
|
fail_ci_if_error: false
|
||||||
|
|
||||||
|
- name: Upload HTML coverage report
|
||||||
|
if: steps.check.outputs.superset-extensions-cli
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: superset-extensions-cli-coverage-html
|
||||||
|
path: htmlcov/
|
||||||
187
.github/workflows/superset-frontend.yml
vendored
187
.github/workflows/superset-frontend.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Frontend
|
name: "Frontend Build CI (unit tests, linting & sanity checks)"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -13,68 +13,157 @@ concurrency:
|
|||||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
TAG: apache/superset:GHA-${{ github.run_id }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
frontend-build:
|
frontend-build:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
|
outputs:
|
||||||
|
should-run: ${{ steps.check.outputs.frontend }}
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: Checkout Code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
fetch-depth: 0
|
||||||
- name: Check npm lock file version
|
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
|
||||||
run: ./scripts/ci_check_npm_lock_version.sh ./superset-frontend/package-lock.json
|
|
||||||
- name: Check for file changes
|
- name: Check for File Changes
|
||||||
id: check
|
id: check
|
||||||
uses: ./.github/actions/change-detector/
|
uses: ./.github/actions/change-detector/
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Setup Node.js
|
|
||||||
|
- name: Build Docker Image
|
||||||
if: steps.check.outputs.frontend
|
if: steps.check.outputs.frontend
|
||||||
uses: actions/setup-node@v4
|
shell: bash
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
echo "git rev-parse --short HEAD"
|
||||||
|
git rev-parse --short HEAD
|
||||||
|
echo "git show -s --format=raw HEAD"
|
||||||
|
git show -s --format=raw HEAD
|
||||||
|
docker buildx build \
|
||||||
|
-t $TAG \
|
||||||
|
--cache-from=type=registry,ref=apache/superset-cache:3.10-slim-trixie \
|
||||||
|
--target superset-node-ci \
|
||||||
|
.
|
||||||
|
|
||||||
|
- name: Save Docker Image as Artifact
|
||||||
|
if: steps.check.outputs.frontend
|
||||||
|
run: |
|
||||||
|
docker save $TAG | gzip > docker-image.tar.gz
|
||||||
|
|
||||||
|
- name: Upload Docker Image Artifact
|
||||||
|
if: steps.check.outputs.frontend
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
name: docker-image
|
||||||
- name: Install dependencies
|
path: docker-image.tar.gz
|
||||||
if: steps.check.outputs.frontend
|
|
||||||
uses: ./.github/actions/cached-dependencies
|
sharded-jest-tests:
|
||||||
|
needs: frontend-build
|
||||||
|
if: needs.frontend-build.outputs.should-run == 'true'
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
shard: [1, 2, 3, 4, 5, 6, 7, 8]
|
||||||
|
fail-fast: false
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Download Docker Image Artifact
|
||||||
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
run: npm-install
|
name: docker-image
|
||||||
- name: eslint
|
|
||||||
if: steps.check.outputs.frontend
|
- name: Load Docker Image
|
||||||
working-directory: ./superset-frontend
|
run: docker load < docker-image.tar.gz
|
||||||
|
|
||||||
|
- name: npm run test with coverage
|
||||||
run: |
|
run: |
|
||||||
npm run eslint -- . --quiet
|
mkdir -p ${{ github.workspace }}/superset-frontend/coverage
|
||||||
- name: tsc
|
docker run \
|
||||||
if: steps.check.outputs.frontend
|
-v ${{ github.workspace }}/superset-frontend/coverage:/app/superset-frontend/coverage \
|
||||||
working-directory: ./superset-frontend
|
--rm $TAG \
|
||||||
run: |
|
bash -c \
|
||||||
npm run type
|
"npm run test -- --coverage --shard=${{ matrix.shard }}/8 --coverageReporters=json-summary"
|
||||||
- name: Build plugins packages
|
|
||||||
if: steps.check.outputs.frontend
|
- name: Upload Coverage Artifact
|
||||||
working-directory: ./superset-frontend
|
uses: actions/upload-artifact@v4
|
||||||
run: npm run plugins:build
|
with:
|
||||||
- name: Build plugins Storybook
|
name: coverage-artifacts-${{ matrix.shard }}
|
||||||
if: steps.check.outputs.frontend
|
path: superset-frontend/coverage
|
||||||
working-directory: ./superset-frontend
|
|
||||||
run: npm run plugins:build-storybook
|
report-coverage:
|
||||||
- name: superset-ui/core coverage
|
needs: [sharded-jest-tests]
|
||||||
if: steps.check.outputs.frontend
|
if: needs.frontend-build.outputs.should-run == 'true'
|
||||||
working-directory: ./superset-frontend
|
runs-on: ubuntu-24.04
|
||||||
run: |
|
steps:
|
||||||
npm run core:cover
|
- name: Download Coverage Artifacts
|
||||||
- name: unit tests
|
uses: actions/download-artifact@v5
|
||||||
if: steps.check.outputs.frontend
|
with:
|
||||||
working-directory: ./superset-frontend
|
pattern: coverage-artifacts-*
|
||||||
run: |
|
path: coverage/
|
||||||
npm run test -- --coverage --silent
|
|
||||||
# todo: remove this step when fix generator as a project in root jest.config.js
|
- name: Show Files
|
||||||
- name: generator-superset unit tests
|
run: find coverage/
|
||||||
if: steps.check.outputs.frontend
|
|
||||||
working-directory: ./superset-frontend/packages/generator-superset
|
- name: Merge Code Coverage
|
||||||
run: npm run test
|
run: npx nyc merge coverage/ merged-output/coverage-summary.json
|
||||||
- name: Upload code coverage
|
|
||||||
uses: codecov/codecov-action@v4
|
- name: Upload Code Coverage
|
||||||
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
flags: javascript
|
flags: javascript
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
verbose: true
|
verbose: true
|
||||||
|
files: merged-output/coverage-summary.json
|
||||||
|
slug: apache/superset
|
||||||
|
|
||||||
|
lint-frontend:
|
||||||
|
needs: frontend-build
|
||||||
|
if: needs.frontend-build.outputs.should-run == 'true'
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Download Docker Image Artifact
|
||||||
|
uses: actions/download-artifact@v5
|
||||||
|
with:
|
||||||
|
name: docker-image
|
||||||
|
|
||||||
|
- name: Load Docker Image
|
||||||
|
run: |
|
||||||
|
docker load < docker-image.tar.gz
|
||||||
|
|
||||||
|
- name: lint
|
||||||
|
run: |
|
||||||
|
docker run --rm $TAG bash -c \
|
||||||
|
"npm i && npm run lint"
|
||||||
|
|
||||||
|
- name: tsc
|
||||||
|
run: |
|
||||||
|
docker run --rm $TAG bash -c \
|
||||||
|
"npm i && npm run plugins:build && npm run type"
|
||||||
|
|
||||||
|
validate-frontend:
|
||||||
|
needs: frontend-build
|
||||||
|
if: needs.frontend-build.outputs.should-run == 'true'
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- name: Download Docker Image Artifact
|
||||||
|
uses: actions/download-artifact@v5
|
||||||
|
with:
|
||||||
|
name: docker-image
|
||||||
|
|
||||||
|
- name: Load Docker Image
|
||||||
|
run: docker load < docker-image.tar.gz
|
||||||
|
|
||||||
|
- name: Build Plugins Packages
|
||||||
|
run: |
|
||||||
|
docker run --rm $TAG bash -c \
|
||||||
|
"npm run plugins:build"
|
||||||
|
|
||||||
|
- name: Build Plugins Storybook
|
||||||
|
run: |
|
||||||
|
docker run --rm $TAG bash -c \
|
||||||
|
"npm run plugins:build-storybook"
|
||||||
|
|||||||
8
.github/workflows/superset-helm-lint.yml
vendored
8
.github/workflows/superset-helm-lint.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Lint and Test Charts
|
name: "Helm: lint and test charts"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
@@ -13,10 +13,10 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint-test:
|
lint-test:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
- name: Set up Helm
|
- name: Set up Helm
|
||||||
uses: azure/setup-helm@v4
|
uses: azure/setup-helm@v4
|
||||||
with:
|
with:
|
||||||
version: v3.5.4
|
version: v3.16.4
|
||||||
|
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: ./.github/actions/setup-backend/
|
uses: ./.github/actions/setup-backend/
|
||||||
|
|||||||
90
.github/workflows/superset-helm-release.yml
vendored
90
.github/workflows/superset-helm-release.yml
vendored
@@ -1,4 +1,8 @@
|
|||||||
name: Release Charts
|
# This workflow automates the release process for Helm charts.
|
||||||
|
# The workflow creates a new branch for the release and opens a pull request against the 'gh-pages' branch,
|
||||||
|
# allowing the changes to be reviewed and merged manually.
|
||||||
|
|
||||||
|
name: "Helm: release charts"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -7,18 +11,28 @@ on:
|
|||||||
- "[0-9].[0-9]*"
|
- "[0-9].[0-9]*"
|
||||||
paths:
|
paths:
|
||||||
- "helm/**"
|
- "helm/**"
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
ref:
|
||||||
|
description: "The branch, tag, or commit SHA to check out"
|
||||||
|
required: false
|
||||||
|
default: "master"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
ref: ${{ inputs.ref || github.ref_name }}
|
||||||
|
persist-credentials: true
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -35,11 +49,77 @@ jobs:
|
|||||||
- name: Add bitnami repo dependency
|
- name: Add bitnami repo dependency
|
||||||
run: helm repo add bitnami https://charts.bitnami.com/bitnami
|
run: helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||||
|
|
||||||
|
- name: Fetch/list all tags
|
||||||
|
run: |
|
||||||
|
# Debugging tags
|
||||||
|
git fetch --tags --force
|
||||||
|
git tag -d superset-helm-chart-0.13.4 || true
|
||||||
|
echo "DEBUG TAGS"
|
||||||
|
git show-ref --tags
|
||||||
|
|
||||||
|
- name: Create unique pages branch name
|
||||||
|
id: vars
|
||||||
|
run: echo "branch_name=helm-publish-${GITHUB_SHA:0:7}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Force recreate branch from gh-pages
|
||||||
|
run: |
|
||||||
|
# Ensure a clean working directory
|
||||||
|
git reset --hard
|
||||||
|
git clean -fdx
|
||||||
|
git checkout -b local_gha_temp
|
||||||
|
git submodule update
|
||||||
|
|
||||||
|
# Fetch the latest gh-pages branch
|
||||||
|
git fetch origin gh-pages
|
||||||
|
|
||||||
|
# Check out and reset the target branch based on gh-pages
|
||||||
|
git checkout -B ${{ env.branch_name }} origin/gh-pages
|
||||||
|
|
||||||
|
# Remove submodules from the branch
|
||||||
|
git submodule deinit -f --all
|
||||||
|
|
||||||
|
# Force push to the remote branch
|
||||||
|
git push origin ${{ env.branch_name }} --force
|
||||||
|
|
||||||
|
# Return to the original branch
|
||||||
|
git checkout local_gha_temp
|
||||||
|
|
||||||
|
- name: Fetch/list all tags
|
||||||
|
run: |
|
||||||
|
git submodule update
|
||||||
|
cat .github/actions/chart-releaser-action/action.yml
|
||||||
|
|
||||||
- name: Run chart-releaser
|
- name: Run chart-releaser
|
||||||
uses: ./.github/actions/chart-releaser-action
|
uses: ./.github/actions/chart-releaser-action
|
||||||
with:
|
with:
|
||||||
|
version: v1.6.0
|
||||||
charts_dir: helm
|
charts_dir: helm
|
||||||
mark_as_latest: false
|
mark_as_latest: false
|
||||||
|
pages_branch: ${{ env.branch_name }}
|
||||||
env:
|
env:
|
||||||
CR_TOKEN: "${{ github.token }}"
|
CR_TOKEN: "${{ github.token }}"
|
||||||
CR_RELEASE_NAME_TEMPLATE: "superset-helm-chart-{{ .Version }}"
|
CR_RELEASE_NAME_TEMPLATE: "superset-helm-chart-{{ .Version }}"
|
||||||
|
|
||||||
|
- name: Open Pull Request
|
||||||
|
uses: actions/github-script@v8
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const branchName = '${{ env.branch_name }}';
|
||||||
|
const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
|
||||||
|
|
||||||
|
if (!branchName) {
|
||||||
|
throw new Error("Branch name is not defined.");
|
||||||
|
}
|
||||||
|
|
||||||
|
const pr = await github.rest.pulls.create({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
title: `Helm chart release for ${branchName}`,
|
||||||
|
head: branchName,
|
||||||
|
base: "gh-pages", // Adjust if the target branch is different
|
||||||
|
body: `This PR releases Helm charts to the gh-pages branch.`,
|
||||||
|
});
|
||||||
|
|
||||||
|
core.info(`Pull request created: ${pr.data.html_url}`);
|
||||||
|
env:
|
||||||
|
BRANCH_NAME: ${{ env.branch_name }}
|
||||||
|
|||||||
142
.github/workflows/superset-playwright.yml
vendored
Normal file
142
.github/workflows/superset-playwright.yml
vendored
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
name: Playwright Experimental Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "master"
|
||||||
|
- "[0-9].[0-9]*"
|
||||||
|
pull_request:
|
||||||
|
types: [synchronize, opened, reopened, ready_for_review]
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
ref:
|
||||||
|
description: 'The branch or tag to checkout'
|
||||||
|
required: false
|
||||||
|
default: ''
|
||||||
|
pr_id:
|
||||||
|
description: 'The pull request ID to checkout'
|
||||||
|
required: false
|
||||||
|
default: ''
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# NOTE: Required Playwright tests are in superset-e2e.yml (E2E / playwright-tests)
|
||||||
|
# This workflow contains only experimental tests that run in shadow mode
|
||||||
|
playwright-tests-experimental:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
continue-on-error: true
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
browser: ["chromium"]
|
||||||
|
app_root: ["", "/app/prefix"]
|
||||||
|
env:
|
||||||
|
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: ${{ github.token }}
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
env:
|
||||||
|
POSTGRES_USER: superset
|
||||||
|
POSTGRES_PASSWORD: superset
|
||||||
|
ports:
|
||||||
|
- 15432:5432
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
ports:
|
||||||
|
- 16379:6379
|
||||||
|
steps:
|
||||||
|
# -------------------------------------------------------
|
||||||
|
# Conditional checkout based on context (same as Cypress workflow)
|
||||||
|
- name: Checkout for push or pull_request event
|
||||||
|
if: github.event_name == 'push' || github.event_name == 'pull_request'
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
submodules: recursive
|
||||||
|
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
|
||||||
|
- name: Checkout using ref (workflow_dispatch)
|
||||||
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != ''
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
ref: ${{ github.event.inputs.ref }}
|
||||||
|
submodules: recursive
|
||||||
|
- name: Checkout using PR ID (workflow_dispatch)
|
||||||
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != ''
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
ref: refs/pull/${{ github.event.inputs.pr_id }}/merge
|
||||||
|
submodules: recursive
|
||||||
|
# -------------------------------------------------------
|
||||||
|
- name: Check for file changes
|
||||||
|
id: check
|
||||||
|
uses: ./.github/actions/change-detector/
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./.github/actions/setup-backend/
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
- name: Setup postgres
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: setup-postgres
|
||||||
|
- name: Import test data
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: testdata
|
||||||
|
- name: Setup Node.js
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: actions/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version-file: './superset-frontend/.nvmrc'
|
||||||
|
- name: Install npm dependencies
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: npm-install
|
||||||
|
- name: Build javascript packages
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: build-instrumented-assets
|
||||||
|
- name: Install Playwright
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
with:
|
||||||
|
run: playwright-install
|
||||||
|
- name: Run Playwright (Experimental Tests)
|
||||||
|
if: steps.check.outputs.python || steps.check.outputs.frontend
|
||||||
|
uses: ./.github/actions/cached-dependencies
|
||||||
|
env:
|
||||||
|
NODE_OPTIONS: "--max-old-space-size=4096"
|
||||||
|
with:
|
||||||
|
run: playwright-run "${{ matrix.app_root }}" experimental/
|
||||||
|
- name: Set safe app root
|
||||||
|
if: failure()
|
||||||
|
id: set-safe-app-root
|
||||||
|
run: |
|
||||||
|
APP_ROOT="${{ matrix.app_root }}"
|
||||||
|
SAFE_APP_ROOT=${APP_ROOT//\//_}
|
||||||
|
echo "safe_app_root=$SAFE_APP_ROOT" >> $GITHUB_OUTPUT
|
||||||
|
- name: Upload Playwright Artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: failure()
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
${{ github.workspace }}/superset-frontend/playwright-results/
|
||||||
|
${{ github.workspace }}/superset-frontend/test-results/
|
||||||
|
name: playwright-experimental-artifact-${{ github.run_id }}-${{ github.job }}-${{ matrix.browser }}--${{ steps.set-safe-app-root.outputs.safe_app_root }}
|
||||||
@@ -15,7 +15,7 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test-mysql:
|
test-mysql:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
env:
|
env:
|
||||||
PYTHONPATH: ${{ github.workspace }}
|
PYTHONPATH: ${{ github.workspace }}
|
||||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
- 16379:6379
|
- 16379:6379
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -68,16 +68,16 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
./scripts/python_tests.sh
|
./scripts/python_tests.sh
|
||||||
- name: Upload code coverage
|
- name: Upload code coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
flags: python,mysql
|
flags: python,mysql
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
verbose: true
|
verbose: true
|
||||||
test-postgres:
|
test-postgres:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["current", "next", "previous"]
|
python-version: ["current", "previous", "next"]
|
||||||
env:
|
env:
|
||||||
PYTHONPATH: ${{ github.workspace }}
|
PYTHONPATH: ${{ github.workspace }}
|
||||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||||
@@ -85,7 +85,7 @@ jobs:
|
|||||||
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:16-alpine
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: superset
|
POSTGRES_USER: superset
|
||||||
POSTGRES_PASSWORD: superset
|
POSTGRES_PASSWORD: superset
|
||||||
@@ -99,7 +99,7 @@ jobs:
|
|||||||
- 16379:6379
|
- 16379:6379
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -129,14 +129,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
./scripts/python_tests.sh
|
./scripts/python_tests.sh
|
||||||
- name: Upload code coverage
|
- name: Upload code coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
flags: python,postgres
|
flags: python,postgres
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
verbose: true
|
verbose: true
|
||||||
|
|
||||||
test-sqlite:
|
test-sqlite:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
env:
|
env:
|
||||||
PYTHONPATH: ${{ github.workspace }}
|
PYTHONPATH: ${{ github.workspace }}
|
||||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||||
@@ -152,7 +152,7 @@ jobs:
|
|||||||
- 16379:6379
|
- 16379:6379
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -181,7 +181,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
./scripts/python_tests.sh
|
./scripts/python_tests.sh
|
||||||
- name: Upload code coverage
|
- name: Upload code coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
flags: python,sqlite
|
flags: python,sqlite
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test-postgres-presto:
|
test-postgres-presto:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
env:
|
env:
|
||||||
PYTHONPATH: ${{ github.workspace }}
|
PYTHONPATH: ${{ github.workspace }}
|
||||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
SUPERSET__SQLALCHEMY_EXAMPLES_URI: presto://localhost:15433/memory/default
|
SUPERSET__SQLALCHEMY_EXAMPLES_URI: presto://localhost:15433/memory/default
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:16-alpine
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: superset
|
POSTGRES_USER: superset
|
||||||
POSTGRES_PASSWORD: superset
|
POSTGRES_PASSWORD: superset
|
||||||
@@ -48,7 +48,7 @@ jobs:
|
|||||||
- 16379:6379
|
- 16379:6379
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -77,14 +77,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
./scripts/python_tests.sh -m 'chart_data_flow or sql_json_flow'
|
./scripts/python_tests.sh -m 'chart_data_flow or sql_json_flow'
|
||||||
- name: Upload code coverage
|
- name: Upload code coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
flags: python,presto
|
flags: python,presto
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
verbose: true
|
verbose: true
|
||||||
|
|
||||||
test-postgres-hive:
|
test-postgres-hive:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
env:
|
env:
|
||||||
PYTHONPATH: ${{ github.workspace }}
|
PYTHONPATH: ${{ github.workspace }}
|
||||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||||
@@ -94,7 +94,7 @@ jobs:
|
|||||||
UPLOAD_FOLDER: /tmp/.superset/uploads/
|
UPLOAD_FOLDER: /tmp/.superset/uploads/
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15-alpine
|
image: postgres:16-alpine
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: superset
|
POSTGRES_USER: superset
|
||||||
POSTGRES_PASSWORD: superset
|
POSTGRES_PASSWORD: superset
|
||||||
@@ -108,7 +108,7 @@ jobs:
|
|||||||
- 16379:6379
|
- 16379:6379
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -142,9 +142,10 @@ jobs:
|
|||||||
- name: Python unit tests (PostgreSQL)
|
- name: Python unit tests (PostgreSQL)
|
||||||
if: steps.check.outputs.python
|
if: steps.check.outputs.python
|
||||||
run: |
|
run: |
|
||||||
|
pip install -e .[hive]
|
||||||
./scripts/python_tests.sh -m 'chart_data_flow or sql_json_flow'
|
./scripts/python_tests.sh -m 'chart_data_flow or sql_json_flow'
|
||||||
- name: Upload code coverage
|
- name: Upload code coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
flags: python,hive
|
flags: python,hive
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|||||||
17
.github/workflows/superset-python-unittest.yml
vendored
17
.github/workflows/superset-python-unittest.yml
vendored
@@ -16,15 +16,15 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
unit-tests:
|
unit-tests:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["current", "next"]
|
python-version: ["previous", "current", "next"]
|
||||||
env:
|
env:
|
||||||
PYTHONPATH: ${{ github.workspace }}
|
PYTHONPATH: ${{ github.workspace }}
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -44,9 +44,16 @@ jobs:
|
|||||||
SUPERSET_TESTENV: true
|
SUPERSET_TESTENV: true
|
||||||
SUPERSET_SECRET_KEY: not-a-secret
|
SUPERSET_SECRET_KEY: not-a-secret
|
||||||
run: |
|
run: |
|
||||||
pytest --durations-min=0.5 --cov-report= --cov=superset ./tests/common ./tests/unit_tests --cache-clear
|
pytest --durations-min=0.5 --cov-report= --cov=superset ./tests/common ./tests/unit_tests --cache-clear --maxfail=50
|
||||||
|
- name: Python 100% coverage unit tests
|
||||||
|
if: steps.check.outputs.python
|
||||||
|
env:
|
||||||
|
SUPERSET_TESTENV: true
|
||||||
|
SUPERSET_SECRET_KEY: not-a-secret
|
||||||
|
run: |
|
||||||
|
pytest --durations-min=0.5 --cov=superset/sql/ ./tests/unit_tests/sql/ --cache-clear --cov-fail-under=100
|
||||||
- name: Upload code coverage
|
- name: Upload code coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
flags: python,unit
|
flags: python,unit
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|||||||
12
.github/workflows/superset-translations.yml
vendored
12
.github/workflows/superset-translations.yml
vendored
@@ -15,10 +15,10 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
frontend-check-translations:
|
frontend-check-translations:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
@@ -31,9 +31,9 @@ jobs:
|
|||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
if: steps.check.outputs.frontend
|
if: steps.check.outputs.frontend
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version-file: './superset-frontend/.nvmrc'
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
if: steps.check.outputs.frontend
|
if: steps.check.outputs.frontend
|
||||||
uses: ./.github/actions/cached-dependencies
|
uses: ./.github/actions/cached-dependencies
|
||||||
@@ -46,10 +46,10 @@ jobs:
|
|||||||
npm run build-translation
|
npm run build-translation
|
||||||
|
|
||||||
babel-extract:
|
babel-extract:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|||||||
4
.github/workflows/superset-websocket.yml
vendored
4
.github/workflows/superset-websocket.yml
vendored
@@ -18,10 +18,10 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
app-checks:
|
app-checks:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
|
|||||||
6
.github/workflows/supersetbot.yml
vendored
6
.github/workflows/supersetbot.yml
vendored
@@ -15,7 +15,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
supersetbot:
|
supersetbot:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
if: >
|
if: >
|
||||||
github.event_name == 'workflow_dispatch' ||
|
github.event_name == 'workflow_dispatch' ||
|
||||||
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@supersetbot'))
|
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@supersetbot'))
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Quickly add thumbs up!
|
- name: Quickly add thumbs up!
|
||||||
if: github.event_name == 'issue_comment' && contains(github.event.comment.body, '@supersetbot')
|
if: github.event_name == 'issue_comment' && contains(github.event.comment.body, '@supersetbot')
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v8
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/')
|
const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/')
|
||||||
@@ -38,7 +38,7 @@ jobs:
|
|||||||
});
|
});
|
||||||
|
|
||||||
- name: "Checkout ( ${{ github.sha }} )"
|
- name: "Checkout ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
37
.github/workflows/tag-release.yml
vendored
37
.github/workflows/tag-release.yml
vendored
@@ -23,7 +23,7 @@ on:
|
|||||||
- 'false'
|
- 'false'
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -39,38 +39,34 @@ jobs:
|
|||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
name: docker-release
|
name: docker-release
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
build_preset: ["dev", "lean", "py310", "websocket", "dockerize", "py311"]
|
build_preset: ["dev", "lean", "py310", "websocket", "dockerize", "py311", "py312"]
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
steps:
|
steps:
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Docker Environment
|
||||||
|
uses: ./.github/actions/setup-docker
|
||||||
|
with:
|
||||||
|
dockerhub-user: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
install-docker-compose: "false"
|
||||||
|
build: "true"
|
||||||
|
|
||||||
- name: Use Node.js 20
|
- name: Use Node.js 20
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
- name: Setup supersetbot
|
- name: Setup supersetbot
|
||||||
uses: ./.github/actions/setup-supersetbot/
|
uses: ./.github/actions/setup-supersetbot/
|
||||||
|
|
||||||
- name: Try to login to DockerHub
|
|
||||||
continue-on-error: true
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USER }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Execute custom Node.js script
|
- name: Execute custom Node.js script
|
||||||
env:
|
env:
|
||||||
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||||
@@ -91,6 +87,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
supersetbot docker \
|
supersetbot docker \
|
||||||
|
--push \
|
||||||
--preset ${{ matrix.build_preset }} \
|
--preset ${{ matrix.build_preset }} \
|
||||||
--context "$EVENT" \
|
--context "$EVENT" \
|
||||||
--context-ref "$RELEASE" $FORCE_LATEST \
|
--context-ref "$RELEASE" $FORCE_LATEST \
|
||||||
@@ -103,19 +100,19 @@ jobs:
|
|||||||
update-prs-with-release-info:
|
update-prs-with-release-info:
|
||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Use Node.js 20
|
- name: Use Node.js 20
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
|
|||||||
12
.github/workflows/tech-debt.yml
vendored
12
.github/workflows/tech-debt.yml
vendored
@@ -8,7 +8,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
config:
|
config:
|
||||||
runs-on: "ubuntu-22.04"
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||||
steps:
|
steps:
|
||||||
@@ -23,19 +23,19 @@ jobs:
|
|||||||
process-and-upload:
|
process-and-upload:
|
||||||
needs: config
|
needs: config
|
||||||
if: needs.config.outputs.has-secrets
|
if: needs.config.outputs.has-secrets
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
name: Generate Reports
|
name: Generate Reports
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: '20'
|
node-version-file: './superset-frontend/.nvmrc'
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: npm install
|
run: npm ci
|
||||||
working-directory: ./superset-frontend
|
working-directory: ./superset-frontend
|
||||||
|
|
||||||
- name: Run Script
|
- name: Run Script
|
||||||
|
|||||||
4
.github/workflows/welcome-new-users.yml
vendored
4
.github/workflows/welcome-new-users.yml
vendored
@@ -6,13 +6,13 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
welcome:
|
welcome:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Welcome Message
|
- name: Welcome Message
|
||||||
uses: actions/first-interaction@v1
|
uses: actions/first-interaction@v3
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ github.token }}
|
repo-token: ${{ github.token }}
|
||||||
|
|||||||
22
.gitignore
vendored
22
.gitignore
vendored
@@ -21,6 +21,7 @@
|
|||||||
*.swp
|
*.swp
|
||||||
__pycache__
|
__pycache__
|
||||||
|
|
||||||
|
.aider*
|
||||||
.local
|
.local
|
||||||
.cache
|
.cache
|
||||||
.bento*
|
.bento*
|
||||||
@@ -32,6 +33,7 @@ cover
|
|||||||
.env
|
.env
|
||||||
.envrc
|
.envrc
|
||||||
.idea
|
.idea
|
||||||
|
.roo
|
||||||
.mypy_cache
|
.mypy_cache
|
||||||
.python-version
|
.python-version
|
||||||
.tox
|
.tox
|
||||||
@@ -42,7 +44,7 @@ _modules
|
|||||||
_static
|
_static
|
||||||
build
|
build
|
||||||
app.db
|
app.db
|
||||||
apache_superset.egg-info/
|
*.egg-info/
|
||||||
changelog.sh
|
changelog.sh
|
||||||
dist
|
dist
|
||||||
dump.rdb
|
dump.rdb
|
||||||
@@ -50,7 +52,6 @@ env
|
|||||||
venv*
|
venv*
|
||||||
env_py3
|
env_py3
|
||||||
envpy3
|
envpy3
|
||||||
env36
|
|
||||||
local_config.py
|
local_config.py
|
||||||
/superset_config.py
|
/superset_config.py
|
||||||
/superset_text.yml
|
/superset_text.yml
|
||||||
@@ -66,7 +67,10 @@ superset-websocket/config.json
|
|||||||
*.js.map
|
*.js.map
|
||||||
node_modules
|
node_modules
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
superset/static/assets
|
superset/static/assets/*
|
||||||
|
!superset/static/assets/.gitkeep
|
||||||
|
superset/static/uploads/*
|
||||||
|
!superset/static/uploads/.gitkeep
|
||||||
superset/static/version_info.json
|
superset/static/version_info.json
|
||||||
superset-frontend/**/esm/*
|
superset-frontend/**/esm/*
|
||||||
superset-frontend/**/lib/*
|
superset-frontend/**/lib/*
|
||||||
@@ -89,6 +93,7 @@ scripts/*.zip
|
|||||||
# IntelliJ
|
# IntelliJ
|
||||||
*.iml
|
*.iml
|
||||||
venv
|
venv
|
||||||
|
.venv
|
||||||
@eaDir/
|
@eaDir/
|
||||||
|
|
||||||
# PyCharm
|
# PyCharm
|
||||||
@@ -104,6 +109,7 @@ ghostdriver.log
|
|||||||
testCSV.csv
|
testCSV.csv
|
||||||
.terser-plugin-cache/
|
.terser-plugin-cache/
|
||||||
apache-superset-*.tar.gz*
|
apache-superset-*.tar.gz*
|
||||||
|
apache_superset-*.tar.gz*
|
||||||
release.json
|
release.json
|
||||||
|
|
||||||
# Translation-related files
|
# Translation-related files
|
||||||
@@ -116,9 +122,19 @@ docker/requirements-local.txt
|
|||||||
|
|
||||||
cache/
|
cache/
|
||||||
docker/*local*
|
docker/*local*
|
||||||
|
docker/superset-websocket/config.json
|
||||||
|
docker-compose.override.yml
|
||||||
|
|
||||||
.temp_cache
|
.temp_cache
|
||||||
|
|
||||||
# Jest test report
|
# Jest test report
|
||||||
test-report.html
|
test-report.html
|
||||||
superset/static/stats/statistics.html
|
superset/static/stats/statistics.html
|
||||||
|
|
||||||
|
# LLM-related
|
||||||
|
CLAUDE.local.md
|
||||||
|
PROJECT.md
|
||||||
|
.aider*
|
||||||
|
.claude_rc*
|
||||||
|
.env.local
|
||||||
|
oxc-custom-build/
|
||||||
|
|||||||
@@ -16,14 +16,16 @@
|
|||||||
#
|
#
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/MarcoGorelli/auto-walrus
|
- repo: https://github.com/MarcoGorelli/auto-walrus
|
||||||
rev: v0.2.2
|
rev: 0.3.4
|
||||||
hooks:
|
hooks:
|
||||||
- id: auto-walrus
|
- id: auto-walrus
|
||||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||||
rev: v1.3.0
|
rev: v1.15.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: mypy
|
- id: mypy
|
||||||
|
name: mypy (main)
|
||||||
args: [--check-untyped-defs]
|
args: [--check-untyped-defs]
|
||||||
|
exclude: ^superset-extensions-cli/
|
||||||
additional_dependencies: [
|
additional_dependencies: [
|
||||||
types-simplejson,
|
types-simplejson,
|
||||||
types-python-dateutil,
|
types-python-dateutil,
|
||||||
@@ -38,31 +40,59 @@ repos:
|
|||||||
types-paramiko,
|
types-paramiko,
|
||||||
types-Markdown,
|
types-Markdown,
|
||||||
]
|
]
|
||||||
- repo: https://github.com/peterdemin/pip-compile-multi
|
- id: mypy
|
||||||
rev: v2.6.2
|
name: mypy (superset-extensions-cli)
|
||||||
hooks:
|
args: [--check-untyped-defs]
|
||||||
- id: pip-compile-multi-verify
|
files: ^superset-extensions-cli/
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.4.0
|
rev: v5.0.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: check-docstring-first
|
- id: check-docstring-first
|
||||||
- id: check-added-large-files
|
- id: check-added-large-files
|
||||||
exclude: ^.*\.(geojson)$|^docs/static/img/screenshots/.*
|
exclude: ^.*\.(geojson)$|^docs/static/img/screenshots/.*|^superset-frontend/CHANGELOG\.md$
|
||||||
- id: check-yaml
|
- id: check-yaml
|
||||||
exclude: ^helm/superset/templates/
|
exclude: ^helm/superset/templates/
|
||||||
- id: debug-statements
|
- id: debug-statements
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
|
exclude: .*/lerna\.json$
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
exclude: ^.*\.(snap)
|
exclude: ^.*\.(snap)
|
||||||
args: ["--markdown-linebreak-ext=md"]
|
args: ["--markdown-linebreak-ext=md"]
|
||||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
- repo: local
|
||||||
rev: v3.1.0 # Use the sha or tag you want to point at
|
|
||||||
hooks:
|
hooks:
|
||||||
- id: prettier
|
- id: prettier-frontend
|
||||||
additional_dependencies:
|
name: prettier (frontend)
|
||||||
- prettier@3.3.3
|
entry: bash -c 'cd superset-frontend && for file in "$@"; do npx prettier --write "${file#superset-frontend/}"; done'
|
||||||
args: ["--ignore-path=./superset-frontend/.prettierignore"]
|
language: system
|
||||||
files: "superset-frontend"
|
pass_filenames: true
|
||||||
|
files: ^superset-frontend/.*\.(js|jsx|ts|tsx|css|scss|sass|json)$
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: oxlint-frontend
|
||||||
|
name: oxlint (frontend)
|
||||||
|
entry: ./scripts/oxlint.sh
|
||||||
|
language: system
|
||||||
|
pass_filenames: true
|
||||||
|
files: ^superset-frontend/.*\.(js|jsx|ts|tsx)$
|
||||||
|
- id: custom-rules-frontend
|
||||||
|
name: custom rules (frontend)
|
||||||
|
entry: ./scripts/check-custom-rules.sh
|
||||||
|
language: system
|
||||||
|
pass_filenames: true
|
||||||
|
files: ^superset-frontend/.*\.(js|jsx|ts|tsx)$
|
||||||
|
- id: eslint-docs
|
||||||
|
name: eslint (docs)
|
||||||
|
entry: bash -c 'cd docs && FILES=$(echo "$@" | sed "s|docs/||g") && yarn eslint --fix --quiet $FILES'
|
||||||
|
language: system
|
||||||
|
pass_filenames: true
|
||||||
|
files: ^docs/.*\.(js|jsx|ts|tsx)$
|
||||||
|
- id: type-checking-frontend
|
||||||
|
name: Type-Checking (Frontend)
|
||||||
|
entry: ./scripts/check-type.js package=superset-frontend excludeDeclarationDir=cypress-base
|
||||||
|
language: system
|
||||||
|
files: ^superset-frontend\/.*\.(js|jsx|ts|tsx)$
|
||||||
|
exclude: ^superset-frontend/cypress-base\/
|
||||||
|
require_serial: true
|
||||||
# blacklist unsafe functions like make_url (see #19526)
|
# blacklist unsafe functions like make_url (see #19526)
|
||||||
- repo: https://github.com/skorokithakis/blacklist-pre-commit-hook
|
- repo: https://github.com/skorokithakis/blacklist-pre-commit-hook
|
||||||
rev: e2f070289d8eddcaec0b580d3bde29437e7c8221
|
rev: e2f070289d8eddcaec0b580d3bde29437e7c8221
|
||||||
@@ -70,27 +100,38 @@ repos:
|
|||||||
- id: blacklist
|
- id: blacklist
|
||||||
args: ["--blacklisted-names=make_url", "--ignore=tests/"]
|
args: ["--blacklisted-names=make_url", "--ignore=tests/"]
|
||||||
- repo: https://github.com/norwoodj/helm-docs
|
- repo: https://github.com/norwoodj/helm-docs
|
||||||
rev: v1.11.0
|
rev: v1.14.2
|
||||||
hooks:
|
hooks:
|
||||||
- id: helm-docs
|
- id: helm-docs
|
||||||
files: helm
|
files: helm
|
||||||
|
verbose: false
|
||||||
|
args: ["--log-level", "error"]
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
rev: v0.4.0
|
rev: v0.9.7
|
||||||
hooks:
|
hooks:
|
||||||
- id: ruff
|
|
||||||
args: [ --fix ]
|
|
||||||
- id: ruff-format
|
- id: ruff-format
|
||||||
|
- id: ruff
|
||||||
|
args: [--fix]
|
||||||
- repo: local
|
- repo: local
|
||||||
hooks:
|
hooks:
|
||||||
- id: pylint
|
- id: pylint
|
||||||
name: pylint
|
name: pylint with custom Superset plugins
|
||||||
entry: pylint
|
entry: bash
|
||||||
language: system
|
language: system
|
||||||
types: [python]
|
types: [python]
|
||||||
exclude: ^(tests/|superset/migrations/|scripts/|RELEASING/|docker/)
|
exclude: ^(tests/|superset/migrations/|scripts/|RELEASING/|docker/)
|
||||||
args:
|
args:
|
||||||
[
|
- -c
|
||||||
"-rn", # Only display messages
|
- |
|
||||||
"-sn", # Don't display the score
|
TARGET_BRANCH=${GITHUB_BASE_REF:-master}
|
||||||
"--rcfile=.pylintrc",
|
# Only fetch if we're not in CI (CI already has all refs)
|
||||||
]
|
if [ -z "$CI" ]; then
|
||||||
|
git fetch --no-recurse-submodules origin "$TARGET_BRANCH" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
BASE=$(git merge-base origin/"$TARGET_BRANCH" HEAD 2>/dev/null) || BASE="HEAD"
|
||||||
|
files=$(git diff --name-only --diff-filter=ACM "$BASE"..HEAD 2>/dev/null | grep '^superset/.*\.py$' || true)
|
||||||
|
if [ -n "$files" ]; then
|
||||||
|
pylint --rcfile=.pylintrc --load-plugins=superset.extensions.pylint --reports=no $files
|
||||||
|
else
|
||||||
|
echo "No Python files to lint."
|
||||||
|
fi
|
||||||
|
|||||||
29
.pylintrc
29
.pylintrc
@@ -52,34 +52,9 @@ extension-pkg-whitelist=pyarrow
|
|||||||
|
|
||||||
|
|
||||||
[MESSAGES CONTROL]
|
[MESSAGES CONTROL]
|
||||||
|
disable=all
|
||||||
|
enable=json-import,disallowed-sql-import,consider-using-transaction
|
||||||
|
|
||||||
# Only show warnings with the listed confidence levels. Leave empty to show
|
|
||||||
# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
|
|
||||||
confidence=
|
|
||||||
|
|
||||||
# Enable the message, report, category or checker with the given id(s). You can
|
|
||||||
# either give multiple identifier separated by comma (,) or put this option
|
|
||||||
# multiple time (only on the command line, not in the configuration file where
|
|
||||||
# it should appear only once). See also the "--disable" option for examples.
|
|
||||||
enable=
|
|
||||||
useless-suppression,
|
|
||||||
|
|
||||||
# Disable the message, report, category or checker with the given id(s). You
|
|
||||||
# can either give multiple identifiers separated by comma (,) or put this
|
|
||||||
# option multiple times (only on the command line, not in the configuration
|
|
||||||
# file where it should appear only once).You can also use "--disable=all" to
|
|
||||||
# disable everything first and then reenable specific checks. For example, if
|
|
||||||
# you want to run only the similarities checker, you can use "--disable=all
|
|
||||||
# --enable=similarities". If you want to run only the classes checker, but have
|
|
||||||
# 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,
|
|
||||||
line-too-long,
|
|
||||||
unspecified-encoding,
|
|
||||||
too-many-instance-attributes # re-enable once this no longer raises false positives
|
|
||||||
|
|
||||||
[REPORTS]
|
[REPORTS]
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
.nvmrc
|
.nvmrc
|
||||||
.prettierrc
|
.prettierrc
|
||||||
.rat-excludes
|
.rat-excludes
|
||||||
|
.swcrc
|
||||||
.*log
|
.*log
|
||||||
.*pyc
|
.*pyc
|
||||||
.*lock
|
.*lock
|
||||||
@@ -32,6 +33,8 @@ apache_superset.egg-info
|
|||||||
# json and csv in general cannot have comments
|
# json and csv in general cannot have comments
|
||||||
.*json
|
.*json
|
||||||
.*csv
|
.*csv
|
||||||
|
# jinja templates often need to be as-is
|
||||||
|
.*j2
|
||||||
# Generated doc files
|
# Generated doc files
|
||||||
env/*
|
env/*
|
||||||
docs/.htaccess*
|
docs/.htaccess*
|
||||||
@@ -70,8 +73,19 @@ google-sheets.svg
|
|||||||
ibm-db2.svg
|
ibm-db2.svg
|
||||||
postgresql.svg
|
postgresql.svg
|
||||||
snowflake.svg
|
snowflake.svg
|
||||||
|
ydb.svg
|
||||||
|
loading.svg
|
||||||
|
|
||||||
# docs-related
|
# docs-related
|
||||||
erd.puml
|
erd.puml
|
||||||
erd.svg
|
erd.svg
|
||||||
intro_header.txt
|
intro_header.txt
|
||||||
|
|
||||||
|
# for LLMs
|
||||||
|
llm-context.md
|
||||||
|
AGENTS.md
|
||||||
|
LLMS.md
|
||||||
|
CLAUDE.md
|
||||||
|
CURSOR.md
|
||||||
|
GEMINI.md
|
||||||
|
GPT.md
|
||||||
|
|||||||
224
AGENTS.md
Normal file
224
AGENTS.md
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
# LLM Context Guide for Apache Superset
|
||||||
|
|
||||||
|
Apache Superset is a data visualization platform with Flask/Python backend and React/TypeScript frontend.
|
||||||
|
|
||||||
|
## ⚠️ CRITICAL: Ongoing Refactors (What NOT to Do)
|
||||||
|
|
||||||
|
**These migrations are actively happening - avoid deprecated patterns:**
|
||||||
|
|
||||||
|
### Frontend Modernization
|
||||||
|
- **NO `any` types** - Use proper TypeScript types
|
||||||
|
- **NO JavaScript files** - Convert to TypeScript (.ts/.tsx)
|
||||||
|
- **Use @superset-ui/core** - Don't import Ant Design directly, prefer Ant Design component wrappers from @superset-ui/core/components
|
||||||
|
- **Use antd theming tokens** - Prefer antd tokens over legacy theming tokens
|
||||||
|
- **Avoid custom css and styles** - Follow antd best practices and avoid styling and custom CSS whenever possible
|
||||||
|
|
||||||
|
### Testing Strategy Migration
|
||||||
|
- **Prefer unit tests** over integration tests
|
||||||
|
- **Prefer integration tests** over end-to-end tests
|
||||||
|
- **Use Playwright for E2E tests** - Migrating from Cypress
|
||||||
|
- **Cypress is deprecated** - Will be removed once migration is completed
|
||||||
|
- **Use Jest + React Testing Library** for component testing
|
||||||
|
- **Use `test()` instead of `describe()`** - Follow [avoid nesting when testing](https://kentcdodds.com/blog/avoid-nesting-when-youre-testing) principles
|
||||||
|
|
||||||
|
### Backend Type Safety
|
||||||
|
- **Add type hints** - All new Python code needs proper typing
|
||||||
|
- **MyPy compliance** - Run `pre-commit run mypy` to validate
|
||||||
|
- **SQLAlchemy typing** - Use proper model annotations
|
||||||
|
|
||||||
|
### UUID Migration
|
||||||
|
- **Prefer UUIDs over auto-incrementing IDs** - New models should use UUID primary keys
|
||||||
|
- **External API exposure** - Use UUIDs in public APIs instead of internal integer IDs
|
||||||
|
- **Existing models** - Add UUID fields alongside integer IDs for gradual migration
|
||||||
|
|
||||||
|
## Key Directories
|
||||||
|
|
||||||
|
```
|
||||||
|
superset/
|
||||||
|
├── superset/ # Python backend (Flask, SQLAlchemy)
|
||||||
|
│ ├── views/api/ # REST API endpoints
|
||||||
|
│ ├── models/ # Database models
|
||||||
|
│ └── connectors/ # Database connections
|
||||||
|
├── superset-frontend/src/ # React TypeScript frontend
|
||||||
|
│ ├── components/ # Reusable components
|
||||||
|
│ ├── explore/ # Chart builder
|
||||||
|
│ ├── dashboard/ # Dashboard interface
|
||||||
|
│ └── SqlLab/ # SQL editor
|
||||||
|
├── superset-frontend/packages/
|
||||||
|
│ └── superset-ui-core/ # UI component library (USE THIS)
|
||||||
|
├── tests/ # Python/integration tests
|
||||||
|
├── docs/ # Documentation (UPDATE FOR CHANGES)
|
||||||
|
└── UPDATING.md # Breaking changes log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code Standards
|
||||||
|
|
||||||
|
### TypeScript Frontend
|
||||||
|
- **Avoid `any` types** - Use proper TypeScript, reuse existing types
|
||||||
|
- **Functional components** with hooks
|
||||||
|
- **@superset-ui/core** for UI components (not direct antd)
|
||||||
|
- **Jest** for testing (NO Enzyme)
|
||||||
|
- **Redux** for global state where it exists, hooks for local
|
||||||
|
|
||||||
|
### Python Backend
|
||||||
|
- **Type hints required** for all new code
|
||||||
|
- **MyPy compliant** - run `pre-commit run mypy`
|
||||||
|
- **SQLAlchemy models** with proper typing
|
||||||
|
- **pytest** for testing
|
||||||
|
|
||||||
|
### Apache License Headers
|
||||||
|
- **New files require ASF license headers** - When creating new code files, include the standard Apache Software Foundation license header
|
||||||
|
- **LLM instruction files are excluded** - Files like AGENTS.md, CLAUDE.md, etc. are in `.rat-excludes` to avoid header token overhead
|
||||||
|
|
||||||
|
### Code Comments
|
||||||
|
- **Avoid time-specific language** - Don't use words like "now", "currently", "today" in code comments as they become outdated
|
||||||
|
- **Write timeless comments** - Comments should remain accurate regardless of when they're read
|
||||||
|
|
||||||
|
## Documentation Requirements
|
||||||
|
|
||||||
|
- **docs/**: Update for any user-facing changes
|
||||||
|
- **UPDATING.md**: Add breaking changes here
|
||||||
|
- **Docstrings**: Required for new functions/classes
|
||||||
|
|
||||||
|
## Architecture Patterns
|
||||||
|
|
||||||
|
### Security & Features
|
||||||
|
- **RBAC**: Role-based access via Flask-AppBuilder
|
||||||
|
- **Feature flags**: Control feature rollouts
|
||||||
|
- **Row-level security**: SQL-based data access control
|
||||||
|
|
||||||
|
## Test Utilities
|
||||||
|
|
||||||
|
### Python Test Helpers
|
||||||
|
- **`SupersetTestCase`** - Base class in `tests/integration_tests/base_tests.py`
|
||||||
|
- **`@with_config`** - Config mocking decorator
|
||||||
|
- **`@with_feature_flags`** - Feature flag testing
|
||||||
|
- **`login_as()`, `login_as_admin()`** - Authentication helpers
|
||||||
|
- **`create_dashboard()`, `create_slice()`** - Data setup utilities
|
||||||
|
|
||||||
|
### TypeScript Test Helpers
|
||||||
|
- **`superset-frontend/spec/helpers/testing-library.tsx`** - Custom render() with providers
|
||||||
|
- **`createWrapper()`** - Redux/Router/Theme wrapper
|
||||||
|
- **`selectOption()`** - Select component helper
|
||||||
|
- **React Testing Library** - NO Enzyme (removed)
|
||||||
|
|
||||||
|
### Test Database Patterns
|
||||||
|
- **Mock patterns**: Use `MagicMock()` for config objects, avoid `AsyncMock` for synchronous code
|
||||||
|
- **API tests**: Update expected columns when adding new model fields
|
||||||
|
|
||||||
|
### Running Tests
|
||||||
|
```bash
|
||||||
|
# Frontend
|
||||||
|
npm run test # All tests
|
||||||
|
npm run test -- filename.test.tsx # Single file
|
||||||
|
|
||||||
|
# E2E Tests (Playwright - NEW)
|
||||||
|
npm run playwright:test # All Playwright tests
|
||||||
|
npm run playwright:ui # Interactive UI mode
|
||||||
|
npm run playwright:headed # See browser during tests
|
||||||
|
npx playwright test tests/auth/login.spec.ts # Single file
|
||||||
|
npm run playwright:debug tests/auth/login.spec.ts # Debug specific file
|
||||||
|
|
||||||
|
# E2E Tests (Cypress - DEPRECATED)
|
||||||
|
cd superset-frontend/cypress-base
|
||||||
|
npm run cypress-run-chrome # All Cypress tests (headless)
|
||||||
|
npm run cypress-debug # Interactive Cypress UI
|
||||||
|
|
||||||
|
# Backend
|
||||||
|
pytest # All tests
|
||||||
|
pytest tests/unit_tests/specific_test.py # Single file
|
||||||
|
pytest tests/unit_tests/ # Directory
|
||||||
|
|
||||||
|
# If pytest fails with database/setup issues, ask the user to run test environment setup
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment Validation
|
||||||
|
|
||||||
|
**Quick Setup Check (run this first):**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Verify Superset is running
|
||||||
|
curl -f http://localhost:8088/health || echo "❌ Setup required - see https://superset.apache.org/docs/contributing/development#working-with-llms"
|
||||||
|
```
|
||||||
|
|
||||||
|
**If health checks fail:**
|
||||||
|
"It appears you aren't set up properly. Please refer to the [Working with LLMs](https://superset.apache.org/docs/contributing/development#working-with-llms) section in the development docs for setup instructions."
|
||||||
|
|
||||||
|
**Key Project Files:**
|
||||||
|
- `superset-frontend/package.json` - Frontend build scripts (`npm run dev` on port 9000, `npm run test`, `npm run lint`)
|
||||||
|
- `pyproject.toml` - Python tooling (ruff, mypy configs)
|
||||||
|
- `requirements/` folder - Python dependencies (base.txt, development.txt)
|
||||||
|
|
||||||
|
## SQLAlchemy Query Best Practices
|
||||||
|
- **Use negation operator**: `~Model.field` instead of `== False` to avoid ruff E712 errors
|
||||||
|
- **Example**: `~Model.is_active` instead of `Model.is_active == False`
|
||||||
|
|
||||||
|
## Pull Request Guidelines
|
||||||
|
|
||||||
|
**When creating pull requests:**
|
||||||
|
|
||||||
|
1. **Read the current PR template**: Always check `.github/PULL_REQUEST_TEMPLATE.md` for the latest format
|
||||||
|
2. **Use the template sections**: Include all sections from the template (SUMMARY, BEFORE/AFTER, TESTING INSTRUCTIONS, ADDITIONAL INFORMATION)
|
||||||
|
3. **Follow PR title conventions**: Use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)
|
||||||
|
- Format: `type(scope): description`
|
||||||
|
- Example: `fix(dashboard): load charts correctly`
|
||||||
|
- Types: `fix`, `feat`, `docs`, `style`, `refactor`, `perf`, `test`, `chore`
|
||||||
|
|
||||||
|
**Important**: Always reference the actual template file at `.github/PULL_REQUEST_TEMPLATE.md` instead of using cached content, as the template may be updated over time.
|
||||||
|
|
||||||
|
## Pre-commit Validation
|
||||||
|
|
||||||
|
**Use pre-commit hooks for quality validation:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install hooks
|
||||||
|
pre-commit install
|
||||||
|
|
||||||
|
# IMPORTANT: Stage your changes first!
|
||||||
|
git add . # Pre-commit only checks staged files
|
||||||
|
|
||||||
|
# Quick validation (faster than --all-files)
|
||||||
|
pre-commit run # Staged files only
|
||||||
|
pre-commit run mypy # Python type checking
|
||||||
|
pre-commit run prettier # Code formatting
|
||||||
|
pre-commit run eslint # Frontend linting
|
||||||
|
```
|
||||||
|
|
||||||
|
**Important pre-commit usage notes:**
|
||||||
|
- **Stage files first**: Run `git add .` before `pre-commit run` to check only changed files (much faster)
|
||||||
|
- **Virtual environment**: Activate your Python virtual environment before running pre-commit
|
||||||
|
```bash
|
||||||
|
# Common virtual environment locations (yours may differ):
|
||||||
|
source .venv/bin/activate # if using .venv
|
||||||
|
source venv/bin/activate # if using venv
|
||||||
|
source ~/venvs/superset/bin/activate # if using a central location
|
||||||
|
```
|
||||||
|
If you get a "command not found" error, ask the user which virtual environment to activate
|
||||||
|
- **Auto-fixes**: Some hooks auto-fix issues (e.g., trailing whitespace). Re-run after fixes are applied
|
||||||
|
|
||||||
|
## Common File Patterns
|
||||||
|
|
||||||
|
### API Structure
|
||||||
|
- **`/api.py`** - REST endpoints with decorators and OpenAPI docstrings
|
||||||
|
- **`/schemas.py`** - Marshmallow validation schemas for OpenAPI spec
|
||||||
|
- **`/commands/`** - Business logic classes with @transaction() decorators
|
||||||
|
- **`/models/`** - SQLAlchemy database models
|
||||||
|
- **OpenAPI docs**: Auto-generated at `/swagger/v1` from docstrings and schemas
|
||||||
|
|
||||||
|
### Migration Files
|
||||||
|
- **Location**: `superset/migrations/versions/`
|
||||||
|
- **Naming**: `YYYY-MM-DD_HH-MM_hash_description.py`
|
||||||
|
- **Utilities**: Use helpers from `superset.migrations.shared.utils` for database compatibility
|
||||||
|
- **Pattern**: Import utilities instead of raw SQLAlchemy operations
|
||||||
|
|
||||||
|
## Platform-Specific Instructions
|
||||||
|
|
||||||
|
- **[CLAUDE.md](CLAUDE.md)** - For Claude/Anthropic tools
|
||||||
|
- **[.github/copilot-instructions.md](.github/copilot-instructions.md)** - For GitHub Copilot
|
||||||
|
- **[GEMINI.md](GEMINI.md)** - For Google Gemini tools
|
||||||
|
- **[GPT.md](GPT.md)** - For OpenAI/ChatGPT tools
|
||||||
|
- **[.cursor/rules/dev-standard.mdc](.cursor/rules/dev-standard.mdc)** - For Cursor editor
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**LLM Note**: This codebase is actively modernizing toward full TypeScript and type safety. Always run `pre-commit run` to validate changes. Follow the ongoing refactors section to avoid deprecated patterns.
|
||||||
@@ -44,3 +44,8 @@ under the License.
|
|||||||
- [4.0.1](./CHANGELOG/4.0.1.md)
|
- [4.0.1](./CHANGELOG/4.0.1.md)
|
||||||
- [4.0.2](./CHANGELOG/4.0.2.md)
|
- [4.0.2](./CHANGELOG/4.0.2.md)
|
||||||
- [4.1.0](./CHANGELOG/4.1.0.md)
|
- [4.1.0](./CHANGELOG/4.1.0.md)
|
||||||
|
- [4.1.1](./CHANGELOG/4.1.1.md)
|
||||||
|
- [4.1.2](./CHANGELOG/4.1.2.md)
|
||||||
|
- [4.1.3](./CHANGELOG/4.1.3.md)
|
||||||
|
- [4.1.4](./CHANGELOG/4.1.4.md)
|
||||||
|
- [5.0.0](./CHANGELOG/5.0.0.md)
|
||||||
|
|||||||
50
CHANGELOG/4.1.1.md
Normal file
50
CHANGELOG/4.1.1.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## Change Log
|
||||||
|
|
||||||
|
### 4.1 (Fri Nov 15 22:13:57 2024 +0530)
|
||||||
|
|
||||||
|
**Database Migrations**
|
||||||
|
|
||||||
|
**Features**
|
||||||
|
|
||||||
|
**Fixes**
|
||||||
|
|
||||||
|
- [#30886](https://github.com/apache/superset/pull/30886) fix: blocks UI elements on right side (@samarsrivastav)
|
||||||
|
- [#30859](https://github.com/apache/superset/pull/30859) fix(package.json): Pin luxon version to unblock master (@geido)
|
||||||
|
- [#30588](https://github.com/apache/superset/pull/30588) fix(explore): column data type tooltip format (@mistercrunch)
|
||||||
|
- [#29911](https://github.com/apache/superset/pull/29911) fix: Rename database from 'couchbasedb' to 'couchbase' in documentation and db_engine_specs (@ayush-couchbase)
|
||||||
|
- [#30828](https://github.com/apache/superset/pull/30828) fix(TimezoneSelector): Failing unit tests due to timezone change (@geido)
|
||||||
|
- [#30875](https://github.com/apache/superset/pull/30875) fix: don't show metadata for embedded dashboards (@sadpandajoe)
|
||||||
|
- [#30851](https://github.com/apache/superset/pull/30851) fix: Graph chart colors (@michael-s-molina)
|
||||||
|
- [#29867](https://github.com/apache/superset/pull/29867) fix(capitalization): Capitalizing a button. (@rusackas)
|
||||||
|
- [#29782](https://github.com/apache/superset/pull/29782) fix(translations): Translate embedded errors (@rusackas)
|
||||||
|
- [#29772](https://github.com/apache/superset/pull/29772) fix: Fixing incomplete string escaping. (@rusackas)
|
||||||
|
- [#29725](https://github.com/apache/superset/pull/29725) fix(frontend/docker, ci): fix borked Docker build due to Lerna v8 uplift (@hainenber)
|
||||||
|
|
||||||
|
**Others**
|
||||||
|
|
||||||
|
- [#30576](https://github.com/apache/superset/pull/30576) chore: add link to Superset when report error (@eschutho)
|
||||||
|
- [#29786](https://github.com/apache/superset/pull/29786) refactor(Slider): Upgrade Slider to Antd 5 (@geido)
|
||||||
|
- [#29674](https://github.com/apache/superset/pull/29674) refactor(ChartCreation): Migrate tests to RTL (@rtexelm)
|
||||||
|
- [#29843](https://github.com/apache/superset/pull/29843) refactor(controls): Migrate AdhocMetricOption.test to RTL (@rtexelm)
|
||||||
|
- [#29845](https://github.com/apache/superset/pull/29845) refactor(controls): Migrate MetricDefinitionValue.test to RTL (@rtexelm)
|
||||||
|
- [#28424](https://github.com/apache/superset/pull/28424) docs: Check markdown files for bad links using linkinator (@rusackas)
|
||||||
|
- [#29768](https://github.com/apache/superset/pull/29768) docs(contributing): fix broken link to translations sub-section (@sfirke)
|
||||||
83
CHANGELOG/4.1.2.md
Normal file
83
CHANGELOG/4.1.2.md
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## Change Log
|
||||||
|
|
||||||
|
### 4.1.2 (Fri Mar 7 13:28:05 2025 -0800)
|
||||||
|
|
||||||
|
**Database Migrations**
|
||||||
|
|
||||||
|
- [#32538](https://github.com/apache/superset/pull/32538) fix(migrations): Handle comparator None in old time comparison migration (@Antonio-RiveroMartnez)
|
||||||
|
- [#32155](https://github.com/apache/superset/pull/32155) fix(migrations): Handle no params in time comparison migration (@Antonio-RiveroMartnez)
|
||||||
|
- [#31185](https://github.com/apache/superset/pull/31185) fix: check for column before adding in migrations (@betodealmeida)
|
||||||
|
|
||||||
|
**Features**
|
||||||
|
|
||||||
|
- [#29974](https://github.com/apache/superset/pull/29974) feat(sqllab): Adds refresh button to table metadata in SQL Lab (@Usiel)
|
||||||
|
|
||||||
|
**Fixes**
|
||||||
|
|
||||||
|
- [#32515](https://github.com/apache/superset/pull/32515) fix(sqllab): Allow clear on schema and catalog (@justinpark)
|
||||||
|
- [#32500](https://github.com/apache/superset/pull/32500) fix: dashboard, chart and dataset import validation (@dpgaspar)
|
||||||
|
- [#31353](https://github.com/apache/superset/pull/31353) fix(sqllab): duplicate error message (@betodealmeida)
|
||||||
|
- [#31407](https://github.com/apache/superset/pull/31407) fix: Big Number side cut fixed (@fardin-developer)
|
||||||
|
- [#31480](https://github.com/apache/superset/pull/31480) fix(sunburst): Use metric label from verbose map (@gerbermichi)
|
||||||
|
- [#31427](https://github.com/apache/superset/pull/31427) fix(tags): clean up bulk create api and schema (@villebro)
|
||||||
|
- [#31334](https://github.com/apache/superset/pull/31334) fix(docs): add custom editUrl path for intro page (@dwgrossberg)
|
||||||
|
- [#31353](https://github.com/apache/superset/pull/31353) fix(sqllab): duplicate error message (@betodealmeida)
|
||||||
|
- [#31323](https://github.com/apache/superset/pull/31323) fix: Use clickhouse sqlglot dialect for YDB (@vgvoleg)
|
||||||
|
- [#31198](https://github.com/apache/superset/pull/31198) fix: add more clickhouse disallowed functions on config (@dpgaspar)
|
||||||
|
- [#31194](https://github.com/apache/superset/pull/31194) fix(embedded): Hide anchor links in embedded mode (@Vitor-Avila)
|
||||||
|
- [#31960](https://github.com/apache/superset/pull/31960) fix(sqllab): Missing allowHTML props in ResultTableExtension (@justinpark)
|
||||||
|
- [#31332](https://github.com/apache/superset/pull/31332) fix: prevent multiple pvm errors on migration (@eschutho)
|
||||||
|
- [#31437](https://github.com/apache/superset/pull/31437) fix(database import): Gracefully handle error to get catalog schemas (@Vitor-Avila)
|
||||||
|
- [#31173](https://github.com/apache/superset/pull/31173) fix: cache-warmup fails (@nsivarajan)
|
||||||
|
- [#30442](https://github.com/apache/superset/pull/30442) fix(fe/src/dashboard): optional chaining for possibly nullable parent attribute in LayoutItem type (@hainenber)
|
||||||
|
- [#31639](https://github.com/apache/superset/pull/31639) fix(sqllab): unable to update saved queries (@DamianPendrak)
|
||||||
|
- [#29898](https://github.com/apache/superset/pull/29898) fix: parse pandas pivot null values (@eschutho)
|
||||||
|
- [#31414](https://github.com/apache/superset/pull/31414) fix(Pivot Table): Fix column width to respect currency config (@Vitor-Avila)
|
||||||
|
- [#31335](https://github.com/apache/superset/pull/31335) fix(histogram): axis margin padding consistent with other graphs (@tatiana-cherne)
|
||||||
|
- [#31301](https://github.com/apache/superset/pull/31301) fix(AllEntitiesTable): show Tags (@alexandrusoare)
|
||||||
|
- [#31329](https://github.com/apache/superset/pull/31329) fix: pass string to `process_template` (@betodealmeida)
|
||||||
|
- [#31341](https://github.com/apache/superset/pull/31341) fix(pinot): remove query aliases from SELECT and ORDER BY clauses in Pinot (@yuribogomolov)
|
||||||
|
- [#31308](https://github.com/apache/superset/pull/31308) fix: annotations on horizontal bar chart (@DamianPendrak)
|
||||||
|
- [#31294](https://github.com/apache/superset/pull/31294) fix(sqllab): Remove update_saved_query_exec_info to reduce lag (@justinpark)
|
||||||
|
- [#30897](https://github.com/apache/superset/pull/30897) fix: Exception handling for SQL Lab views (@michael-s-molina)
|
||||||
|
- [#31199](https://github.com/apache/superset/pull/31199) fix(Databricks): Escape catalog and schema names in pre-queries (@Vitor-Avila)
|
||||||
|
- [#31265](https://github.com/apache/superset/pull/31265) fix(trino): db session error in handle cursor (@justinpark)
|
||||||
|
- [#31024](https://github.com/apache/superset/pull/31024) fix(dataset): use sqlglot for DML check (@betodealmeida)
|
||||||
|
- [#29885](https://github.com/apache/superset/pull/29885) fix: add mutator to get_columns_description (@eschutho)
|
||||||
|
- [#30821](https://github.com/apache/superset/pull/30821) fix: x axis title disappears when editing bar chart (@DamianPendrak)
|
||||||
|
- [#31181](https://github.com/apache/superset/pull/31181) fix: Time-series Line Chart Display unnecessary total (@michael-s-molina)
|
||||||
|
- [#31163](https://github.com/apache/superset/pull/31163) fix(Dashboard): Backward compatible shared_label_colors field (@geido)
|
||||||
|
- [#31156](https://github.com/apache/superset/pull/31156) fix: check orderby (@betodealmeida)
|
||||||
|
- [#31154](https://github.com/apache/superset/pull/31154) fix: Remove unwanted commit on Trino's handle_cursor (@michael-s-molina)
|
||||||
|
- [#31151](https://github.com/apache/superset/pull/31151) fix: Revert "feat(trino): Add functionality to upload data (#29164)" (@michael-s-molina)
|
||||||
|
- [#31031](https://github.com/apache/superset/pull/31031) fix(Dashboard): Ensure shared label colors are updated (@geido)
|
||||||
|
- [#30967](https://github.com/apache/superset/pull/30967) fix(release validation): scripts now support RSA and EDDSA keys. (@rusackas)
|
||||||
|
- [#30881](https://github.com/apache/superset/pull/30881) fix(Dashboard): Native & Cross-Filters Scoping Performance (@geido)
|
||||||
|
- [#30887](https://github.com/apache/superset/pull/30887) fix(imports): import query_context for imports with charts (@lindenh)
|
||||||
|
- [#31008](https://github.com/apache/superset/pull/31008) fix(explore): verified props is not updated (@justinpark)
|
||||||
|
- [#30646](https://github.com/apache/superset/pull/30646) fix(Dashboard): Retain colors when color scheme not set (@geido)
|
||||||
|
- [#30962](https://github.com/apache/superset/pull/30962) fix(Dashboard): Exclude edit param in async screenshot (@geido)
|
||||||
|
|
||||||
|
**Others**
|
||||||
|
|
||||||
|
- [#32043](https://github.com/apache/superset/pull/32043) chore: Skip the creation of secondary perms during catalog migrations (@Vitor-Avila)
|
||||||
|
- [#30865](https://github.com/apache/superset/pull/30865) docs: Updating 4.1 Release Notes (@yousoph)
|
||||||
58
CHANGELOG/4.1.3.md
Normal file
58
CHANGELOG/4.1.3.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## Change Log
|
||||||
|
|
||||||
|
### 4.1.3 (Thu May 29 02:31:07 2025 -0500)
|
||||||
|
|
||||||
|
**Database Migrations**
|
||||||
|
|
||||||
|
**Features**
|
||||||
|
|
||||||
|
**Fixes**
|
||||||
|
|
||||||
|
- [#33522](https://github.com/apache/superset/pull/33522) fix(Sqllab): Autocomplete got stuck in UI when open it too fast (@rebenitez1802)
|
||||||
|
- [#33425](https://github.com/apache/superset/pull/33425) fix(table-chart): time shift is not working (@justinpark)
|
||||||
|
- [#32414](https://github.com/apache/superset/pull/32414) fix(api): Added uuid to list api calls (@withnale)
|
||||||
|
- [#33354](https://github.com/apache/superset/pull/33354) fix: loading examples from raw.githubusercontent.com fails with 429 errors (@mistercrunch)
|
||||||
|
- [#32382](https://github.com/apache/superset/pull/32382) fix(pinot): revert join and subquery flags (@yuribogomolov)
|
||||||
|
- [#32473](https://github.com/apache/superset/pull/32473) fix(plugin-chart-echarts): remove erroneous upper bound value (@villebro)
|
||||||
|
- [#33048](https://github.com/apache/superset/pull/33048) fix: improve error type on parse error (@justinpark)
|
||||||
|
- [#32968](https://github.com/apache/superset/pull/32968) fix(pivot-table): Revert "fix(Pivot Table): Fix column width to respect currency config (#31414)" (@justinpark)
|
||||||
|
- [#32795](https://github.com/apache/superset/pull/32795) fix(log): store navigation path to get correct logging path (@justinpark)
|
||||||
|
- [#33216](https://github.com/apache/superset/pull/33216) fix: Downgrade to marshmallow<4 (@amotl)
|
||||||
|
- [#32866](https://github.com/apache/superset/pull/32866) fix: make packages PEP 625 compliant (@sadpandajoe)
|
||||||
|
- [#32035](https://github.com/apache/superset/pull/32035) fix(fe/dashboard-list): display modifier info for `Last modified` data (@hainenber)
|
||||||
|
- [#32708](https://github.com/apache/superset/pull/32708) fix(logging): missing path in event data (@justinpark)
|
||||||
|
- [#32699](https://github.com/apache/superset/pull/32699) fix: Signature of Celery pruner jobs (@michael-s-molina)
|
||||||
|
- [#32681](https://github.com/apache/superset/pull/32681) fix(log): Update recent_activity by event name (@justinpark)
|
||||||
|
- [#32608](https://github.com/apache/superset/pull/32608) fix(welcome): perf on distinct recent activities (@justinpark)
|
||||||
|
- [#32572](https://github.com/apache/superset/pull/32572) fix: Log table retention policy (@michael-s-molina)
|
||||||
|
- [#32406](https://github.com/apache/superset/pull/32406) fix(model/helper): represent RLS filter clause in proper textual SQL string (@hainenber)
|
||||||
|
- [#32240](https://github.com/apache/superset/pull/32240) fix: upgrade to 3.11.11-slim-bookworm to address critical vulnerabilities (@gpchandran)
|
||||||
|
- [#30858](https://github.com/apache/superset/pull/30858) fix(chart data): removing query from /chart/data payload when accessing as guest user (@fisjac)
|
||||||
|
|
||||||
|
**Others**
|
||||||
|
|
||||||
|
- [#33612](https://github.com/apache/superset/pull/33612) chore: update Dockerfile - Upgrade to 3.11.12 (@gpchandran)
|
||||||
|
- [#33435](https://github.com/apache/superset/pull/33435) docs: CVEs fixed on 4.1.2 (@sha174n)
|
||||||
|
- [#33339](https://github.com/apache/superset/pull/33339) chore(🦾): bump python h11 0.14.0 -> 0.16.0 (@github-actions[bot])
|
||||||
|
- [#32745](https://github.com/apache/superset/pull/32745) chore(🦾): bump python sqlglot 26.1.3 -> 26.11.1 (@github-actions[bot])
|
||||||
|
- [#32782](https://github.com/apache/superset/pull/32782) chore: Revert "chore: bump base image in Dockerfile with `ARG PY_VER=3.11.11-slim-bookworm`" (@sadpandajoe)
|
||||||
|
- [#32780](https://github.com/apache/superset/pull/32780) chore: bump base image in Dockerfile with `ARG PY_VER=3.11.11-slim-bookworm` (@gpchandran)
|
||||||
33
CHANGELOG/4.1.4.md
Normal file
33
CHANGELOG/4.1.4.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## Change Log
|
||||||
|
|
||||||
|
### 4.1.4 (Thu Jul 24 08:30:04 2025 -0300)
|
||||||
|
|
||||||
|
**Database Migrations**
|
||||||
|
|
||||||
|
**Features**
|
||||||
|
|
||||||
|
**Fixes**
|
||||||
|
- [#34289](https://github.com/apache/superset/pull/34289) fix: Saved queries list break if one query can't be parsed (@michael-s-molina)
|
||||||
|
- [#33059](https://github.com/apache/superset/pull/33059) fix: Adds missing __init__ file to commands/logs (@michael-s-molina)
|
||||||
|
|
||||||
|
**Others**
|
||||||
|
- [#32236](https://github.com/apache/superset/pull/32236) chore(deps): bump cryptography from 43.0.3 to 44.0.1 (@dependabot[bot])
|
||||||
937
CHANGELOG/5.0.0.md
Normal file
937
CHANGELOG/5.0.0.md
Normal file
@@ -0,0 +1,937 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
## Change Log
|
||||||
|
|
||||||
|
### 5.0.0 (Wed Jun 18 13:54:10 2025 -0300)
|
||||||
|
|
||||||
|
**Database Migrations**
|
||||||
|
|
||||||
|
- [#31959](https://github.com/apache/superset/pull/31959) refactor: upload data unification, less permissions and less endpoints (@dpgaspar)
|
||||||
|
- [#31582](https://github.com/apache/superset/pull/31582) refactor: Removes 5.0 approved legacy charts (@michael-s-molina)
|
||||||
|
- [#31490](https://github.com/apache/superset/pull/31490) feat: use docker in frontend GHA to parallelize work (@mistercrunch)
|
||||||
|
- [#30398](https://github.com/apache/superset/pull/30398) feat: add and use UUIDMixin for most models (@mistercrunch)
|
||||||
|
- [#29649](https://github.com/apache/superset/pull/29649) fix: remove old database constraint on the Dataset model (@betodealmeida)
|
||||||
|
- [#31447](https://github.com/apache/superset/pull/31447) chore: enforce more ruff rules (@mistercrunch)
|
||||||
|
- [#31303](https://github.com/apache/superset/pull/31303) feat: Adds helper functions for migrations (@luizotavio32)
|
||||||
|
|
||||||
|
**Features**
|
||||||
|
|
||||||
|
- [#32052](https://github.com/apache/superset/pull/32052) feat: add connector for Parseable (@AdheipSingh)
|
||||||
|
- [#32051](https://github.com/apache/superset/pull/32051) feat(sqllab): improve table metadata UI (@justinpark)
|
||||||
|
- [#29900](https://github.com/apache/superset/pull/29900) feat(sqllab): Replace FilterableTable by AgGrid Table (@justinpark)
|
||||||
|
- [#31979](https://github.com/apache/superset/pull/31979) feat(fe): upgrade `superset-frontend` to Typescript v5 (@hainenber)
|
||||||
|
- [#31413](https://github.com/apache/superset/pull/31413) feat: add date format to the email subject (@US579)
|
||||||
|
- [#31984](https://github.com/apache/superset/pull/31984) feat: run prettier before eslint in pre-commit hooks (@mistercrunch)
|
||||||
|
- [#31889](https://github.com/apache/superset/pull/31889) feat(CalendarFrame): adding previous calendar quarter (@alexandrusoare)
|
||||||
|
- [#31796](https://github.com/apache/superset/pull/31796) feat: get docker-compose to work as the backend for Cypress tests (@mistercrunch)
|
||||||
|
- [#31876](https://github.com/apache/superset/pull/31876) feat: use npm run dev-server in docker-compose (@mistercrunch)
|
||||||
|
- [#31849](https://github.com/apache/superset/pull/31849) feat: old Firebolt dialect (@betodealmeida)
|
||||||
|
- [#31840](https://github.com/apache/superset/pull/31840) feat: Mutate SQL query executed by alerts (@Vitor-Avila)
|
||||||
|
- [#31825](https://github.com/apache/superset/pull/31825) feat: Firebolt sqlglot dialect (@betodealmeida)
|
||||||
|
- [#31575](https://github.com/apache/superset/pull/31575) feat: redesign labels (@mistercrunch)
|
||||||
|
- [#31747](https://github.com/apache/superset/pull/31747) feat: improve docker-compose services boot sequence (@mistercrunch)
|
||||||
|
- [#31760](https://github.com/apache/superset/pull/31760) feat: allowing print() statements to be unbuffered in docker (@mistercrunch)
|
||||||
|
- [#31486](https://github.com/apache/superset/pull/31486) feat: push predicates into virtual datasets (@betodealmeida)
|
||||||
|
- [#31518](https://github.com/apache/superset/pull/31518) feat: adds a github action to auto label draft prs (@sadpandajoe)
|
||||||
|
- [#31740](https://github.com/apache/superset/pull/31740) feat: make CI against 'next' python version not-required (@mistercrunch)
|
||||||
|
- [#31602](https://github.com/apache/superset/pull/31602) feat(Sqllab): Enabling selection and copying of columns and rows in sql lab and dataset view (@samraHanif0340)
|
||||||
|
- [#31580](https://github.com/apache/superset/pull/31580) feat(doris): add catalog support for Apache Doris (@liujiwen-up)
|
||||||
|
- [#25869](https://github.com/apache/superset/pull/25869) feat(plugin): add plugin-chart-cartodiagram (@jansule)
|
||||||
|
- [#31037](https://github.com/apache/superset/pull/31037) feat(country-map): add map for France with all overseas territories (@tarraschk)
|
||||||
|
- [#31386](https://github.com/apache/superset/pull/31386) feat(gha): various docker / docker-compose build improvements (@mistercrunch)
|
||||||
|
- [#31316](https://github.com/apache/superset/pull/31316) feat(sqllab): giving the query history pane a facelift (@mistercrunch)
|
||||||
|
- [#31273](https://github.com/apache/superset/pull/31273) feat: fine-grain chart data telemetry (@betodealmeida)
|
||||||
|
- [#31141](https://github.com/apache/superset/pull/31141) feat: add YDB as a new database engine (@vgvoleg)
|
||||||
|
- [#31261](https://github.com/apache/superset/pull/31261) feat(Handlebars): formatNumber and group helpers (@Vitor-Avila)
|
||||||
|
- [#31260](https://github.com/apache/superset/pull/31260) feat: use uv in CI (@mistercrunch)
|
||||||
|
- [#31187](https://github.com/apache/superset/pull/31187) feat(sqllab): Popup notification when download data can exceed row count (@justinpark)
|
||||||
|
- [#31166](https://github.com/apache/superset/pull/31166) feat: make sure to quote formulas on Excel export (@betodealmeida)
|
||||||
|
- [#31164](https://github.com/apache/superset/pull/31164) feat: purge OAuth2 tokens when DB changes (@betodealmeida)
|
||||||
|
- [#30870](https://github.com/apache/superset/pull/30870) feat: make ephemeral env use supersetbot + deprecate build_docker.py (@mistercrunch)
|
||||||
|
- [#30926](https://github.com/apache/superset/pull/30926) feat(trino,presto): add missing time grains (@villebro)
|
||||||
|
- [#30884](https://github.com/apache/superset/pull/30884) feat: add logging durations for screenshot async service (@mistercrunch)
|
||||||
|
- [#29609](https://github.com/apache/superset/pull/29609) feat: add a script to check environment software versions (@mistercrunch)
|
||||||
|
- [#30081](https://github.com/apache/superset/pull/30081) feat(oauth2): add support for trino (@joaoferrao)
|
||||||
|
- [#30694](https://github.com/apache/superset/pull/30694) feat: allow exporting all tabs to a single PDF in report (@US579)
|
||||||
|
- [#30674](https://github.com/apache/superset/pull/30674) feat(oauth): adding necessary changes to support bigquery oauth (@fisjac)
|
||||||
|
- [#30721](https://github.com/apache/superset/pull/30721) feat(dataset API): Add parameter to optionally render Jinja macros in API response (@Vitor-Avila)
|
||||||
|
- [#30412](https://github.com/apache/superset/pull/30412) feat: cancel impala query on stop (@wugeer)
|
||||||
|
- [#30710](https://github.com/apache/superset/pull/30710) feat(helm-chart): Add extraLabels to all resources (@maxforasteiro)
|
||||||
|
- [#29927](https://github.com/apache/superset/pull/29927) feat(db_engine_specs): added support for Denodo Virtual DataPort (@denodo-research-labs)
|
||||||
|
- [#30593](https://github.com/apache/superset/pull/30593) feat(number-format): Add duration formatter with colon notation (@gerbermichi)
|
||||||
|
- [#30559](https://github.com/apache/superset/pull/30559) feat(formatting): Add memory units adaptive formatter to format bytes (@mkopec87)
|
||||||
|
- [#30501](https://github.com/apache/superset/pull/30501) feat(SQL Lab): better SQL parsing error messages (@betodealmeida)
|
||||||
|
- [#30390](https://github.com/apache/superset/pull/30390) feat(be/cfg): replace deprecated imp.load_source with importlib.util (@hainenber)
|
||||||
|
- [#29395](https://github.com/apache/superset/pull/29395) feat(dashboard): update tab drag and drop reordering with positional placement and indicators for UI (@rtexelm)
|
||||||
|
- [#30380](https://github.com/apache/superset/pull/30380) feat(auth): when user is not logged in, failure to access a dashboard should redirect to login screen (@sfirke)
|
||||||
|
- [#30364](https://github.com/apache/superset/pull/30364) feat(datasets): Allow swap dataset after deletion (@Antonio-RiveroMartnez)
|
||||||
|
- [#30336](https://github.com/apache/superset/pull/30336) feat(Digest): Add RLS at digest generation for Charts and Dashboards (@geido)
|
||||||
|
- [#30266](https://github.com/apache/superset/pull/30266) feat: allow configuring an engine context manager (@betodealmeida)
|
||||||
|
- [#30323](https://github.com/apache/superset/pull/30323) feat(jinja): add option to format time filters using strftime (@villebro)
|
||||||
|
- [#29897](https://github.com/apache/superset/pull/29897) feat(explore): Add time shift color control to ECharts (@rtexelm)
|
||||||
|
- [#30016](https://github.com/apache/superset/pull/30016) feat: Displaying details to Dataset/Database deletion modals (@rusackas)
|
||||||
|
- [#30142](https://github.com/apache/superset/pull/30142) feat(jinja): add advanced temporal filter functionality (@villebro)
|
||||||
|
- [#28110](https://github.com/apache/superset/pull/28110) feat(db_engine): Implement user impersonation support for StarRocks (@Woellchen)
|
||||||
|
- [#30126](https://github.com/apache/superset/pull/30126) feat: OAuth2 database field (@betodealmeida)
|
||||||
|
- [#30082](https://github.com/apache/superset/pull/30082) feat: Oauth2 in DatabaseSelector (@betodealmeida)
|
||||||
|
- [#30071](https://github.com/apache/superset/pull/30071) feat: allow create/update OAuth2 DB (@betodealmeida)
|
||||||
|
- [#29912](https://github.com/apache/superset/pull/29912) feat(GAQ): Add Redis Sentinel Support for Global Async Queries (@nsivarajan)
|
||||||
|
- [#24308](https://github.com/apache/superset/pull/24308) feat(docker): add GUNICORN_LOGLEVEL env var (@drummerwolli)
|
||||||
|
- [#29333](https://github.com/apache/superset/pull/29333) feat(alert/reports): adding logic to handle downstream reports when tab is deleted from dashboard (@fisjac)
|
||||||
|
- [#30002](https://github.com/apache/superset/pull/30002) feat(time_comparison): Support all date formats when computing custom and inherit offsets (@Antonio-RiveroMartnez)
|
||||||
|
- [#25775](https://github.com/apache/superset/pull/25775) feat: Adding Elestio as deployment option (@kaiwalyakoparkar)
|
||||||
|
- [#29941](https://github.com/apache/superset/pull/29941) feat(docs): fix bug google chrome < 114 not found (@hoalongnatsu)
|
||||||
|
- [#29917](https://github.com/apache/superset/pull/29917) feat: Enable injecting custom html into head (@kgabryje)
|
||||||
|
- [#29875](https://github.com/apache/superset/pull/29875) feat(build): webpack visualizer (@rusackas)
|
||||||
|
- [#29724](https://github.com/apache/superset/pull/29724) feat: get html (links/styling/img/...) to work in pivot table (@mistercrunch)
|
||||||
|
- [#29795](https://github.com/apache/superset/pull/29795) feat: adding AntdThemeProvider to storybook config (@rusackas)
|
||||||
|
- [#29096](https://github.com/apache/superset/pull/29096) feat(alerts): enable tab selection for dashboard alerts/reports (@fisjac)
|
||||||
|
- [#29553](https://github.com/apache/superset/pull/29553) feat(explorer): Add configs and formatting to discrete comparison columns (@rtexelm)
|
||||||
|
- [#29627](https://github.com/apache/superset/pull/29627) feat(country map): Adding Hungary (and other touchups) (@rusackas)
|
||||||
|
|
||||||
|
**Fixes**
|
||||||
|
|
||||||
|
- [#33817](https://github.com/apache/superset/pull/33817) fix: SQL Lab warning message sizes (@michael-s-molina)
|
||||||
|
- [#33779](https://github.com/apache/superset/pull/33779) fix(Echarts): Echarts Legend Scroll fix (@amaannawab923)
|
||||||
|
- [#33765](https://github.com/apache/superset/pull/33765) fix(tooltip): Sanitize tooltip html (@msyavuz)
|
||||||
|
- [#33759](https://github.com/apache/superset/pull/33759) fix: apply d3 format to BigNumber(s) (@betodealmeida)
|
||||||
|
- [#33752](https://github.com/apache/superset/pull/33752) fix(create chart page): add missing space between words (@Quatters)
|
||||||
|
- [#33748](https://github.com/apache/superset/pull/33748) fix: sync dot color between dashboard chart and edit chart (@anantaoutlook)
|
||||||
|
- [#33743](https://github.com/apache/superset/pull/33743) fix(dataset): Fix plural toast messages (@rad-pat)
|
||||||
|
- [#33717](https://github.com/apache/superset/pull/33717) fix(explore): add gap to the "Cached" button (@Quatters)
|
||||||
|
- [#33719](https://github.com/apache/superset/pull/33719) fix(Alerts & reports): invalid "Last updated" time formatting (@Quatters)
|
||||||
|
- [#33726](https://github.com/apache/superset/pull/33726) fix(dashboard): show dashboard thumbnail images when retrieved (@rad-pat)
|
||||||
|
- [#33296](https://github.com/apache/superset/pull/33296) fix(template_processing): get_filters now works for IS_NULL and IS_NOT_NULL operators (@Prokos)
|
||||||
|
- [#32414](https://github.com/apache/superset/pull/32414) fix(api): Added uuid to list api calls (@withnale)
|
||||||
|
- [#33710](https://github.com/apache/superset/pull/33710) fix: Migrate charts with empty query_context (@luizotavio32)
|
||||||
|
- [#33592](https://github.com/apache/superset/pull/33592) fix: Makes time compare migration more resilient (@michael-s-molina)
|
||||||
|
- [#33596](https://github.com/apache/superset/pull/33596) fix: Missing processor context when rendering Jinja (@michael-s-molina)
|
||||||
|
- [#33285](https://github.com/apache/superset/pull/33285) fix: Adjust viz migrations to also migrate the queries object (@luizotavio32)
|
||||||
|
- [#33431](https://github.com/apache/superset/pull/33431) fix(sankey): incorrect nodeValues (@richardfogaca)
|
||||||
|
- [#33553](https://github.com/apache/superset/pull/33553) fix(AllEntities): Display action buttons according to the user permissions (@Vitor-Avila)
|
||||||
|
- [#30577](https://github.com/apache/superset/pull/30577) fix(user settings): Update forked cosmo theme to resolve down chevron in caret style (#30514) (@mklumpen)
|
||||||
|
- [#33540](https://github.com/apache/superset/pull/33540) fix(table): table sort by fix (@amaannawab923)
|
||||||
|
- [#33522](https://github.com/apache/superset/pull/33522) fix(Sqllab): Autocomplete got stuck in UI when open it too fast (@rebenitez1802)
|
||||||
|
- [#33444](https://github.com/apache/superset/pull/33444) fix: allow metadata to parse json (@eschutho)
|
||||||
|
- [#33425](https://github.com/apache/superset/pull/33425) fix(table-chart): time shift is not working (@justinpark)
|
||||||
|
- [#33364](https://github.com/apache/superset/pull/33364) fix(deckgl): fix deckgl multiple layers chart filter and viewport (@syedbarimanjan)
|
||||||
|
- [#33422](https://github.com/apache/superset/pull/33422) fix(Row): don't unload charts while embedded to reduce rerenders (@msyavuz)
|
||||||
|
- [#33354](https://github.com/apache/superset/pull/33354) fix: loading examples from raw.githubusercontent.com fails with 429 errors (@mistercrunch)
|
||||||
|
- [#31917](https://github.com/apache/superset/pull/31917) fix(be/utils): sync cache timeout for memoized function (@hainenber)
|
||||||
|
- [#33345](https://github.com/apache/superset/pull/33345) fix(i18n): zh_TW pybabel compile error: placeholders are incompatible (@bestlong)
|
||||||
|
- [#33337](https://github.com/apache/superset/pull/33337) fix: Edge case with metric not getting quoted in sort by when normalize_columns is enabled (@Vitor-Avila)
|
||||||
|
- [#33224](https://github.com/apache/superset/pull/33224) fix: Temporal filter conversion in viz migrations (@michael-s-molina)
|
||||||
|
- [#33306](https://github.com/apache/superset/pull/33306) fix: improve function detection (@betodealmeida)
|
||||||
|
- [#33269](https://github.com/apache/superset/pull/33269) fix(echarts): rename time series shifted colnames (@justinpark)
|
||||||
|
- [#33267](https://github.com/apache/superset/pull/33267) fix: mask password on DB import (@betodealmeida)
|
||||||
|
- [#33025](https://github.com/apache/superset/pull/33025) fix: LocalProxy is not mapped warning (@dpgaspar)
|
||||||
|
- [#33248](https://github.com/apache/superset/pull/33248) fix(histogram): remove extra single quotes (@rusackas)
|
||||||
|
- [#33250](https://github.com/apache/superset/pull/33250) fix(DB update): Gracefully handle querry error during DB update (@Vitor-Avila)
|
||||||
|
- [#33238](https://github.com/apache/superset/pull/33238) fix(heatmap): correctly render int and boolean falsy values on axes (@sfirke)
|
||||||
|
- [#33237](https://github.com/apache/superset/pull/33237) fix(sqllab permalink): Commit SQL Lab permalinks (@Vitor-Avila)
|
||||||
|
- [#33234](https://github.com/apache/superset/pull/33234) fix(standalone): Ensure correct URL param value for standalone mode (@Vitor-Avila)
|
||||||
|
- [#33291](https://github.com/apache/superset/pull/33291) fix(antd): Invalid dashed border in tertiary button (@justinpark)
|
||||||
|
- [#33214](https://github.com/apache/superset/pull/33214) fix(export): Full CSV/Excel exports respecting SQL_MAX_ROW config (@Vitor-Avila)
|
||||||
|
- [#33164](https://github.com/apache/superset/pull/33164) fix(sqllab): Invalid SQL Error breaks SQL Lab (@justinpark)
|
||||||
|
- [#33154](https://github.com/apache/superset/pull/33154) fix(deckgl): Update Arc to properly adjust line width (@rusackas)
|
||||||
|
- [#33161](https://github.com/apache/superset/pull/33161) fix: os.makedirs race condition (@jamra)
|
||||||
|
- [#33143](https://github.com/apache/superset/pull/33143) fix(echart): Thrown errors shown after resized (@justinpark)
|
||||||
|
- [#33138](https://github.com/apache/superset/pull/33138) fix(echart): Tooltip date format doesn't follow time grain (@justinpark)
|
||||||
|
- [#31692](https://github.com/apache/superset/pull/31692) fix(lang): patch FAB's LocaleView to redirect to previous page (@pomegranited)
|
||||||
|
- [#33106](https://github.com/apache/superset/pull/33106) fix(dashboard): invalid active tab state (@justinpark)
|
||||||
|
- [#33037](https://github.com/apache/superset/pull/33037) fix: Viz migration error handling (@michael-s-molina)
|
||||||
|
- [#33107](https://github.com/apache/superset/pull/33107) fix(playwright): allow screenshotting empty dashboards (@hxtmdev)
|
||||||
|
- [#33110](https://github.com/apache/superset/pull/33110) fix: resolve recent merge collisio (@mistercrunch)
|
||||||
|
- [#33103](https://github.com/apache/superset/pull/33103) fix: Allows configuration of Selenium Webdriver binary (@michael-s-molina)
|
||||||
|
- [#33109](https://github.com/apache/superset/pull/33109) fix(thumbnails): ensure consistent cache_key (@hxtmdev)
|
||||||
|
- [#32193](https://github.com/apache/superset/pull/32193) fix(dashboard): Generate screenshot via celery (@tahvane1)
|
||||||
|
- [#33087](https://github.com/apache/superset/pull/33087) fix(docker): fallback to pip if uv is not available (@hossein-khalilian)
|
||||||
|
- [#33059](https://github.com/apache/superset/pull/33059) fix: Adds missing **init** file to commands/logs (@michael-s-molina)
|
||||||
|
- [#33048](https://github.com/apache/superset/pull/33048) fix: improve error type on parse error (@justinpark)
|
||||||
|
- [#31720](https://github.com/apache/superset/pull/31720) fix(export): charts csv export in dashboards (@EmmanuelCbd)
|
||||||
|
- [#33024](https://github.com/apache/superset/pull/33024) fix(log): Missing failed query log on async queries (@justinpark)
|
||||||
|
- [#32839](https://github.com/apache/superset/pull/32839) fix: fix bug where dashboard did not enter fullscreen mode. (@LevisNgigi)
|
||||||
|
- [#28428](https://github.com/apache/superset/pull/28428) fix(dashboard): chart fullscreen issue when filter pane is collapsed (@hlvhe)
|
||||||
|
- [#29422](https://github.com/apache/superset/pull/29422) fix: `show_filters` URL parameter is not working (@hexcafe)
|
||||||
|
- [#32965](https://github.com/apache/superset/pull/32965) fix: Bar Chart (legacy) migration to keep labels layout (@michael-s-molina)
|
||||||
|
- [#30679](https://github.com/apache/superset/pull/30679) fix: fixed Add Metrics to Tree Chart (#29158) (@SBIN2010)
|
||||||
|
- [#32968](https://github.com/apache/superset/pull/32968) fix(pivot-table): Revert "fix(Pivot Table): Fix column width to respect currency config (#31414)" (@justinpark)
|
||||||
|
- [#32384](https://github.com/apache/superset/pull/32384) fix: Clicking in the body of a Markdown component does not put it into edit mode (@notHuman9504)
|
||||||
|
- [#32763](https://github.com/apache/superset/pull/32763) fix(sqllab): Invalid display of table column keys (@justinpark)
|
||||||
|
- [#32871](https://github.com/apache/superset/pull/32871) fix(Jinja): Emit time grain to table charts even if they don't have a temporal column (@Vitor-Avila)
|
||||||
|
- [#32372](https://github.com/apache/superset/pull/32372) fix(backend/async_events): allow user to configure username for Redis authentication in GLOBAL_ASYNC_QUERIES_CACHE_BACKEND (@hainenber)
|
||||||
|
- [#32873](https://github.com/apache/superset/pull/32873) fix: use role_model from security manager (@lohart13)
|
||||||
|
- [#32851](https://github.com/apache/superset/pull/32851) fix(ColorPickerControl): change color picker control width (@SBIN2010)
|
||||||
|
- [#32863](https://github.com/apache/superset/pull/32863) fix(table-chart): Do not show comparison columns config if time_compare is set to [] (@Vitor-Avila)
|
||||||
|
- [#31869](https://github.com/apache/superset/pull/31869) fix(translation): Dutch translations for Current datetime filter (@christiaan)
|
||||||
|
- [#32829](https://github.com/apache/superset/pull/32829) fix: update dataset/query catalog on DB changes (@betodealmeida)
|
||||||
|
- [#32850](https://github.com/apache/superset/pull/32850) fix(echarts): Sort series by name using natural comparison (@Vitor-Avila)
|
||||||
|
- [#32795](https://github.com/apache/superset/pull/32795) fix(log): store navigation path to get correct logging path (@justinpark)
|
||||||
|
- [#32665](https://github.com/apache/superset/pull/32665) fix: Time Comparison Feature Reverts Metric Labels to Metric Keys in Table Charts (@fardin-developer)
|
||||||
|
- [#32792](https://github.com/apache/superset/pull/32792) fix: key error in frontend on disallowed GSheets (@chrisvnimbus)
|
||||||
|
- [#32797](https://github.com/apache/superset/pull/32797) fix: CSV/Excel upload form change column dates description (@SBIN2010)
|
||||||
|
- [#32802](https://github.com/apache/superset/pull/32802) fix(sec): resolve CVE-2025-29907 and CVE-2025-25977 by pinning `jspdf` to v3 (@hainenber)
|
||||||
|
- [#32406](https://github.com/apache/superset/pull/32406) fix(model/helper): represent RLS filter clause in proper textual SQL string (@hainenber)
|
||||||
|
- [#32739](https://github.com/apache/superset/pull/32739) fix(excel export): big number truncation handling (@CharlesNkdl)
|
||||||
|
- [#32778](https://github.com/apache/superset/pull/32778) fix(config): correct slack image url in talisman (@v9dev)
|
||||||
|
- [#28350](https://github.com/apache/superset/pull/28350) fix(css): typos in styles (@Kukusik8)
|
||||||
|
- [#32775](https://github.com/apache/superset/pull/32775) fix(import): Missing catalog field in saved query schema (@Quatters)
|
||||||
|
- [#32774](https://github.com/apache/superset/pull/32774) fix(sqllab): Pass query_id as kwarg so backoff can see it (@Antonio-RiveroMartnez)
|
||||||
|
- [#32720](https://github.com/apache/superset/pull/32720) fix(chart control): Change default of "Y Axis Title Margin" (@Quatters)
|
||||||
|
- [#32761](https://github.com/apache/superset/pull/32761) fix: do not add calculated columns when syncing (@eschutho)
|
||||||
|
- [#31751](https://github.com/apache/superset/pull/31751) fix: Changing language doesn't affect echarts charts (@jpchev)
|
||||||
|
- [#28203](https://github.com/apache/superset/pull/28203) fix(contextmenu): uncaught TypeError (@sowo)
|
||||||
|
- [#32679](https://github.com/apache/superset/pull/32679) fix: ensure datasource permission in explore (@hxtmdev)
|
||||||
|
- [#32410](https://github.com/apache/superset/pull/32410) fix(import): Ensure import exceptions are logged (@withnale)
|
||||||
|
- [#32683](https://github.com/apache/superset/pull/32683) fix: coerce datetime conversion errors (@betodealmeida)
|
||||||
|
- [#32708](https://github.com/apache/superset/pull/32708) fix(logging): missing path in event data (@justinpark)
|
||||||
|
- [#32701](https://github.com/apache/superset/pull/32701) fix: boolean filters in Explore (@betodealmeida)
|
||||||
|
- [#32696](https://github.com/apache/superset/pull/32696) fix(spreadsheet uploads): make file extension comparisons case-insensitive (@sfirke)
|
||||||
|
- [#32691](https://github.com/apache/superset/pull/32691) fix(cosmetics): allow toast message to be toggled off when modal is opened (@hainenber)
|
||||||
|
- [#32699](https://github.com/apache/superset/pull/32699) fix: Signature of Celery pruner jobs (@michael-s-molina)
|
||||||
|
- [#32681](https://github.com/apache/superset/pull/32681) fix(log): Update recent_activity by event name (@justinpark)
|
||||||
|
- [#32678](https://github.com/apache/superset/pull/32678) fix: Update RELEASING/README.md (@michael-s-molina)
|
||||||
|
- [#32661](https://github.com/apache/superset/pull/32661) fix(gsheets): update params from encrypted extra (@betodealmeida)
|
||||||
|
- [#32657](https://github.com/apache/superset/pull/32657) fix(import): Import a DB connection with expanded rows enabled (@Vitor-Avila)
|
||||||
|
- [#32646](https://github.com/apache/superset/pull/32646) fix(dashboard): Ensure `dashboardId` is included in `form_data` for embedded mode (@mostopalove)
|
||||||
|
- [#32652](https://github.com/apache/superset/pull/32652) fix: Upgrade node base image to Debian 12 bookworm (@dolph)
|
||||||
|
- [#32608](https://github.com/apache/superset/pull/32608) fix(welcome): perf on distinct recent activities (@justinpark)
|
||||||
|
- [#32549](https://github.com/apache/superset/pull/32549) fix(dashboard): Support bigint value in native filters (@justinpark)
|
||||||
|
- [#32599](https://github.com/apache/superset/pull/32599) fix(Slack V2): Specify the filename for the Slack upload method (@Vitor-Avila)
|
||||||
|
- [#32572](https://github.com/apache/superset/pull/32572) fix: Log table retention policy (@michael-s-molina)
|
||||||
|
- [#32532](https://github.com/apache/superset/pull/32532) fix: add DateOffset to json serializer (@eschutho)
|
||||||
|
- [#32523](https://github.com/apache/superset/pull/32523) fix: keep calculated columns when datasource is updated (@eschutho)
|
||||||
|
- [#32507](https://github.com/apache/superset/pull/32507) fix: Show response message as default error (@eschutho)
|
||||||
|
- [#32336](https://github.com/apache/superset/pull/32336) fix(Slack): Fix Slack recipients migration to V2 (@Vitor-Avila)
|
||||||
|
- [#32511](https://github.com/apache/superset/pull/32511) fix(beat): prune_query celery task args fix (@Usiel)
|
||||||
|
- [#32499](https://github.com/apache/superset/pull/32499) fix(explore): Glitch in a tooltip with metric's name (@kgabryje)
|
||||||
|
- [#32486](https://github.com/apache/superset/pull/32486) fix: skip DB filter when doing OAuth2 (@betodealmeida)
|
||||||
|
- [#32488](https://github.com/apache/superset/pull/32488) fix(tooltip): displaying <a> tags correctly (@rusackas)
|
||||||
|
- [#32473](https://github.com/apache/superset/pull/32473) fix(plugin-chart-echarts): remove erroneous upper bound value (@villebro)
|
||||||
|
- [#32420](https://github.com/apache/superset/pull/32420) fix(com/grid-comp/markdown): pin `remark-gfm` to v3 to allow inline code block by backticks in Markdown (@hainenber)
|
||||||
|
- [#32423](https://github.com/apache/superset/pull/32423) fix(clickhouse): get_parameters_from_uri failing when secure is true (@codenamelxl)
|
||||||
|
- [#32290](https://github.com/apache/superset/pull/32290) fix(viz): update nesting logic to handle multiple dimensions in PartitionViz (@DamianPendrak)
|
||||||
|
- [#32382](https://github.com/apache/superset/pull/32382) fix(pinot): revert join and subquery flags (@yuribogomolov)
|
||||||
|
- [#32325](https://github.com/apache/superset/pull/32325) fix: bump FAB to 4.5.4 (@dpgaspar)
|
||||||
|
- [#32344](https://github.com/apache/superset/pull/32344) fix: ensure metric_macro expands templates (@betodealmeida)
|
||||||
|
- [#32348](https://github.com/apache/superset/pull/32348) fix: clickhouse-connect engine SSH parameter (@maybedino)
|
||||||
|
- [#32362](https://github.com/apache/superset/pull/32362) fix(docker): Configure nginx for consistent port mapping and hot reloading (@vedantprajapati)
|
||||||
|
- [#32350](https://github.com/apache/superset/pull/32350) fix(firebolt): allow backslach escape for single quotes (@betodealmeida)
|
||||||
|
- [#32356](https://github.com/apache/superset/pull/32356) fix(SSHTunnelForm): make the password tooltip visible (@EnxDev)
|
||||||
|
- [#32284](https://github.com/apache/superset/pull/32284) fix(roles): Add SqlLabPermalinkRestApi as default sqlab roles. (@LevisNgigi)
|
||||||
|
- [#32035](https://github.com/apache/superset/pull/32035) fix(fe/dashboard-list): display modifier info for `Last modified` data (@hainenber)
|
||||||
|
- [#32337](https://github.com/apache/superset/pull/32337) fix: revert "fix: remove sort values on stacked totals (#31333)" (@eschutho)
|
||||||
|
- [#31993](https://github.com/apache/superset/pull/31993) fix: oauth2 trino (@aurokk)
|
||||||
|
- [#32332](https://github.com/apache/superset/pull/32332) fix: Download as PDF fails due to cache error (@kgabryje)
|
||||||
|
- [#30888](https://github.com/apache/superset/pull/30888) fix: keep the tab order (@US579)
|
||||||
|
- [#32272](https://github.com/apache/superset/pull/32272) fix(viz/table): selected column not shown in Conditional Formatting popover (@hainenber)
|
||||||
|
- [#32253](https://github.com/apache/superset/pull/32253) fix: Decimal values for Histogram bins (@michael-s-molina)
|
||||||
|
- [#32218](https://github.com/apache/superset/pull/32218) fix(Datasource): handle undefined datasource_type in fetchSyncedColumns (@tahvane1)
|
||||||
|
- [#32240](https://github.com/apache/superset/pull/32240) fix: upgrade to 3.11.11-slim-bookworm to address critical vulnerabilities (@gpchandran)
|
||||||
|
- [#31333](https://github.com/apache/superset/pull/31333) fix: remove sort values on stacked totals (@eschutho)
|
||||||
|
- [#32227](https://github.com/apache/superset/pull/32227) fix: Update 'Last modified' time when modifying RLS rules (@fardin-developer)
|
||||||
|
- [#32115](https://github.com/apache/superset/pull/32115) fix(Scope): Correct issue where filters appear out of scope when sort is unchecked. (@LevisNgigi)
|
||||||
|
- [#32224](https://github.com/apache/superset/pull/32224) fix(sqllab): close the table tab (@justinpark)
|
||||||
|
- [#32212](https://github.com/apache/superset/pull/32212) fix: set `Rich tooltip` -> 'Show percentage' to false by default (@mistercrunch)
|
||||||
|
- [#32222](https://github.com/apache/superset/pull/32222) fix(SaveDatasetModal): repairs field alignment in the SaveDatasetModal component (@EnxDev)
|
||||||
|
- [#32211](https://github.com/apache/superset/pull/32211) fix: hydrate datasetsStatus (@betodealmeida)
|
||||||
|
- [#32195](https://github.com/apache/superset/pull/32195) fix: handlebars html and css templates reset on dataset update (@DamianPendrak)
|
||||||
|
- [#32176](https://github.com/apache/superset/pull/32176) fix: TDengine move tdengine.png to databases/ subfolder (@DuanKuanJun)
|
||||||
|
- [#32185](https://github.com/apache/superset/pull/32185) fix: Adds an entry to UPDATING.md about DISABLE_LEGACY_DATASOURCE_EDITOR (@michael-s-molina)
|
||||||
|
- [#32154](https://github.com/apache/superset/pull/32154) fix(sqllab): correct URL format for SQL Lab permalinks (@LevisNgigi)
|
||||||
|
- [#30903](https://github.com/apache/superset/pull/30903) fix(virtual dataset sync): Sync virtual dataset columns when changing the SQL query (@fisjac)
|
||||||
|
- [#32163](https://github.com/apache/superset/pull/32163) fix(docker): Docker python-translation-build (@EmmanuelCbd)
|
||||||
|
- [#32156](https://github.com/apache/superset/pull/32156) fix: ScreenshotCachePayload serialization (@betodealmeida)
|
||||||
|
- [#32151](https://github.com/apache/superset/pull/32151) fix(releasing): fix borked SVN-based image building process (@hainenber)
|
||||||
|
- [#32137](https://github.com/apache/superset/pull/32137) fix: copy oauth2 capture to `get_sqla_engine` (@betodealmeida)
|
||||||
|
- [#32135](https://github.com/apache/superset/pull/32135) fix: Local tarball Docker container is missing zstd dependency (@michael-s-molina)
|
||||||
|
- [#32133](https://github.com/apache/superset/pull/32133) fix: No virtual environment when running Docker translation compiler (@michael-s-molina)
|
||||||
|
- [#32040](https://github.com/apache/superset/pull/32040) fix(ci): ephemeral env, handle different label, create comment (@dpgaspar)
|
||||||
|
- [#32064](https://github.com/apache/superset/pull/32064) fix(datepicker): Full width datepicker on filter value select (@msyavuz)
|
||||||
|
- [#32122](https://github.com/apache/superset/pull/32122) fix: Histogram examples config (@michael-s-molina)
|
||||||
|
- [#32053](https://github.com/apache/superset/pull/32053) fix: enforce `ALERT_REPORTS_MAX_CUSTOM_SCREENSHOT_WIDTH` (@betodealmeida)
|
||||||
|
- [#31757](https://github.com/apache/superset/pull/31757) fix(thumbnail cache): Enabling force parameter on screenshot/thumbnail cache (@fisjac)
|
||||||
|
- [#32061](https://github.com/apache/superset/pull/32061) fix(DatePicker): Increase z-index over Modal (@geido)
|
||||||
|
- [#32031](https://github.com/apache/superset/pull/32031) fix(fe/explore): prevent runtime error when editing Dataset-origin Chart with empty title (@hainenber)
|
||||||
|
- [#32045](https://github.com/apache/superset/pull/32045) fix: Revert "fix: re-enable cypress checks" (@mistercrunch)
|
||||||
|
- [#32008](https://github.com/apache/superset/pull/32008) fix: re-enable cypress checks (@mistercrunch)
|
||||||
|
- [#32017](https://github.com/apache/superset/pull/32017) fix: eph env + improve docker images to run in userspace (@mistercrunch)
|
||||||
|
- [#31340](https://github.com/apache/superset/pull/31340) fix(ci): change ephemeral env to use github labels instead of comments (@dpgaspar)
|
||||||
|
- [#32025](https://github.com/apache/superset/pull/32025) fix: Filters badge disappeared (@kgabryje)
|
||||||
|
- [#32015](https://github.com/apache/superset/pull/32015) fix(issue #31927): TimeGrain.WEEK_STARTING_MONDAY (@AdrianMastronardi)
|
||||||
|
- [#30716](https://github.com/apache/superset/pull/30716) fix: Reordering echart props to fix confidence interval in Mixed Charts (@geotab-data-platform)
|
||||||
|
- [#32005](https://github.com/apache/superset/pull/32005) fix(sqllab): tab layout truncated (@justinpark)
|
||||||
|
- [#29417](https://github.com/apache/superset/pull/29417) fix(verbose map): Correct raw metrics handling in verbose map (@mcdogg17)
|
||||||
|
- [#31962](https://github.com/apache/superset/pull/31962) fix: proper URL building (@betodealmeida)
|
||||||
|
- [#31941](https://github.com/apache/superset/pull/31941) fix(timezoneselector): Correct the order to match names first (@msyavuz)
|
||||||
|
- [#25166](https://github.com/apache/superset/pull/25166) fix: correct value for config variable `UPLOAD_FOLDER` (@sebastianliebscher)
|
||||||
|
- [#31948](https://github.com/apache/superset/pull/31948) fix: Load cached DB metadata as DatasourceName and add catalog to schema_list cache key (@Vitor-Avila)
|
||||||
|
- [#31809](https://github.com/apache/superset/pull/31809) fix: Prevent undo functionality from referencing incorrect dashboard edits (@fardin-developer)
|
||||||
|
- [#30949](https://github.com/apache/superset/pull/30949) fix: adjust line type as well as weight for time series (@eschutho)
|
||||||
|
- [#31933](https://github.com/apache/superset/pull/31933) fix(E2E): Fix flaky Dashboard list delete test (@geido)
|
||||||
|
- [#31867](https://github.com/apache/superset/pull/31867) fix(date_parser): fixed bug for advanced time range filter (@alexandrusoare)
|
||||||
|
- [#31873](https://github.com/apache/superset/pull/31873) fix(documentation): updated link to CORS_OPTIONS in Networking Settings (@ankur-zignite91)
|
||||||
|
- [#31910](https://github.com/apache/superset/pull/31910) fix: add catalog to cache key when getting tables/views (@betodealmeida)
|
||||||
|
- [#31837](https://github.com/apache/superset/pull/31837) fix(bigquery): return no catalogs when creds not set (@betodealmeida)
|
||||||
|
- [#31848](https://github.com/apache/superset/pull/31848) fix: d3.count doesn't exist (@mistercrunch)
|
||||||
|
- [#31830](https://github.com/apache/superset/pull/31830) fix: fix/suppress webpack console warnings (@mistercrunch)
|
||||||
|
- [#31834](https://github.com/apache/superset/pull/31834) fix(OAuth): Remove masked_encrypted_extra from DB update properties (@Vitor-Avila)
|
||||||
|
- [#31798](https://github.com/apache/superset/pull/31798) fix(Embedded): Skip CSRF validation for dashboard download endpoints (@Vitor-Avila)
|
||||||
|
- [#31815](https://github.com/apache/superset/pull/31815) fix(modal): fixed z-index issue (@alexandrusoare)
|
||||||
|
- [#31774](https://github.com/apache/superset/pull/31774) fix: corrects spelling of USE_ANALAGOUS_COLORS to be USE_ANALOGOUS_COLORS (@rusackas)
|
||||||
|
- [#31777](https://github.com/apache/superset/pull/31777) fix(oauth): Handle updates to the OAuth config (@Vitor-Avila)
|
||||||
|
- [#31789](https://github.com/apache/superset/pull/31789) fix(button): change back button styles for dropdown buttons (@msyavuz)
|
||||||
|
- [#31752](https://github.com/apache/superset/pull/31752) fix: Heatmap sorting (@michael-s-molina)
|
||||||
|
- [#31742](https://github.com/apache/superset/pull/31742) fix: GHA frontend builds fail when frontends hasn't changed (@mistercrunch)
|
||||||
|
- [#31732](https://github.com/apache/superset/pull/31732) fix: docker builds in forks (@mistercrunch)
|
||||||
|
- [#31606](https://github.com/apache/superset/pull/31606) fix: docker-compose-image-tag fails to start (@mistercrunch)
|
||||||
|
- [#31710](https://github.com/apache/superset/pull/31710) fix(inthewild): Update companies using superset (@gwthm-in)
|
||||||
|
- [#31673](https://github.com/apache/superset/pull/31673) fix: typo in plugin-chart-echats controls (@vhf)
|
||||||
|
- [#31688](https://github.com/apache/superset/pull/31688) fix(helm): change values.yaml comments (@sule26)
|
||||||
|
- [#31588](https://github.com/apache/superset/pull/31588) fix: install uv in docker-bootstrap (@mistercrunch)
|
||||||
|
- [#31583](https://github.com/apache/superset/pull/31583) fix(docs): get quickstart guide working again (@sfirke)
|
||||||
|
- [#31561](https://github.com/apache/superset/pull/31561) fix: add various recent issues on master CI (@mistercrunch)
|
||||||
|
- [#31493](https://github.com/apache/superset/pull/31493) fix: master docker builds fail because of multi-platform builds can't --load (@mistercrunch)
|
||||||
|
- [#31483](https://github.com/apache/superset/pull/31483) fix: Card component background color (@kgabryje)
|
||||||
|
- [#31472](https://github.com/apache/superset/pull/31472) fix: Tooltip covers the date selector in native filters (@kgabryje)
|
||||||
|
- [#31473](https://github.com/apache/superset/pull/31473) fix(explore): Styling issue in Search Metrics input field (@kgabryje)
|
||||||
|
- [#31449](https://github.com/apache/superset/pull/31449) fix(filter options): full size list item targets (@rusackas)
|
||||||
|
- [#31458](https://github.com/apache/superset/pull/31458) fix(api): typo api.py (@zero-stroke)
|
||||||
|
- [#31385](https://github.com/apache/superset/pull/31385) fix: docker refactor (@mistercrunch)
|
||||||
|
- [#31374](https://github.com/apache/superset/pull/31374) fix(Dashboard): Sync color configuration via dedicated endpoint (@geido)
|
||||||
|
- [#31411](https://github.com/apache/superset/pull/31411) fix: pkg_resources is getting deprecated (@mistercrunch)
|
||||||
|
- [#31391](https://github.com/apache/superset/pull/31391) fix: don't include chromium on ephemeral envs (@mistercrunch)
|
||||||
|
- [#31387](https://github.com/apache/superset/pull/31387) fix: Revert "chore(deps-dev): bump esbuild from 0.20.0 to 0.24.0 in /super… (@sadpandajoe)
|
||||||
|
- [#31236](https://github.com/apache/superset/pull/31236) fix: ephemeral envs fail on noop (@dpgaspar)
|
||||||
|
- [#31350](https://github.com/apache/superset/pull/31350) fix(alerts&reports): tabs with userfriendly urls (@tahvane1)
|
||||||
|
- [#30956](https://github.com/apache/superset/pull/30956) fix: added missing pod labels for init job (@glothriel)
|
||||||
|
- [#31279](https://github.com/apache/superset/pull/31279) fix(filters): improving the add filter/divider UI. (@rusackas)
|
||||||
|
- [#31155](https://github.com/apache/superset/pull/31155) fix: helm chart deploy to open PRs to now-protected gh-pages branch (@mistercrunch)
|
||||||
|
- [#31152](https://github.com/apache/superset/pull/31152) fix: try to re-enable gh-pages (@mistercrunch)
|
||||||
|
- [#31148](https://github.com/apache/superset/pull/31148) fix: touch helm/ folder to trigger doc deploy in CI (@mistercrunch)
|
||||||
|
- [#31035](https://github.com/apache/superset/pull/31035) fix: ephemeral environments missing env var (@mistercrunch)
|
||||||
|
- [#30966](https://github.com/apache/superset/pull/30966) fix(helm-chart): Fix broken PodDisruptionBudget due to introduction of extraLabels. (@theoriginalgri)
|
||||||
|
- [#30964](https://github.com/apache/superset/pull/30964) fix(Card): Use correct class names for Ant Design 5 Card component (@geido)
|
||||||
|
- [#30924](https://github.com/apache/superset/pull/30924) fix(helm): use submodule on helm release action (@villebro)
|
||||||
|
- [#30767](https://github.com/apache/superset/pull/30767) fix(empty dashboards): Allow downloading a screenshot of an empty dashboard (@msyavuz)
|
||||||
|
- [#30885](https://github.com/apache/superset/pull/30885) fix(docs): add missing bracket in openID config (@samarsrivastav)
|
||||||
|
- [#30858](https://github.com/apache/superset/pull/30858) fix(chart data): removing query from /chart/data payload when accessing as guest user (@fisjac)
|
||||||
|
- [#30848](https://github.com/apache/superset/pull/30848) fix(time_comparison): Allow deleting dates when using custom shift (@Antonio-RiveroMartnez)
|
||||||
|
- [#28524](https://github.com/apache/superset/pull/28524) fix: warning emits an error (@eschutho)
|
||||||
|
- [#30682](https://github.com/apache/superset/pull/30682) fix(explore): Update tooltip copy for rendering html in tables and pivot tables (@yousoph)
|
||||||
|
- [#30618](https://github.com/apache/superset/pull/30618) fix(mssql db_engine_spec): adds uniqueidentifier to column_type_mappings (@rparsonsbb)
|
||||||
|
- [#27142](https://github.com/apache/superset/pull/27142) fix(chart): apply number format in Box Plot tooltip only where necessary (@goto-loop)
|
||||||
|
- [#30608](https://github.com/apache/superset/pull/30608) fix(country-map): Rename incorrect Vietnam province name for Country Map (@tienhung2812)
|
||||||
|
- [#30702](https://github.com/apache/superset/pull/30702) fix(Dashboard): DatePicker to not autoclose modal (@geido)
|
||||||
|
- [#30688](https://github.com/apache/superset/pull/30688) fix: bump FAB to 4.5.2 (@dpgaspar)
|
||||||
|
- [#30659](https://github.com/apache/superset/pull/30659) fix: Link Checking (@CodeWithEmad)
|
||||||
|
- [#30661](https://github.com/apache/superset/pull/30661) fix: Domain 'undefined' error in Storybook (@kgabryje)
|
||||||
|
- [#30626](https://github.com/apache/superset/pull/30626) fix: Module is not defined in Partition chart (@michael-s-molina)
|
||||||
|
- [#30616](https://github.com/apache/superset/pull/30616) fix(docs): leading whitespace line is causing page title and header to be malformed (@sfirke)
|
||||||
|
- [#30606](https://github.com/apache/superset/pull/30606) fix: Set correct amount of steps to avoid confusing logs while loading examples (@deathstrokedarksky)
|
||||||
|
- [#30522](https://github.com/apache/superset/pull/30522) fix(SQL Lab): hang when result set size is too big (@anamitraadhikari)
|
||||||
|
- [#30443](https://github.com/apache/superset/pull/30443) fix(Jinja metric macro): Support Drill By and Excel/CSV download without a dataset ID (@Vitor-Avila)
|
||||||
|
- [#30569](https://github.com/apache/superset/pull/30569) fix(dev-server): Revert "chore(fe): bump webpack-related packages to v5" (@geido)
|
||||||
|
- [#30069](https://github.com/apache/superset/pull/30069) fix(frontend/generator): fix failed Viz plugin build due to missing JSDOM config and dep (@hainenber)
|
||||||
|
- [#30277](https://github.com/apache/superset/pull/30277) fix(examples): fix examples uri for sqlite (@villebro)
|
||||||
|
- [#30509](https://github.com/apache/superset/pull/30509) fix(plugin/echarts): correct enum values for LABEL_POSITION map (@hainenber)
|
||||||
|
- [#30500](https://github.com/apache/superset/pull/30500) fix(sqllab): Remove redundant scrolling (@justinpark)
|
||||||
|
- [#30349](https://github.com/apache/superset/pull/30349) fix(radar-chart): metric options not available & add `min` option (@goncaloacteixeira)
|
||||||
|
- [#30493](https://github.com/apache/superset/pull/30493) fix(Package.json): Bump dayjs version (@geido)
|
||||||
|
- [#30406](https://github.com/apache/superset/pull/30406) fix(language): pt_BR translation (@diegolnasc)
|
||||||
|
- [#30441](https://github.com/apache/superset/pull/30441) fix: battling cypress' dashboard feature (@mistercrunch)
|
||||||
|
- [#30430](https://github.com/apache/superset/pull/30430) fix: cypress on master doesn't work because of --parallel flag (@mistercrunch)
|
||||||
|
- [#29444](https://github.com/apache/superset/pull/29444) fix(plugin/country/map): rectify naming for some Vietnamese provinces (@hainenber)
|
||||||
|
- [#30388](https://github.com/apache/superset/pull/30388) fix(ECharts): Revert ECharts version bump (@geido)
|
||||||
|
- [#30340](https://github.com/apache/superset/pull/30340) fix(CI): increase node JS heap size (@rusackas)
|
||||||
|
- [#30325](https://github.com/apache/superset/pull/30325) fix(db_engine_specs): add a few missing time grains to Postgres spec (@sfirke)
|
||||||
|
- [#30273](https://github.com/apache/superset/pull/30273) fix(dashboard): invalid button style in undo/redo button (@justinpark)
|
||||||
|
- [#30099](https://github.com/apache/superset/pull/30099) fix: Move copying translation files before npm run build in Docker (@martyngigg)
|
||||||
|
- [#30279](https://github.com/apache/superset/pull/30279) fix(install/docker): use zstd-baked image for building superset-frontend in containerized env (@hainenber)
|
||||||
|
- [#30234](https://github.com/apache/superset/pull/30234) fix(deps): release new embedded sdk (@rusackas)
|
||||||
|
- [#30237](https://github.com/apache/superset/pull/30237) fix(docs): change flask-oidc url (@drblack666)
|
||||||
|
- [#30217](https://github.com/apache/superset/pull/30217) fix(sdk): use latest @supserset-ui/switchboard version to avoid pulling empty dependency (@hainenber)
|
||||||
|
- [#30147](https://github.com/apache/superset/pull/30147) fix(docs): typo in docker-compose.mdx (@alexengrig)
|
||||||
|
- [#30148](https://github.com/apache/superset/pull/30148) fix: Adds the Deprecated label to Time-series Percent Change chart (@michael-s-molina)
|
||||||
|
- [#30141](https://github.com/apache/superset/pull/30141) fix(sqllab): race condition when updating same cursor position (@justinpark)
|
||||||
|
- [#30041](https://github.com/apache/superset/pull/30041) fix: Revert "fix(list/chart views): Chart Properties modal now has transitions" (@rusackas)
|
||||||
|
- [#30034](https://github.com/apache/superset/pull/30034) fix: Handle zstd encoding in webpack proxy config (@kgabryje)
|
||||||
|
- [#29916](https://github.com/apache/superset/pull/29916) fix: duplicate `truncateXAxis` option in `BarChart` (@dmitriyVasilievich1986)
|
||||||
|
- [#30013](https://github.com/apache/superset/pull/30013) fix(translations): Fixed APPLY translation in Spanish (@jvines)
|
||||||
|
- [#30001](https://github.com/apache/superset/pull/30001) fix: Reports are not sent when selecting to send as PNG, CSV or text (@eschutho)
|
||||||
|
- [#29686](https://github.com/apache/superset/pull/29686) fix: Removed fixed width constraint from Save button (@goldjee)
|
||||||
|
- [#29951](https://github.com/apache/superset/pull/29951) fix(i18n): translation fix in server side generated time grains (@Seboeb)
|
||||||
|
- [#29938](https://github.com/apache/superset/pull/29938) fix: thumbnail url json response was malformed (@eschutho)
|
||||||
|
- [#29944](https://github.com/apache/superset/pull/29944) fix: only show dataset name in list (@eschutho)
|
||||||
|
- [#29935](https://github.com/apache/superset/pull/29935) fix: Fix delete_fake_db (@stamplevskiyd)
|
||||||
|
- [#29522](https://github.com/apache/superset/pull/29522) fix(cli): add impersonate_user to db import (@chessman)
|
||||||
|
- [#29895](https://github.com/apache/superset/pull/29895) fix(PivotTable): Pass string only to safeHtmlSpan (@geido)
|
||||||
|
- [#29864](https://github.com/apache/superset/pull/29864) fix: mypy issue on py3.9 + prevent similar issues (@mistercrunch)
|
||||||
|
- [#29861](https://github.com/apache/superset/pull/29861) fix: mypy fails related to simplejson.dumps (@mistercrunch)
|
||||||
|
- [#24411](https://github.com/apache/superset/pull/24411) fix(docs): update timescale.png (@mathisve)
|
||||||
|
- [#29851](https://github.com/apache/superset/pull/29851) fix: Add missing icons (@kgabryje)
|
||||||
|
- [#29591](https://github.com/apache/superset/pull/29591) fix: machine auth for GAQ enabled deployments (@harshit2283)
|
||||||
|
- [#29798](https://github.com/apache/superset/pull/29798) fix: set default timezone to UTC for cron timezone conversions (@danielli-ziprecruiter)
|
||||||
|
- [#28796](https://github.com/apache/superset/pull/28796) fix(list/chart views): Chart Properties modal now has transitions (@rusackas)
|
||||||
|
- [#29688](https://github.com/apache/superset/pull/29688) fix(ci): release process for labeling PRs (@mistercrunch)
|
||||||
|
- [#29779](https://github.com/apache/superset/pull/29779) fix: remove --no-optional from docker-compose build (@mistercrunch)
|
||||||
|
|
||||||
|
**Others**
|
||||||
|
|
||||||
|
- [#33745](https://github.com/apache/superset/pull/33745) build: update Dockerfile to 3.11.13-slim-bookworm (@gpchandran)
|
||||||
|
- [#33612](https://github.com/apache/superset/pull/33612) chore: update Dockerfile - Upgrade to 3.11.12 (@gpchandran)
|
||||||
|
- [#33339](https://github.com/apache/superset/pull/33339) chore(🦾): bump python h11 0.14.0 -> 0.16.0 (@github-actions[bot])
|
||||||
|
- [#32745](https://github.com/apache/superset/pull/32745) chore(🦾): bump python sqlglot 26.1.3 -> 26.11.1 (@github-actions[bot])
|
||||||
|
- [#32239](https://github.com/apache/superset/pull/32239) docs: adding notes about using uv instead of raw pip (@mistercrunch)
|
||||||
|
- [#32221](https://github.com/apache/superset/pull/32221) chore(ci): fix ephemeral env null issue number (v2) (@dpgaspar)
|
||||||
|
- [#32220](https://github.com/apache/superset/pull/32220) chore(ci): fix ephemeral env null issue number (@dpgaspar)
|
||||||
|
- [#32030](https://github.com/apache/superset/pull/32030) chore(timeseries charts): adjust legend width by padding (@eschutho)
|
||||||
|
- [#32062](https://github.com/apache/superset/pull/32062) chore: Re-enable asnyc event API tests (@Vitor-Avila)
|
||||||
|
- [#32004](https://github.com/apache/superset/pull/32004) refactor(Radio): Upgrade Radio Component to Ant Design 5 (@EnxDev)
|
||||||
|
- [#32054](https://github.com/apache/superset/pull/32054) chore: Add more database-related tests (follow up to #31948) (@Vitor-Avila)
|
||||||
|
- [#31811](https://github.com/apache/superset/pull/31811) chore(Network Errors): Update network errors on filter bars and charts (@msyavuz)
|
||||||
|
- [#31794](https://github.com/apache/superset/pull/31794) chore: Removing DASHBOARD_CROSS_FILTERS flag and all that comes with it. (@rusackas)
|
||||||
|
- [#32013](https://github.com/apache/superset/pull/32013) chore: add UPDATING note for CSV_UPLOAD_MAX_SIZE removal (@dpgaspar)
|
||||||
|
- [#31961](https://github.com/apache/superset/pull/31961) refactor: Upgrade to React 17 (@kgabryje)
|
||||||
|
- [#32007](https://github.com/apache/superset/pull/32007) chore(fe): correct typing for sheetsColumnNames (@hainenber)
|
||||||
|
- [#32000](https://github.com/apache/superset/pull/32000) refactor: Remove CSV upload size limit and related validation (@sha174n)
|
||||||
|
- [#31421](https://github.com/apache/superset/pull/31421) refactor(Shared_url_query): Fix shared query URL access for SQL Lab users. (@LevisNgigi)
|
||||||
|
- [#31980](https://github.com/apache/superset/pull/31980) chore: Add FYND to INTHEWILD.md (@darpanjain07)
|
||||||
|
- [#31976](https://github.com/apache/superset/pull/31976) refactor: Removes the legacy dataset editor (@michael-s-molina)
|
||||||
|
- [#31858](https://github.com/apache/superset/pull/31858) chore: refactor Alert-related components (@mistercrunch)
|
||||||
|
- [#31547](https://github.com/apache/superset/pull/31547) chore(deps): bump react-transition-group and @types/react-transition-group in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31963](https://github.com/apache/superset/pull/31963) chore(build): enforce eslint rule banning antd imports outside of core Superset components (@rusackas)
|
||||||
|
- [#31965](https://github.com/apache/superset/pull/31965) chore: fix `tsc` errors (@hainenber)
|
||||||
|
- [#31860](https://github.com/apache/superset/pull/31860) chore: Empty state refactor (@mistercrunch)
|
||||||
|
- [#31844](https://github.com/apache/superset/pull/31844) chore: replace selenium user with fixed user (@villebro)
|
||||||
|
- [#31943](https://github.com/apache/superset/pull/31943) refactor: Removes legacy dashboard endpoints (@michael-s-molina)
|
||||||
|
- [#31942](https://github.com/apache/superset/pull/31942) refactor: Removes legacy CSS template endpoint (@michael-s-molina)
|
||||||
|
- [#31819](https://github.com/apache/superset/pull/31819) chore(fe): migrate 6 Enzyme-based unit tests to RTL (@hainenber)
|
||||||
|
- [#31947](https://github.com/apache/superset/pull/31947) chore: bump FAB to 4.5.3 (@dpgaspar)
|
||||||
|
- [#30284](https://github.com/apache/superset/pull/30284) chore(GAQ): Remove GLOBAL_ASYNC_QUERIES_REDIS_CONFIG (@nsivarajan)
|
||||||
|
- [#31926](https://github.com/apache/superset/pull/31926) chore: cypress set up tweaks (@mistercrunch)
|
||||||
|
- [#31905](https://github.com/apache/superset/pull/31905) chore: Reduces the form_data_key length (@michael-s-molina)
|
||||||
|
- [#31460](https://github.com/apache/superset/pull/31460) docs: Removed mentioning of .env-non-dev in docker/README.md (@nikelborm)
|
||||||
|
- [#31907](https://github.com/apache/superset/pull/31907) chore: replace Lodash usage with native JS implementation (@hainenber)
|
||||||
|
- [#31699](https://github.com/apache/superset/pull/31699) refactor(Menu): Upgrade Menu Component to Ant Design 5 (@geido)
|
||||||
|
- [#31908](https://github.com/apache/superset/pull/31908) chore(fe): dev deps cleanup (@hainenber)
|
||||||
|
- [#31916](https://github.com/apache/superset/pull/31916) docs: clarify port configuration for Cypress (@mistercrunch)
|
||||||
|
- [#29163](https://github.com/apache/superset/pull/29163) refactor(sqllab): migrate share queries via kv by permalink (@justinpark)
|
||||||
|
- [#29121](https://github.com/apache/superset/pull/29121) perf(dashboard): dashboard list endpoint returning large and unnecessary data (@Always-prog)
|
||||||
|
- [#31894](https://github.com/apache/superset/pull/31894) chore(config): Deprecating Domain Sharding (@rusackas)
|
||||||
|
- [#31795](https://github.com/apache/superset/pull/31795) chore: Re-enable skipped tests (@michael-s-molina)
|
||||||
|
- [#31875](https://github.com/apache/superset/pull/31875) chore: add a disable for pylint (@betodealmeida)
|
||||||
|
- [#31874](https://github.com/apache/superset/pull/31874) docs: add a note about accessing the dev env's postgres database (@mistercrunch)
|
||||||
|
- [#31845](https://github.com/apache/superset/pull/31845) chore: add eslint to pre-commit hooks (@mistercrunch)
|
||||||
|
- [#31847](https://github.com/apache/superset/pull/31847) chore(ci): auto delete branches on merge (@rusackas)
|
||||||
|
- [#31846](https://github.com/apache/superset/pull/31846) chore: properly import expect from chai in cypress-base/cypress/support/e2e.ts (@mistercrunch)
|
||||||
|
- [#31831](https://github.com/apache/superset/pull/31831) chore: bump @ant-design/icons to fix fill-rule console warning (@mistercrunch)
|
||||||
|
- [#31503](https://github.com/apache/superset/pull/31503) chore: python version to 3.11 (while supporting 3.10) (@mistercrunch)
|
||||||
|
- [#31761](https://github.com/apache/superset/pull/31761) build(eslint): disabling wildcard imports with eslint (@rusackas)
|
||||||
|
- [#25933](https://github.com/apache/superset/pull/25933) chore(deps): bump selenium 4.14.0+ (@gnought)
|
||||||
|
- [#31820](https://github.com/apache/superset/pull/31820) chore(tests): Changing the logic for an intermittent tag test (@Vitor-Avila)
|
||||||
|
- [#31631](https://github.com/apache/superset/pull/31631) refactor(bulk_select): Fix bulk select tagging issues for users (@LevisNgigi)
|
||||||
|
- [#31019](https://github.com/apache/superset/pull/31019) refactor(date picker): Migrate Date Picker to Ant Design 5 (@msyavuz)
|
||||||
|
- [#31787](https://github.com/apache/superset/pull/31787) docs: improve dev python environment install (@sha174n)
|
||||||
|
- [#31797](https://github.com/apache/superset/pull/31797) chore: adding Antonio as a helm codeowner (@eschutho)
|
||||||
|
- [#31452](https://github.com/apache/superset/pull/31452) refactor(dashboard): Migrate ResizableContainer to TypeScript and functional component (@EnxDev)
|
||||||
|
- [#31791](https://github.com/apache/superset/pull/31791) chore: Skips integration tests affected by legacy charts removal (@michael-s-molina)
|
||||||
|
- [#31661](https://github.com/apache/superset/pull/31661) build(deps-dev): bump css-loader from 6.8.1 to 7.1.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31668](https://github.com/apache/superset/pull/31668) build(deps-dev): bump css-minimizer-webpack-plugin from 5.0.1 to 7.0.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31754](https://github.com/apache/superset/pull/31754) refactor: Removes Apply to all panels filters scope configuration (@michael-s-molina)
|
||||||
|
- [#31623](https://github.com/apache/superset/pull/31623) refactor(Button): Upgrade Button component to Antd5 (@alexandrusoare)
|
||||||
|
- [#31756](https://github.com/apache/superset/pull/31756) docs: add Remita to list (@mujibishola)
|
||||||
|
- [#31750](https://github.com/apache/superset/pull/31750) docs: add cover genius to the user list (@US579)
|
||||||
|
- [#31412](https://github.com/apache/superset/pull/31412) chore(ff): deprecating `DRILL_TO_DETAIL` feature flag to launch it prime-time (@rusackas)
|
||||||
|
- [#31718](https://github.com/apache/superset/pull/31718) refactor(Steps): Migrate Steps to Ant Design 5 (@msyavuz)
|
||||||
|
- [#31537](https://github.com/apache/superset/pull/31537) chore(deps): bump react-virtualized-auto-sizer from 1.0.24 to 1.0.25 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31552](https://github.com/apache/superset/pull/31552) chore(deps-dev): bump eslint-plugin-react-hooks from 4.6.0 to 4.6.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31545](https://github.com/apache/superset/pull/31545) chore(deps-dev): bump webpack from 5.94.0 to 5.97.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31551](https://github.com/apache/superset/pull/31551) chore(deps-dev): bump eslint-plugin-cypress from 3.5.0 to 3.6.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31559](https://github.com/apache/superset/pull/31559) chore(deps): bump abortcontroller-polyfill from 1.7.5 to 1.7.8 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31653](https://github.com/apache/superset/pull/31653) build(deps): update @emotion/cache requirement from ^11.4.0 to ^11.14.0 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31664](https://github.com/apache/superset/pull/31664) build(deps): bump markdown-to-jsx from 7.4.7 to 7.7.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31665](https://github.com/apache/superset/pull/31665) build(deps): bump html-webpack-plugin from 5.6.0 to 5.6.3 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31666](https://github.com/apache/superset/pull/31666) build(deps-dev): bump @emotion/babel-plugin from 11.12.0 to 11.13.5 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31667](https://github.com/apache/superset/pull/31667) build(deps-dev): bump jsdom from 24.1.1 to 25.0.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31685](https://github.com/apache/superset/pull/31685) build(deps): bump jinja2 from 3.1.4 to 3.1.5 in /superset/translations (@dependabot[bot])
|
||||||
|
- [#31622](https://github.com/apache/superset/pull/31622) chore: replace `imp` built-in module usage for future Python3.12 usage (@hainenber)
|
||||||
|
- [#31712](https://github.com/apache/superset/pull/31712) chore(fe/sec): resolve High CVE-2024-21538 and Moderate CVE-2024-55565 by bumping `nanoid` and `cross-spawn` (@hainenber)
|
||||||
|
- [#31627](https://github.com/apache/superset/pull/31627) chore(helm): bump helm on CI to latest version (@villebro)
|
||||||
|
- [#31701](https://github.com/apache/superset/pull/31701) chore: add helm code owners (@villebro)
|
||||||
|
- [#31691](https://github.com/apache/superset/pull/31691) docs: add Open edX to users list (@pomegranited)
|
||||||
|
- [#31693](https://github.com/apache/superset/pull/31693) refactor(space): Migrate Space to Ant Design 5 (@msyavuz)
|
||||||
|
- [#31530](https://github.com/apache/superset/pull/31530) chore(deps-dev): bump eslint from 9.14.0 to 9.17.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#31670](https://github.com/apache/superset/pull/31670) build(deps): update echarts requirement from ^5.4.1 to ^5.6.0 in /superset-frontend/plugins/plugin-chart-echarts (@dependabot[bot])
|
||||||
|
- [#31652](https://github.com/apache/superset/pull/31652) build(deps): update chalk requirement from ^5.4.0 to ^5.4.1 in /superset-frontend/packages/generator-superset (@dependabot[bot])
|
||||||
|
- [#31655](https://github.com/apache/superset/pull/31655) build(deps): bump core-js from 3.38.1 to 3.39.0 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31656](https://github.com/apache/superset/pull/31656) build(deps): bump antd from 5.22.5 to 5.22.7 in /docs (@dependabot[bot])
|
||||||
|
- [#31657](https://github.com/apache/superset/pull/31657) build(deps-dev): update @babel/core requirement from ^7.23.9 to ^7.26.0 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31658](https://github.com/apache/superset/pull/31658) build(deps): update @emotion/react requirement from ^11.13.3 to ^11.14.0 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31662](https://github.com/apache/superset/pull/31662) build(deps-dev): bump @types/node from 22.7.4 to 22.10.3 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#31663](https://github.com/apache/superset/pull/31663) build(deps-dev): bump typescript-eslint from 8.12.2 to 8.19.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#31672](https://github.com/apache/superset/pull/31672) build(deps-dev): update @types/node requirement from ^22.5.4 to ^22.10.3 in /superset-frontend/packages/superset-ui-core (@dependabot[bot])
|
||||||
|
- [#31633](https://github.com/apache/superset/pull/31633) refactor(empty): Migrate Empty component to Ant Design 5 (@msyavuz)
|
||||||
|
- [#31607](https://github.com/apache/superset/pull/31607) refactor(Divider): Migrate Divider to Ant Design 5 (@msyavuz)
|
||||||
|
- [#31310](https://github.com/apache/superset/pull/31310) refactor(moment): Replace Moment.js with DayJs (@msyavuz)
|
||||||
|
- [#30778](https://github.com/apache/superset/pull/30778) build(deps-dev): update @types/jest requirement from ^29.5.12 to ^29.5.14 in /superset-frontend/plugins/plugin-chart-handlebars (@dependabot[bot])
|
||||||
|
- [#31526](https://github.com/apache/superset/pull/31526) chore(deps): bump hot-shots from 10.0.0 to 10.2.1 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#31538](https://github.com/apache/superset/pull/31538) chore(deps-dev): update @babel/preset-react requirement from ^7.23.3 to ^7.26.3 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31217](https://github.com/apache/superset/pull/31217) chore(deps-dev): bump eslint-plugin-jest-dom from 3.6.5 to 5.5.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31541](https://github.com/apache/superset/pull/31541) chore(deps): bump antd from 5.22.2 to 5.22.5 in /docs (@dependabot[bot])
|
||||||
|
- [#31536](https://github.com/apache/superset/pull/31536) chore(deps): bump prism-react-renderer from 2.4.0 to 2.4.1 in /docs (@dependabot[bot])
|
||||||
|
- [#30322](https://github.com/apache/superset/pull/30322) build(deps): bump find-my-way and @applitools/eyes-cypress in /superset-frontend/cypress-base (@dependabot[bot])
|
||||||
|
- [#30789](https://github.com/apache/superset/pull/30789) build(deps-dev): update @types/lodash requirement from ^4.17.7 to ^4.17.13 in /superset-frontend/packages/superset-ui-core (@dependabot[bot])
|
||||||
|
- [#31523](https://github.com/apache/superset/pull/31523) chore(deps-dev): bump @types/lodash from 4.17.7 to 4.17.13 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#31546](https://github.com/apache/superset/pull/31546) chore(deps-dev): bump @types/rison from 0.0.9 to 0.1.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31557](https://github.com/apache/superset/pull/31557) chore(deps): bump react-reverse-portal from 2.1.1 to 2.1.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31577](https://github.com/apache/superset/pull/31577) docs: add Virtuoso QA to users list (@shubham-rohatgi)
|
||||||
|
- [#31520](https://github.com/apache/superset/pull/31520) chore(deps): bump debug from 4.3.7 to 4.4.0 in /superset-websocket/utils/client-ws-app (@dependabot[bot])
|
||||||
|
- [#30474](https://github.com/apache/superset/pull/30474) build(deps-dev): bump thread-loader from 4.0.2 to 4.0.4 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30085](https://github.com/apache/superset/pull/30085) build(deps): bump gh-pages from 5.0.0 to 6.1.1 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31558](https://github.com/apache/superset/pull/31558) chore(deps-dev): bump eslint-import-resolver-typescript from 3.6.3 to 3.7.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31521](https://github.com/apache/superset/pull/31521) chore(deps-dev): bump prettier from 3.3.3 to 3.4.2 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30785](https://github.com/apache/superset/pull/30785) build(deps-dev): update @types/underscore requirement from ^1.11.15 to ^1.13.0 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#30779](https://github.com/apache/superset/pull/30779) build(deps-dev): update @types/lodash requirement from ^4.17.7 to ^4.17.13 in /superset-frontend/plugins/plugin-chart-handlebars (@dependabot[bot])
|
||||||
|
- [#31539](https://github.com/apache/superset/pull/31539) chore(deps-dev): bump webpack from 5.96.1 to 5.97.1 in /docs (@dependabot[bot])
|
||||||
|
- [#31540](https://github.com/apache/superset/pull/31540) chore(deps): bump @algolia/client-search from 5.15.0 to 5.18.0 in /docs (@dependabot[bot])
|
||||||
|
- [#27809](https://github.com/apache/superset/pull/27809) build(deps): bump @math.gl/web-mercator from 3.6.3 to 4.0.1 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#31529](https://github.com/apache/superset/pull/31529) chore(deps): update @deck.gl/aggregation-layers requirement from ^9.0.37 to ^9.0.38 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#31572](https://github.com/apache/superset/pull/31572) chore(deps): bump gh-pages from 5.0.0 to 6.2.0 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#30458](https://github.com/apache/superset/pull/30458) build(deps): bump @types/d3-format from 1.4.5 to 3.0.4 in /superset-frontend/packages/superset-ui-core (@dependabot[bot])
|
||||||
|
- [#31542](https://github.com/apache/superset/pull/31542) chore(deps): bump @docsearch/react from 3.6.3 to 3.8.2 in /docs (@dependabot[bot])
|
||||||
|
- [#31225](https://github.com/apache/superset/pull/31225) chore(deps-dev): bump typescript from 4.9.5 to 5.7.2 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31388](https://github.com/apache/superset/pull/31388) chore(deps): update dompurify requirement from ^3.1.3 to ^3.2.3 in /superset-frontend/plugins/legacy-preset-chart-nvd3 (@dependabot[bot])
|
||||||
|
- [#31543](https://github.com/apache/superset/pull/31543) chore(deps): bump @storybook/types from 8.1.11 to 8.4.7 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31533](https://github.com/apache/superset/pull/31533) chore(deps): update chalk requirement from ^5.3.0 to ^5.4.0 in /superset-frontend/packages/generator-superset (@dependabot[bot])
|
||||||
|
- [#31532](https://github.com/apache/superset/pull/31532) chore(deps-dev): update @types/d3-time requirement from ^3.0.3 to ^3.0.4 in /superset-frontend/packages/superset-ui-core (@dependabot[bot])
|
||||||
|
- [#31531](https://github.com/apache/superset/pull/31531) chore(deps): update yeoman-generator requirement from ^7.3.2 to ^7.4.0 in /superset-frontend/packages/generator-superset (@dependabot[bot])
|
||||||
|
- [#31525](https://github.com/apache/superset/pull/31525) chore(deps): update @deck.gl/layers requirement from ^9.0.37 to ^9.0.38 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#31524](https://github.com/apache/superset/pull/31524) chore(deps-dev): update @babel/types requirement from ^7.25.6 to ^7.26.3 in /superset-frontend/plugins/plugin-chart-pivot-table (@dependabot[bot])
|
||||||
|
- [#31389](https://github.com/apache/superset/pull/31389) chore(deps): update @emotion/styled requirement from ^11.3.0 to ^11.14.0 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#31519](https://github.com/apache/superset/pull/31519) chore: remove dependency on func_timeout because LGPL (@mistercrunch)
|
||||||
|
- [#31517](https://github.com/apache/superset/pull/31517) chore: update browser list (@mistercrunch)
|
||||||
|
- [#31420](https://github.com/apache/superset/pull/31420) refactor(Modal): Upgrade Modal component to Antd5 (@alexandrusoare)
|
||||||
|
- [#31511](https://github.com/apache/superset/pull/31511) chore: rename `apply_post_process` (@betodealmeida)
|
||||||
|
- [#31390](https://github.com/apache/superset/pull/31390) chore(gha): bump ubuntu to latest fresh release (@mistercrunch)
|
||||||
|
- [#31313](https://github.com/apache/superset/pull/31313) chore: deprecate pip-compile-multi in favor or uv (@mistercrunch)
|
||||||
|
- [#31515](https://github.com/apache/superset/pull/31515) chore: deprecate fossa in favor of liccheck to validate python licenses (@mistercrunch)
|
||||||
|
- [#31501](https://github.com/apache/superset/pull/31501) chore(code owners): Update CODEOWNERS file to remove a couple inactive contributors (@rusackas)
|
||||||
|
- [#31496](https://github.com/apache/superset/pull/31496) docs: Update new user for Careem to user's list (@samraHanif0340)
|
||||||
|
- [#31451](https://github.com/apache/superset/pull/31451) chore: remove numba and llvmlite deps as they are large and we don't use them (@mistercrunch)
|
||||||
|
- [#30605](https://github.com/apache/superset/pull/30605) chore(translations): German translation update (@gerbermichi)
|
||||||
|
- [#31262](https://github.com/apache/superset/pull/31262) chore: deprecate `pylint` in favor of `ruff` (@mistercrunch)
|
||||||
|
- [#31422](https://github.com/apache/superset/pull/31422) docs: CVEs fixed on 4.1.0 v2 (@dpgaspar)
|
||||||
|
- [#31268](https://github.com/apache/superset/pull/31268) refactor: Migrate AdhocFilterEditPopoverSqlTabContent to TypeScript (@EnxDev)
|
||||||
|
- [#30196](https://github.com/apache/superset/pull/30196) build(packages): npm build/publish improvements. Making packages publishable again. (@rusackas)
|
||||||
|
- [#31378](https://github.com/apache/superset/pull/31378) chore(deps): bump nanoid from 3.3.7 to 3.3.8 in /docs (@dependabot[bot])
|
||||||
|
- [#31381](https://github.com/apache/superset/pull/31381) chore(embedded sdk): bump sdk version number (@rusackas)
|
||||||
|
- [#31380](https://github.com/apache/superset/pull/31380) chore(embedded sdk): bumping dependencies (@rusackas)
|
||||||
|
- [#31362](https://github.com/apache/superset/pull/31362) chore(deps): bump nanoid from 5.0.7 to 5.0.9 in /superset-frontend/cypress-base (@dependabot[bot])
|
||||||
|
- [#31209](https://github.com/apache/superset/pull/31209) chore(deps): bump antd from 5.21.6 to 5.22.2 in /docs (@dependabot[bot])
|
||||||
|
- [#31219](https://github.com/apache/superset/pull/31219) chore(deps-dev): bump esbuild from 0.20.0 to 0.24.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31314](https://github.com/apache/superset/pull/31314) chore(deps): bump path-to-regexp and express in /superset-websocket/utils/client-ws-app (@dependabot[bot])
|
||||||
|
- [#31220](https://github.com/apache/superset/pull/31220) chore(deps): bump winston from 3.15.0 to 3.17.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#31218](https://github.com/apache/superset/pull/31218) chore(deps-dev): bump @babel/eslint-parser from 7.23.10 to 7.25.9 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31222](https://github.com/apache/superset/pull/31222) chore(deps-dev): bump @eslint/js from 9.14.0 to 9.16.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#31352](https://github.com/apache/superset/pull/31352) docs: CVEs fixed on 4.1.0 (@dpgaspar)
|
||||||
|
- [#31168](https://github.com/apache/superset/pull/31168) refactor(Alert): Migrate Alert component to Ant Design V5 (@LevisNgigi)
|
||||||
|
- [#31290](https://github.com/apache/superset/pull/31290) chore(FilterBar): move the "Add/edit filters" button in the FilterBar to the settings menu (@alexandrusoare)
|
||||||
|
- [#31312](https://github.com/apache/superset/pull/31312) refactor(Name_column): Make 'Name' column of Saved Query page into links (@LevisNgigi)
|
||||||
|
- [#31203](https://github.com/apache/superset/pull/31203) chore(deps): bump deck.gl from 9.0.34 to 9.0.36 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#31275](https://github.com/apache/superset/pull/31275) chore: relax greenlet requirements (@sadpandajoe)
|
||||||
|
- [#31205](https://github.com/apache/superset/pull/31205) chore(deps-dev): bump typescript from 5.6.3 to 5.7.2 in /docs (@dependabot[bot])
|
||||||
|
- [#31207](https://github.com/apache/superset/pull/31207) chore(deps): bump @algolia/client-search from 5.12.0 to 5.15.0 in /docs (@dependabot[bot])
|
||||||
|
- [#31208](https://github.com/apache/superset/pull/31208) chore(deps): bump less from 4.2.0 to 4.2.1 in /docs (@dependabot[bot])
|
||||||
|
- [#31204](https://github.com/apache/superset/pull/31204) chore(deps-dev): bump @docusaurus/tsconfig from 3.5.2 to 3.6.3 in /docs (@dependabot[bot])
|
||||||
|
- [#31206](https://github.com/apache/superset/pull/31206) chore(deps): bump swagger-ui-react from 5.17.14 to 5.18.2 in /docs (@dependabot[bot])
|
||||||
|
- [#31224](https://github.com/apache/superset/pull/31224) chore(deps-dev): bump @types/jest from 29.5.12 to 29.5.14 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#31228](https://github.com/apache/superset/pull/31228) chore(deps): bump @types/react-table from 7.7.19 to 7.7.20 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31210](https://github.com/apache/superset/pull/31210) chore(deps-dev): bump @docusaurus/module-type-aliases from 3.5.2 to 3.6.3 in /docs (@dependabot[bot])
|
||||||
|
- [#31213](https://github.com/apache/superset/pull/31213) chore(deps): bump @ant-design/icons from 5.5.1 to 5.5.2 in /docs (@dependabot[bot])
|
||||||
|
- [#31230](https://github.com/apache/superset/pull/31230) chore(deps): bump @scarf/scarf from 1.3.0 to 1.4.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31259](https://github.com/apache/superset/pull/31259) chore(bug report template): bump Superset versions to reflect 4.1.1 release (@sfirke)
|
||||||
|
- [#31231](https://github.com/apache/superset/pull/31231) chore(deps): bump re-resizable from 6.10.0 to 6.10.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#31270](https://github.com/apache/superset/pull/31270) refactor: Split SliceHeaderControls into smaller files (@kgabryje)
|
||||||
|
- [#30864](https://github.com/apache/superset/pull/30864) docs: adapt docs to suggest 'docker compose up --build' (@mistercrunch)
|
||||||
|
- [#31034](https://github.com/apache/superset/pull/31034) chore: simplify Dockerfile package install calls with bash wrappers (@mistercrunch)
|
||||||
|
- [#31214](https://github.com/apache/superset/pull/31214) chore(deps): bump codecov/codecov-action from 4 to 5 (@dependabot[bot])
|
||||||
|
- [#31250](https://github.com/apache/superset/pull/31250) chore(🦾): bump python flask-migrate subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31249](https://github.com/apache/superset/pull/31249) chore(🦾): bump python nh3 0.2.18 -> 0.2.19 (@github-actions[bot])
|
||||||
|
- [#31253](https://github.com/apache/superset/pull/31253) chore(🦾): bump python pyjwt 2.10.0 -> 2.10.1 (@github-actions[bot])
|
||||||
|
- [#31254](https://github.com/apache/superset/pull/31254) chore: pin greenlet in base dependencies (@mistercrunch)
|
||||||
|
- [#31186](https://github.com/apache/superset/pull/31186) docs(contributing): how to nuke the docker-compose postgres (@mistercrunch)
|
||||||
|
- [#31244](https://github.com/apache/superset/pull/31244) perf: Optimize DashboardPage and SyncDashboardState (@kgabryje)
|
||||||
|
- [#31243](https://github.com/apache/superset/pull/31243) perf: Optimize native filters and cross filters (@kgabryje)
|
||||||
|
- [#31240](https://github.com/apache/superset/pull/31240) perf: Optimize dashboard grid components (@kgabryje)
|
||||||
|
- [#31242](https://github.com/apache/superset/pull/31242) perf: Optimize Dashboard components (@kgabryje)
|
||||||
|
- [#31241](https://github.com/apache/superset/pull/31241) perf: Optimize dashboard chart-related components (@kgabryje)
|
||||||
|
- [#31182](https://github.com/apache/superset/pull/31182) chore(Tooltip): Upgrade Tooltip to Ant Design 5 (@alexandrusoare)
|
||||||
|
- [#31193](https://github.com/apache/superset/pull/31193) refactor: Creates the VizType enum (@michael-s-molina)
|
||||||
|
- [#31165](https://github.com/apache/superset/pull/31165) docs: update slack alert instructions to work with V2 slack API (@PJDuszynski)
|
||||||
|
- [#28461](https://github.com/apache/superset/pull/28461) chore(🦾): bump python sqlglot 23.6.3 -> 23.15.8 (@github-actions[bot])
|
||||||
|
- [#31171](https://github.com/apache/superset/pull/31171) chore(🦾): bump python pyparsing 3.1.2 -> 3.2.0 (@github-actions[bot])
|
||||||
|
- [#31170](https://github.com/apache/superset/pull/31170) chore(deps): cap async_timeout<5.0.0 (@mistercrunch)
|
||||||
|
- [#31032](https://github.com/apache/superset/pull/31032) refactor: remove more sqlparse (@betodealmeida)
|
||||||
|
- [#31126](https://github.com/apache/superset/pull/31126) chore(🦾): bump python importlib-metadata 7.1.0 -> 8.5.0 (@github-actions[bot])
|
||||||
|
- [#29382](https://github.com/apache/superset/pull/29382) chore: deprecate tox in favor of act (@mistercrunch)
|
||||||
|
- [#31109](https://github.com/apache/superset/pull/31109) chore(🦾): bump python billiard 4.2.0 -> 4.2.1 (@github-actions[bot])
|
||||||
|
- [#31138](https://github.com/apache/superset/pull/31138) chore(🦾): bump python flask-limiter 3.7.0 -> 3.8.0 (@github-actions[bot])
|
||||||
|
- [#31140](https://github.com/apache/superset/pull/31140) chore(🦾): bump python mako 1.3.5 -> 1.3.6 (@github-actions[bot])
|
||||||
|
- [#31127](https://github.com/apache/superset/pull/31127) chore(🦾): bump python celery subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31128](https://github.com/apache/superset/pull/31128) chore(🦾): bump python humanize 4.9.0 -> 4.11.0 (@github-actions[bot])
|
||||||
|
- [#31129](https://github.com/apache/superset/pull/31129) chore(🦾): bump python simplejson 3.19.2 -> 3.19.3 (@github-actions[bot])
|
||||||
|
- [#31130](https://github.com/apache/superset/pull/31130) chore(🦾): bump python numexpr 2.10.1 -> 2.10.2 (@github-actions[bot])
|
||||||
|
- [#31132](https://github.com/apache/superset/pull/31132) chore(🦾): bump python slack-sdk 3.27.2 -> 3.33.4 (@github-actions[bot])
|
||||||
|
- [#31133](https://github.com/apache/superset/pull/31133) chore(🦾): bump python pyopenssl 24.1.0 -> 24.2.1 (@github-actions[bot])
|
||||||
|
- [#31135](https://github.com/apache/superset/pull/31135) chore(🦾): bump python dnspython 2.6.1 -> 2.7.0 (@github-actions[bot])
|
||||||
|
- [#31136](https://github.com/apache/superset/pull/31136) chore(🦾): bump python zstandard 0.22.0 -> 0.23.0 (@github-actions[bot])
|
||||||
|
- [#31137](https://github.com/apache/superset/pull/31137) chore(🦾): bump python limits 3.12.0 -> 3.13.0 (@github-actions[bot])
|
||||||
|
- [#31139](https://github.com/apache/superset/pull/31139) chore(🦾): bump python flask-jwt-extended 4.6.0 -> 4.7.1 (@github-actions[bot])
|
||||||
|
- [#31125](https://github.com/apache/superset/pull/31125) chore(🦾): bump python gunicorn 22.0.0 -> 23.0.0 (@github-actions[bot])
|
||||||
|
- [#31124](https://github.com/apache/superset/pull/31124) chore(🦾): bump python zipp 3.19.0 -> 3.21.0 (@github-actions[bot])
|
||||||
|
- [#31123](https://github.com/apache/superset/pull/31123) chore(🦾): bump python flask-compress 1.15 -> 1.17 (@github-actions[bot])
|
||||||
|
- [#31108](https://github.com/apache/superset/pull/31108) chore(🦾): bump python dill 0.3.8 -> 0.3.9 (@github-actions[bot])
|
||||||
|
- [#31116](https://github.com/apache/superset/pull/31116) chore(🦾): bump python email-validator 2.1.1 -> 2.2.0 (@github-actions[bot])
|
||||||
|
- [#31153](https://github.com/apache/superset/pull/31153) chore(asf): add `gh-pages` to protected branches (@rusackas)
|
||||||
|
- [#31122](https://github.com/apache/superset/pull/31122) chore(🦾): bump python async-timeout 4.0.3 -> 5.0.1 (@github-actions[bot])
|
||||||
|
- [#31121](https://github.com/apache/superset/pull/31121) chore(🦾): bump python prompt-toolkit 3.0.44 -> 3.0.48 (@github-actions[bot])
|
||||||
|
- [#31119](https://github.com/apache/superset/pull/31119) chore(🦾): bump python sqlparse 0.5.0 -> 0.5.2 (@github-actions[bot])
|
||||||
|
- [#30963](https://github.com/apache/superset/pull/30963) refactor(List): Upgrade List from antdesign4 to antdesign5 (@alexandrusoare)
|
||||||
|
- [#31113](https://github.com/apache/superset/pull/31113) chore(🦾): bump python mysqlclient 2.2.4 -> 2.2.6 (@github-actions[bot])
|
||||||
|
- [#31114](https://github.com/apache/superset/pull/31114) chore(🦾): bump python grpcio-status subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31112](https://github.com/apache/superset/pull/31112) chore(🦾): bump python cycler 0.11.0 -> 0.12.1 (@github-actions[bot])
|
||||||
|
- [#31091](https://github.com/apache/superset/pull/31091) chore(🦾): bump python croniter 2.0.5 -> 5.0.1 (@github-actions[bot])
|
||||||
|
- [#31107](https://github.com/apache/superset/pull/31107) chore(🦾): bump python google-auth 2.29.0 -> 2.36.0 (@github-actions[bot])
|
||||||
|
- [#31106](https://github.com/apache/superset/pull/31106) chore(🦾): bump python psutil 6.0.0 -> 6.1.0 (@github-actions[bot])
|
||||||
|
- [#31105](https://github.com/apache/superset/pull/31105) chore(🦾): bump python dnspython 2.6.1 -> 2.7.0 (@github-actions[bot])
|
||||||
|
- [#31102](https://github.com/apache/superset/pull/31102) chore(🦾): bump python markdown 3.6 -> 3.7 (@github-actions[bot])
|
||||||
|
- [#31101](https://github.com/apache/superset/pull/31101) chore(🦾): bump python pluggy 1.4.0 -> 1.5.0 (@github-actions[bot])
|
||||||
|
- [#31100](https://github.com/apache/superset/pull/31100) chore(🦾): bump python sqloxide 0.1.43 -> 0.1.51 (@github-actions[bot])
|
||||||
|
- [#31099](https://github.com/apache/superset/pull/31099) chore(🦾): bump python wheel 0.43.0 -> 0.45.1 (@github-actions[bot])
|
||||||
|
- [#31098](https://github.com/apache/superset/pull/31098) chore(🦾): bump python pyproject-api 1.6.1 -> 1.8.0 (@github-actions[bot])
|
||||||
|
- [#31096](https://github.com/apache/superset/pull/31096) chore(🦾): bump python pytest-cov 5.0.0 -> 6.0.0 (@github-actions[bot])
|
||||||
|
- [#31094](https://github.com/apache/superset/pull/31094) chore(🦾): bump python chardet 5.1.0 -> 5.2.0 (@github-actions[bot])
|
||||||
|
- [#31093](https://github.com/apache/superset/pull/31093) chore(🦾): bump python jsonpath-ng 1.6.1 -> 1.7.0 (@github-actions[bot])
|
||||||
|
- [#31092](https://github.com/apache/superset/pull/31092) chore(🦾): bump python sshtunnel subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31097](https://github.com/apache/superset/pull/31097) chore(🦾): bump python mako 1.3.5 -> 1.3.6 (@github-actions[bot])
|
||||||
|
- [#31090](https://github.com/apache/superset/pull/31090) chore(🦾): bump python tomlkit 0.12.5 -> 0.13.2 (@github-actions[bot])
|
||||||
|
- [#31087](https://github.com/apache/superset/pull/31087) chore(🦾): bump python isodate 0.6.1 -> 0.7.2 (@github-actions[bot])
|
||||||
|
- [#31082](https://github.com/apache/superset/pull/31082) chore(🦾): bump python db-dtypes 1.2.0 -> 1.3.1 (@github-actions[bot])
|
||||||
|
- [#31081](https://github.com/apache/superset/pull/31081) chore(🦾): bump python trino 0.328.0 -> 0.330.0 (@github-actions[bot])
|
||||||
|
- [#31089](https://github.com/apache/superset/pull/31089) chore(🦾): bump python certifi 2024.2.2 -> 2024.8.30 (@github-actions[bot])
|
||||||
|
- [#31088](https://github.com/apache/superset/pull/31088) chore(🦾): bump python pydata-google-auth 1.7.0 -> 1.9.0 (@github-actions[bot])
|
||||||
|
- [#31086](https://github.com/apache/superset/pull/31086) chore(🦾): bump python pyproject-hooks 1.0.0 -> 1.2.0 (@github-actions[bot])
|
||||||
|
- [#31085](https://github.com/apache/superset/pull/31085) chore(🦾): bump python sqlalchemy-bigquery 1.11.0 -> 1.12.0 (@github-actions[bot])
|
||||||
|
- [#31084](https://github.com/apache/superset/pull/31084) chore(🦾): bump python kiwisolver 1.4.5 -> 1.4.7 (@github-actions[bot])
|
||||||
|
- [#31083](https://github.com/apache/superset/pull/31083) chore(🦾): bump python coverage subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31077](https://github.com/apache/superset/pull/31077) chore(🦾): bump python cfgv 3.3.1 -> 3.4.0 (@github-actions[bot])
|
||||||
|
- [#31075](https://github.com/apache/superset/pull/31075) chore(🦾): bump python fonttools 4.51.0 -> 4.55.0 (@github-actions[bot])
|
||||||
|
- [#31076](https://github.com/apache/superset/pull/31076) chore(🦾): bump python pyasn1-modules 0.4.0 -> 0.4.1 (@github-actions[bot])
|
||||||
|
- [#31079](https://github.com/apache/superset/pull/31079) chore(🦾): bump python pyhive subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31078](https://github.com/apache/superset/pull/31078) chore(🦾): bump python google-cloud-core 2.3.2 -> 2.4.1 (@github-actions[bot])
|
||||||
|
- [#31048](https://github.com/apache/superset/pull/31048) chore(🦾): bump python sqlalchemy-utils subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31073](https://github.com/apache/superset/pull/31073) chore(🦾): bump python amqp 5.2.0 -> 5.3.1 (@github-actions[bot])
|
||||||
|
- [#31071](https://github.com/apache/superset/pull/31071) chore(🦾): bump python cachetools 5.3.3 -> 5.5.0 (@github-actions[bot])
|
||||||
|
- [#31074](https://github.com/apache/superset/pull/31074) chore(🦾): bump python kombu 5.3.7 -> 5.4.2 (@github-actions[bot])
|
||||||
|
- [#31066](https://github.com/apache/superset/pull/31066) chore(🦾): bump python pyyaml 6.0.1 -> 6.0.2 (@github-actions[bot])
|
||||||
|
- [#31068](https://github.com/apache/superset/pull/31068) chore(🦾): bump python tqdm 4.66.4 -> 4.67.1 (@github-actions[bot])
|
||||||
|
- [#31069](https://github.com/apache/superset/pull/31069) chore(🦾): bump python proto-plus 1.22.2 -> 1.25.0 (@github-actions[bot])
|
||||||
|
- [#31067](https://github.com/apache/superset/pull/31067) chore(🦾): bump python importlib-resources 6.4.0 -> 6.4.5 (@github-actions[bot])
|
||||||
|
- [#31062](https://github.com/apache/superset/pull/31062) chore(🦾): bump python apispec subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31056](https://github.com/apache/superset/pull/31056) chore(🦾): bump python deprecated 1.2.14 -> 1.2.15 (@github-actions[bot])
|
||||||
|
- [#31050](https://github.com/apache/superset/pull/31050) chore(🦾): bump python pre-commit 3.7.1 -> 4.0.1 (@github-actions[bot])
|
||||||
|
- [#31064](https://github.com/apache/superset/pull/31064) chore(🦾): bump python charset-normalizer 3.3.2 -> 3.4.0 (@github-actions[bot])
|
||||||
|
- [#31001](https://github.com/apache/superset/pull/31001) chore(🦾): bump python ruff 0.4.5 -> 0.8.0 (@github-actions[bot])
|
||||||
|
- [#31049](https://github.com/apache/superset/pull/31049) chore(🦾): bump python googleapis-common-protos 1.63.0 -> 1.66.0 (@github-actions[bot])
|
||||||
|
- [#31046](https://github.com/apache/superset/pull/31046) chore(🦾): bump python cron-descriptor 1.4.3 -> 1.4.5 (@github-actions[bot])
|
||||||
|
- [#31052](https://github.com/apache/superset/pull/31052) chore(🦾): bump python flask-wtf 1.2.1 -> 1.2.2 (@github-actions[bot])
|
||||||
|
- [#31044](https://github.com/apache/superset/pull/31044) docs: updated the install process in pypi.mdx (@Rkejji)
|
||||||
|
- [#31054](https://github.com/apache/superset/pull/31054) chore(🦾): bump python nh3 0.2.17 -> 0.2.18 (@github-actions[bot])
|
||||||
|
- [#31045](https://github.com/apache/superset/pull/31045) chore(🦾): bump python marshmallow 3.21.2 -> 3.23.1 (@github-actions[bot])
|
||||||
|
- [#31041](https://github.com/apache/superset/pull/31041) chore(🦾): bump python idna 3.7 -> 3.10 (@github-actions[bot])
|
||||||
|
- [#31042](https://github.com/apache/superset/pull/31042) chore(🦾): bump python pyjwt 2.8.0 -> 2.10.0 (@github-actions[bot])
|
||||||
|
- [#31040](https://github.com/apache/superset/pull/31040) chore(🦾): bump python et-xmlfile 1.1.0 -> 2.0.0 & remove pyhive[hive] from requirements/development.in (@github-actions[bot])
|
||||||
|
- [#30651](https://github.com/apache/superset/pull/30651) chore(legacy-plugin-chart-map-box): replace viewport-mercator-project with @math.gl/web-mercator (@birkskyum)
|
||||||
|
- [#31004](https://github.com/apache/superset/pull/31004) chore(🦾): bump python pandas subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31030](https://github.com/apache/superset/pull/31030) chore: Cleanup code related to MetadataBar, fix types (@kgabryje)
|
||||||
|
- [#31029](https://github.com/apache/superset/pull/31029) chore: Refactor dashboard header to func component (@kgabryje)
|
||||||
|
- [#30998](https://github.com/apache/superset/pull/30998) chore(🦾): bump python cattrs 23.2.3 -> 24.1.2 (@github-actions[bot])
|
||||||
|
- [#30867](https://github.com/apache/superset/pull/30867) docs: Update doc about CSV upload (@seiyab)
|
||||||
|
- [#30972](https://github.com/apache/superset/pull/30972) docs: Embedded sdk (@jpchev)
|
||||||
|
- [#30981](https://github.com/apache/superset/pull/30981) chore: publish wheels (@dimbleby)
|
||||||
|
- [#31000](https://github.com/apache/superset/pull/31000) chore(🦾): bump python flask-babel subpackage(s) (@github-actions[bot])
|
||||||
|
- [#31002](https://github.com/apache/superset/pull/31002) chore(🦾): bump python cffi 1.16.0 -> 1.17.1 (@github-actions[bot])
|
||||||
|
- [#31006](https://github.com/apache/superset/pull/31006) chore(🦾): bump python numexpr 2.10.0 -> 2.10.1 (@github-actions[bot])
|
||||||
|
- [#31021](https://github.com/apache/superset/pull/31021) chore: add unit tests for `is_mutating()` (@betodealmeida)
|
||||||
|
- [#30918](https://github.com/apache/superset/pull/30918) chore(helm): bumping app version to 4.1.1 in helm chart (@lodu)
|
||||||
|
- [#30948](https://github.com/apache/superset/pull/30948) chore: add performance information to tooltip (@eschutho)
|
||||||
|
- [#30970](https://github.com/apache/superset/pull/30970) build(deps): bump cross-spawn from 7.0.3 to 7.0.6 in /docs (@dependabot[bot])
|
||||||
|
- [#30969](https://github.com/apache/superset/pull/30969) build(deps): bump cross-spawn from 7.0.3 to 7.0.6 in /superset-frontend/cypress-base (@dependabot[bot])
|
||||||
|
- [#30818](https://github.com/apache/superset/pull/30818) chore(Accessibility): Fix accessibility for 'Show x entries' dropdown in tables (@LevisNgigi)
|
||||||
|
- [#30946](https://github.com/apache/superset/pull/30946) chore(docs): Update list of supported databases to include CrateDB (@amotl)
|
||||||
|
- [#30915](https://github.com/apache/superset/pull/30915) chore: update change log, UPDATING.md and bug-report.yml for 4.1 release (@sadpandajoe)
|
||||||
|
- [#29243](https://github.com/apache/superset/pull/29243) chore(deps): Migrate from `crate[sqlalchemy]` to `sqlalchemy-cratedb` (@amotl)
|
||||||
|
- [#30930](https://github.com/apache/superset/pull/30930) docs: add Free2Move to INTHEWILD.md (@PaoloTerzi)
|
||||||
|
- [#30925](https://github.com/apache/superset/pull/30925) chore(ci): add tai and michael to helm owners (@villebro)
|
||||||
|
- [#30730](https://github.com/apache/superset/pull/30730) refactor(input): Migrate Input component to Ant Design 5 (@msyavuz)
|
||||||
|
- [#30740](https://github.com/apache/superset/pull/30740) refactor(Avatar): Migrate Avatar to Ant Design 5 (@msyavuz)
|
||||||
|
- [#30806](https://github.com/apache/superset/pull/30806) build(deps): bump remark-gfm from 3.0.1 to 4.0.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29545](https://github.com/apache/superset/pull/29545) chore(AntD5): touchup on component imports/exports, theming ListViewCard (@rusackas)
|
||||||
|
- [#30775](https://github.com/apache/superset/pull/30775) chore: update help text copy on dataset settings (@yousoph)
|
||||||
|
- [#30792](https://github.com/apache/superset/pull/30792) build(deps): bump @algolia/client-search from 4.24.0 to 5.12.0 in /docs (@dependabot[bot])
|
||||||
|
- [#30770](https://github.com/apache/superset/pull/30770) docs: make it more clear that GLOBAL_ASYNC_QUERIES is experimental/beta (@mistercrunch)
|
||||||
|
- [#30883](https://github.com/apache/superset/pull/30883) perf: Prevent redundant calls to getRelevantDataMask (@kgabryje)
|
||||||
|
- [#30847](https://github.com/apache/superset/pull/30847) chore(GHA): Making the Linkinator STEP non-blocking, rather than the JOB. (@rusackas)
|
||||||
|
- [#30812](https://github.com/apache/superset/pull/30812) chore(FilterBar): Filter bar accessibility (@alexandrusoare)
|
||||||
|
- [#30854](https://github.com/apache/superset/pull/30854) chore: Chart context menu permissions cleanup (@kgabryje)
|
||||||
|
- [#30255](https://github.com/apache/superset/pull/30255) chore(scripts): purge node_modules folder on `npm prune` (@rusackas)
|
||||||
|
- [#30846](https://github.com/apache/superset/pull/30846) chore(actions): Bump Linkinator in superset-docs-verify.yml (@rusackas)
|
||||||
|
- [#30797](https://github.com/apache/superset/pull/30797) build(deps): bump @docsearch/react from 3.6.2 to 3.6.3 in /docs (@dependabot[bot])
|
||||||
|
- [#30796](https://github.com/apache/superset/pull/30796) build(deps): bump @mdx-js/react from 3.0.1 to 3.1.0 in /docs (@dependabot[bot])
|
||||||
|
- [#30793](https://github.com/apache/superset/pull/30793) build(deps-dev): bump @types/react from 18.3.10 to 18.3.12 in /docs (@dependabot[bot])
|
||||||
|
- [#30795](https://github.com/apache/superset/pull/30795) build(deps-dev): bump typescript from 5.6.2 to 5.6.3 in /docs (@dependabot[bot])
|
||||||
|
- [#30799](https://github.com/apache/superset/pull/30799) build(deps): bump @saucelabs/theme-github-codeblock from 0.2.3 to 0.3.0 in /docs (@dependabot[bot])
|
||||||
|
- [#30824](https://github.com/apache/superset/pull/30824) docs: Update INTHEWILD.md with 2070Health Org (@sanjaynayak007)
|
||||||
|
- [#30838](https://github.com/apache/superset/pull/30838) chore: Revert "build(deps): bump JustinBeckwith/linkinator-action from 1.10.4 to 1.11.0" (@rusackas)
|
||||||
|
- [#30832](https://github.com/apache/superset/pull/30832) build(deps-dev): bump webpack from 5.95.0 to 5.96.1 in /docs (@dependabot[bot])
|
||||||
|
- [#30822](https://github.com/apache/superset/pull/30822) docs: Update INTHEWILD.md (@Habeeb556)
|
||||||
|
- [#30835](https://github.com/apache/superset/pull/30835) build(deps-dev): bump eslint from 9.11.0 to 9.14.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30782](https://github.com/apache/superset/pull/30782) build(deps): bump uuid from 10.0.0 to 11.0.2 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30784](https://github.com/apache/superset/pull/30784) build(deps): bump winston from 3.13.0 to 3.15.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30786](https://github.com/apache/superset/pull/30786) build(deps): bump deck.gl from 9.0.28 to 9.0.34 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#30803](https://github.com/apache/superset/pull/30803) build(deps-dev): bump eslint-plugin-react from 7.33.2 to 7.37.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30781](https://github.com/apache/superset/pull/30781) build(deps-dev): bump typescript-eslint from 8.8.0 to 8.12.2 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30809](https://github.com/apache/superset/pull/30809) build(deps-dev): bump prettier-plugin-packagejson from 2.5.2 to 2.5.3 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30817](https://github.com/apache/superset/pull/30817) build(deps): bump webpack from 5.80.0 to 5.96.1 in /superset-frontend/cypress-base (@dependabot[bot])
|
||||||
|
- [#30794](https://github.com/apache/superset/pull/30794) build(deps): bump antd from 5.20.5 to 5.21.6 in /docs (@dependabot[bot])
|
||||||
|
- [#30811](https://github.com/apache/superset/pull/30811) build(deps): bump @rjsf/validator-ajv8 from 5.19.4 to 5.22.3 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30804](https://github.com/apache/superset/pull/30804) build(deps): bump ace-builds from 1.35.4 to 1.36.3 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30810](https://github.com/apache/superset/pull/30810) build(deps-dev): bump eslint-plugin-testing-library from 6.2.2 to 6.4.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30805](https://github.com/apache/superset/pull/30805) build(deps-dev): bump eslint-import-resolver-typescript from 3.6.1 to 3.6.3 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30802](https://github.com/apache/superset/pull/30802) build(deps): bump JustinBeckwith/linkinator-action from 1.10.4 to 1.11.0 (@dependabot[bot])
|
||||||
|
- [#30758](https://github.com/apache/superset/pull/30758) style(databases-upload-form): update Upload Form cosmetics (@vine-trellis)
|
||||||
|
- [#30697](https://github.com/apache/superset/pull/30697) refactor: Migrate SliceAdder to typescript (@EnxDev)
|
||||||
|
- [#30731](https://github.com/apache/superset/pull/30731) refactor(Switch): Upgrade Switch to Ant Design 5 (@alexandrusoare)
|
||||||
|
- [#30757](https://github.com/apache/superset/pull/30757) docs: Adding link to StarRocks official docs (@rusackas)
|
||||||
|
- [#30747](https://github.com/apache/superset/pull/30747) docs: Update INTHEWILD.md (@MSTartan)
|
||||||
|
- [#30753](https://github.com/apache/superset/pull/30753) docs: add Sarathi to users list (@SaiSkandaTNI)
|
||||||
|
- [#30749](https://github.com/apache/superset/pull/30749) docs: Update INTHEWILD.md with Medic (@1yuv)
|
||||||
|
- [#30355](https://github.com/apache/superset/pull/30355) chore(fe): replace deprecate aliased Jest matchers with corresponding substituents (@hainenber)
|
||||||
|
- [#30536](https://github.com/apache/superset/pull/30536) build(deps): bump cookie from 0.6.0 to 0.7.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30480](https://github.com/apache/superset/pull/30480) build(deps-dev): bump webpack from 5.94.0 to 5.95.0 in /docs (@dependabot[bot])
|
||||||
|
- [#30571](https://github.com/apache/superset/pull/30571) build(deps): bump cookie, cookie-parser and express in /superset-websocket/utils/client-ws-app (@dependabot[bot])
|
||||||
|
- [#30738](https://github.com/apache/superset/pull/30738) docs: rename Twitter to X in the INTHEWILD.md (@wugeer)
|
||||||
|
- [#30743](https://github.com/apache/superset/pull/30743) docs(templating): Replace "true" with "1 = 1" and explain its purpose (@sfirke)
|
||||||
|
- [#30709](https://github.com/apache/superset/pull/30709) build(deps-dev): bump http-proxy-middleware from 2.0.6 to 2.0.7 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30654](https://github.com/apache/superset/pull/30654) refactor: Migrate UndoRedoKeyListeners to typescript (@EnxDev)
|
||||||
|
- [#30653](https://github.com/apache/superset/pull/30653) refactor: Migration publishedStatus to typescript (@EnxDev)
|
||||||
|
- [#30683](https://github.com/apache/superset/pull/30683) build(deps): bump http-proxy-middleware from 2.0.6 to 2.0.7 in /docs (@dependabot[bot])
|
||||||
|
- [#30568](https://github.com/apache/superset/pull/30568) refactor: Migrate HeaderActionsDropdown to typescript (@EnxDev)
|
||||||
|
- [#30655](https://github.com/apache/superset/pull/30655) docs: frontend long build time (@CodeWithEmad)
|
||||||
|
- [#30662](https://github.com/apache/superset/pull/30662) refactor: Split FastVizSwitcher into multiple files for readability (@kgabryje)
|
||||||
|
- [#30609](https://github.com/apache/superset/pull/30609) refactor(Dashboard): Native filters form update endpoint (@geido)
|
||||||
|
- [#30613](https://github.com/apache/superset/pull/30613) chore: Enable suppressing default chart context menu (@kgabryje)
|
||||||
|
- [#30523](https://github.com/apache/superset/pull/30523) docs: Clarification on which command to use on which Ubuntu version. (@kkovacs)
|
||||||
|
- [#30599](https://github.com/apache/superset/pull/30599) chore(number-formatter): upgrade pretty-ms to 9.1.0 (@villebro)
|
||||||
|
- [#30572](https://github.com/apache/superset/pull/30572) build(deps): bump cookie, @applitools/eyes-storybook and express in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30357](https://github.com/apache/superset/pull/30357) chore(fe): uplift FE packages to latest version (@hainenber)
|
||||||
|
- [#30521](https://github.com/apache/superset/pull/30521) chore: enable lint PT009 'use regular assert over self.assert.\*' (@mistercrunch)
|
||||||
|
- [#28370](https://github.com/apache/superset/pull/28370) refactor: Migration of Chart to TypeScript (@EnxDev)
|
||||||
|
- [#30528](https://github.com/apache/superset/pull/30528) chore(fe): bump webpack-related packages to v5 (@hainenber)
|
||||||
|
- [#30526](https://github.com/apache/superset/pull/30526) chore(translations): Slovenian translation update (@dkrat7)
|
||||||
|
- [#30495](https://github.com/apache/superset/pull/30495) chore: add native filters to Covid Vaccines dashboard (@sadpandajoe)
|
||||||
|
- [#30463](https://github.com/apache/superset/pull/30463) build(deps-dev): bump typescript from 5.5.4 to 5.6.2 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30472](https://github.com/apache/superset/pull/30472) build(deps): bump express from 4.20.0 to 4.21.0 in /superset-websocket/utils/client-ws-app (@dependabot[bot])
|
||||||
|
- [#30496](https://github.com/apache/superset/pull/30496) docs: fix broken links in CI (@mistercrunch)
|
||||||
|
- [#30476](https://github.com/apache/superset/pull/30476) build(deps-dev): bump typescript from 5.5.4 to 5.6.2 in /docs (@dependabot[bot])
|
||||||
|
- [#30461](https://github.com/apache/superset/pull/30461) build(deps): bump @rjsf/core from 5.19.4 to 5.21.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30465](https://github.com/apache/superset/pull/30465) build(deps-dev): bump typescript-eslint from 8.6.0 to 8.8.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30466](https://github.com/apache/superset/pull/30466) build(deps-dev): bump @types/node from 22.0.2 to 22.7.4 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30467](https://github.com/apache/superset/pull/30467) build(deps): bump @types/prop-types from 15.7.5 to 15.7.13 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30469](https://github.com/apache/superset/pull/30469) build(deps): bump @types/react-loadable from 5.5.6 to 5.5.11 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30471](https://github.com/apache/superset/pull/30471) build(deps): bump debug from 4.3.6 to 4.3.7 in /superset-websocket/utils/client-ws-app (@dependabot[bot])
|
||||||
|
- [#30281](https://github.com/apache/superset/pull/30281) refactor(frontend): migrate 6 Enzyme-based tests to RTL, part 2 (@hainenber)
|
||||||
|
- [#30487](https://github.com/apache/superset/pull/30487) build(deps-dev): bump esbuild-loader from 4.1.0 to 4.2.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30460](https://github.com/apache/superset/pull/30460) build(deps-dev): bump eslint-plugin-file-progress from 1.4.0 to 1.5.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30459](https://github.com/apache/superset/pull/30459) build(deps-dev): bump @cypress/react from 5.12.5 to 8.0.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30464](https://github.com/apache/superset/pull/30464) build(deps-dev): bump @typescript-eslint/eslint-plugin from 8.6.0 to 8.8.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30477](https://github.com/apache/superset/pull/30477) build(deps): bump re-resizable from 6.9.11 to 6.10.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30473](https://github.com/apache/superset/pull/30473) build(deps-dev): bump webpack-manifest-plugin from 4.1.1 to 5.0.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30481](https://github.com/apache/superset/pull/30481) build(deps-dev): bump @types/react from 18.3.5 to 18.3.10 in /docs (@dependabot[bot])
|
||||||
|
- [#30483](https://github.com/apache/superset/pull/30483) build(deps): bump @docsearch/react from 3.6.1 to 3.6.2 in /docs (@dependabot[bot])
|
||||||
|
- [#30484](https://github.com/apache/superset/pull/30484) build(deps): bump handlebars from 4.7.7 to 4.7.8 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30485](https://github.com/apache/superset/pull/30485) build(deps-dev): bump @types/yargs from 17.0.32 to 17.0.33 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30445](https://github.com/apache/superset/pull/30445) docs(dashboard): add docs for named and index colors (@villebro)
|
||||||
|
- [#30410](https://github.com/apache/superset/pull/30410) chore: log warnings for database tables api (@eschutho)
|
||||||
|
- [#28747](https://github.com/apache/superset/pull/28747) chore: document upper bound for python lib 'holidays' >= 0.26 (@mistercrunch)
|
||||||
|
- [#30440](https://github.com/apache/superset/pull/30440) chore(Dashboard): Unblock Global Styles (@geido)
|
||||||
|
- [#30365](https://github.com/apache/superset/pull/30365) chore: add logging for dashboards/get warnings (@eschutho)
|
||||||
|
- [#30128](https://github.com/apache/superset/pull/30128) chore(View): Remove unnecessary theme view and defer basic styles (@geido)
|
||||||
|
- [#30407](https://github.com/apache/superset/pull/30407) chore: Merge description and reproduction steps in the issue template (@michael-s-molina)
|
||||||
|
- [#30305](https://github.com/apache/superset/pull/30305) chore(legacy-plugin-chart-map-box): bump supercluster to v8 (@birkskyum)
|
||||||
|
- [#30086](https://github.com/apache/superset/pull/30086) build(deps): update @emotion/react requirement from ^11.4.1 to ^11.13.3 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#27827](https://github.com/apache/superset/pull/27827) build(deps): bump @emotion/react from 11.4.1 to 11.11.4 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#28346](https://github.com/apache/superset/pull/28346) refactor: Migration of AnnotationLayerControl to TypeScript (@EnxDev)
|
||||||
|
- [#30251](https://github.com/apache/superset/pull/30251) build(deps-dev): bump sinon from 18.0.0 to 18.0.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30315](https://github.com/apache/superset/pull/30315) docs: Corrected Dremio connection string (@doernemt)
|
||||||
|
- [#30352](https://github.com/apache/superset/pull/30352) chore(docs): fix an agreement error in caching docs (@sfirke)
|
||||||
|
- [#30346](https://github.com/apache/superset/pull/30346) docs: add HANA database logo in README.md (@axuew)
|
||||||
|
- [#28290](https://github.com/apache/superset/pull/28290) build(deps): update dompurify requirement from ^3.1.0 to ^3.1.2 in /superset-frontend/plugins/legacy-preset-chart-nvd3 (@dependabot[bot])
|
||||||
|
- [#30089](https://github.com/apache/superset/pull/30089) build(deps-dev): bump @storybook/react-webpack5 from 8.1.11 to 8.2.9 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#30359](https://github.com/apache/superset/pull/30359) build(websocket): upgrade ESLint to v9 (@hainenber)
|
||||||
|
- [#30084](https://github.com/apache/superset/pull/30084) build(deps): bump deck.gl from 9.0.24 to 9.0.28 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#30300](https://github.com/apache/superset/pull/30300) build(deps): bump dompurify from 3.1.0 to 3.1.3 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30247](https://github.com/apache/superset/pull/30247) build(deps): bump path-to-regexp from 1.8.0 to 1.9.0 in /superset-frontend/cypress-base (@dependabot[bot])
|
||||||
|
- [#30337](https://github.com/apache/superset/pull/30337) docs: sql-templating (@torgge)
|
||||||
|
- [#30333](https://github.com/apache/superset/pull/30333) docs: Update cache.mdx, add needed space (@varfigstar)
|
||||||
|
- [#30123](https://github.com/apache/superset/pull/30123) chore: correct a typo (@dl57934)
|
||||||
|
- [#30262](https://github.com/apache/superset/pull/30262) chore: bump cypress to v 11 (@eschutho)
|
||||||
|
- [#30313](https://github.com/apache/superset/pull/30313) chore(UPDATING.md): Add item to UPDATING describing translations build flag (@martyngigg)
|
||||||
|
- [#30227](https://github.com/apache/superset/pull/30227) build(deps): bump express from 4.19.2 to 4.20.0 in /docs (@dependabot[bot])
|
||||||
|
- [#30032](https://github.com/apache/superset/pull/30032) docs: HTML embedding of charts/dashboards without authentication (@lindner-tj)
|
||||||
|
- [#30254](https://github.com/apache/superset/pull/30254) style(explore): clarify ambiguously named "sort by" field (@sfirke)
|
||||||
|
- [#30321](https://github.com/apache/superset/pull/30321) chore(explore): Medium font weight for section headers (@kasiazjc)
|
||||||
|
- [#30261](https://github.com/apache/superset/pull/30261) chore: remove redundant code (@villebro)
|
||||||
|
- [#25910](https://github.com/apache/superset/pull/25910) chore(deps): bump dremio deps (@gnought)
|
||||||
|
- [#30268](https://github.com/apache/superset/pull/30268) docs: Update kubernetes.mdx (@nyandajr)
|
||||||
|
- [#29771](https://github.com/apache/superset/pull/29771) chore(docker): move mysql os-level deps (GPL) to dev image only (@mistercrunch)
|
||||||
|
- [#30151](https://github.com/apache/superset/pull/30151) refactor(frontend): migrate 6 tests from Enzyme to RTL (@hainenber)
|
||||||
|
- [#30253](https://github.com/apache/superset/pull/30253) chore(build): remove extraneous prettier step in superset-frontend CI (@hainenber)
|
||||||
|
- [#30257](https://github.com/apache/superset/pull/30257) build(ci): make linkinator advisory (@rusackas)
|
||||||
|
- [#30242](https://github.com/apache/superset/pull/30242) build(deps, deps-dev): upgrade major versions for dependencies of `@superset/embedded-sdk` (@hainenber)
|
||||||
|
- [#30228](https://github.com/apache/superset/pull/30228) build(deps): bump send and express in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30229](https://github.com/apache/superset/pull/30229) build(deps): bump serve-static and express in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30232](https://github.com/apache/superset/pull/30232) refactor(explore): Migrate MetricsControl test suite to RTL (@rtexelm)
|
||||||
|
- [#30226](https://github.com/apache/superset/pull/30226) build(deps): bump serve-static and express in /superset-websocket/utils/client-ws-app (@dependabot[bot])
|
||||||
|
- [#30225](https://github.com/apache/superset/pull/30225) build(deps): bump send and express in /superset-websocket/utils/client-ws-app (@dependabot[bot])
|
||||||
|
- [#30091](https://github.com/apache/superset/pull/30091) build(deps): update @babel/runtime requirement from ^7.1.2 to ^7.25.6 in /superset-frontend/packages/superset-ui-core (@dependabot[bot])
|
||||||
|
- [#25452](https://github.com/apache/superset/pull/25452) chore(frontend): Spelling (@jsoref)
|
||||||
|
- [#30103](https://github.com/apache/superset/pull/30103) build(deps-dev): update @babel/types requirement from ^7.25.2 to ^7.25.6 in /superset-frontend/plugins/plugin-chart-pivot-table (@dependabot[bot])
|
||||||
|
- [#30199](https://github.com/apache/superset/pull/30199) chore(docs): Removing dead link from INTHEWILD.md (@rusackas)
|
||||||
|
- [#30101](https://github.com/apache/superset/pull/30101) build(deps-dev): bump @types/react from 18.3.3 to 18.3.5 in /docs (@dependabot[bot])
|
||||||
|
- [#30036](https://github.com/apache/superset/pull/30036) build(deps-dev): bump webpack from 5.93.0 to 5.94.0 in /docs (@dependabot[bot])
|
||||||
|
- [#30179](https://github.com/apache/superset/pull/30179) build(deps): bump antd from 5.20.0 to 5.20.5 in /docs (@dependabot[bot])
|
||||||
|
- [#30166](https://github.com/apache/superset/pull/30166) build(deps): bump @types/node from 20.12.7 to 22.5.4 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30097](https://github.com/apache/superset/pull/30097) build(deps-dev): bump typescript from 4.9.5 to 5.5.4 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30088](https://github.com/apache/superset/pull/30088) build(deps): bump core-js from 3.37.1 to 3.38.1 in /superset-frontend/packages/superset-ui-demo (@dependabot[bot])
|
||||||
|
- [#29963](https://github.com/apache/superset/pull/29963) build(dev-deps, deps): upgrade major versions for FE deps (@hainenber)
|
||||||
|
- [#30167](https://github.com/apache/superset/pull/30167) chore(docs): bump docusaurus from 3.4.0 to 3.5.2 (@villebro)
|
||||||
|
- [#30094](https://github.com/apache/superset/pull/30094) build(deps): bump ws and @types/ws in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30105](https://github.com/apache/superset/pull/30105) build(deps-dev): bump @docusaurus/module-type-aliases from 3.4.0 to 3.5.2 in /docs (@dependabot[bot])
|
||||||
|
- [#30111](https://github.com/apache/superset/pull/30111) build(deps): bump react-ultimate-pagination and @types/react-ultimate-pagination in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30106](https://github.com/apache/superset/pull/30106) build(deps): bump prism-react-renderer from 2.3.1 to 2.4.0 in /docs (@dependabot[bot])
|
||||||
|
- [#30107](https://github.com/apache/superset/pull/30107) build(deps-dev): bump @docusaurus/tsconfig from 3.4.0 to 3.5.2 in /docs (@dependabot[bot])
|
||||||
|
- [#30108](https://github.com/apache/superset/pull/30108) build(deps): bump react-svg-pan-zoom from 3.12.1 to 3.13.1 in /docs (@dependabot[bot])
|
||||||
|
- [#30095](https://github.com/apache/superset/pull/30095) build(deps-dev): bump ts-jest from 29.1.5 to 29.2.5 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30096](https://github.com/apache/superset/pull/30096) build(deps): bump uuid and @types/uuid in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#30143](https://github.com/apache/superset/pull/30143) build(deps): bump cryptography from 42.0.7 to 42.0.8 (@dependabot[bot])
|
||||||
|
- [#30118](https://github.com/apache/superset/pull/30118) build(deps-dev): bump prettier-plugin-packagejson from 2.4.10 to 2.5.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30127](https://github.com/apache/superset/pull/30127) docs: Fixing missing 'c' in installation guide documentation (@JordanTB)
|
||||||
|
- [#30155](https://github.com/apache/superset/pull/30155) chore(docs): replace http with https (@villebro)
|
||||||
|
- [#30072](https://github.com/apache/superset/pull/30072) chore(tests): skip extremely flaky gaq test (@villebro)
|
||||||
|
- [#30153](https://github.com/apache/superset/pull/30153) chore(docs): update xendit link (@villebro)
|
||||||
|
- [#30021](https://github.com/apache/superset/pull/30021) chore: accelerate docker compose by skipping frontend build (@mistercrunch)
|
||||||
|
- [#30090](https://github.com/apache/superset/pull/30090) build(deps): bump aws-actions/amazon-ecs-deploy-task-definition from 1 to 2 (@dependabot[bot])
|
||||||
|
- [#30037](https://github.com/apache/superset/pull/30037) build(deps-dev): bump webpack from 5.76.0 to 5.94.0 in /superset-embedded-sdk (@dependabot[bot])
|
||||||
|
- [#30038](https://github.com/apache/superset/pull/30038) build(deps-dev): bump webpack from 5.93.0 to 5.94.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30102](https://github.com/apache/superset/pull/30102) build(deps-dev): bump eslint-plugin-react-prefer-function-component from 0.0.7 to 3.3.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30117](https://github.com/apache/superset/pull/30117) build(deps): bump d3-time-format and @types/d3-time-format in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30116](https://github.com/apache/superset/pull/30116) build(deps-dev): bump eslint-plugin-no-only-tests from 2.4.0 to 3.3.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#30027](https://github.com/apache/superset/pull/30027) refactor(databases): Create constants.ts, move interface to types.ts (@rtexelm)
|
||||||
|
- [#30030](https://github.com/apache/superset/pull/30030) chore(docs): docker instructions use `docker compose` instead of the deprecated `docker-compose` (@rusackas)
|
||||||
|
- [#30057](https://github.com/apache/superset/pull/30057) chore(docs): clean up a few md errors (@villebro)
|
||||||
|
- [#29586](https://github.com/apache/superset/pull/29586) chore(translations): Arabic translations (@abdilra7eem)
|
||||||
|
- [#30011](https://github.com/apache/superset/pull/30011) chore(deps): bump core-js (@rusackas)
|
||||||
|
- [#30007](https://github.com/apache/superset/pull/30007) chore(deps): bump cross-env (@rusackas)
|
||||||
|
- [#30008](https://github.com/apache/superset/pull/30008) build(deps): bump micromatch from 4.0.4 to 4.0.8 in /superset-frontend/cypress-base (@dependabot[bot])
|
||||||
|
- [#30009](https://github.com/apache/superset/pull/30009) build(deps): bump micromatch from 4.0.5 to 4.0.8 in /docs (@dependabot[bot])
|
||||||
|
- [#27832](https://github.com/apache/superset/pull/27832) build(deps): bump remark-gfm from 3.0.1 to 4.0.0 in /superset-frontend/packages/superset-ui-core (@dependabot[bot])
|
||||||
|
- [#28292](https://github.com/apache/superset/pull/28292) build(deps): bump d3-time from 1.1.0 to 3.1.0 in /superset-frontend/packages/superset-ui-core (@dependabot[bot])
|
||||||
|
- [#29990](https://github.com/apache/superset/pull/29990) chore(init): adding link to secret key instructions (@rusackas)
|
||||||
|
- [#29947](https://github.com/apache/superset/pull/29947) build(deps): bump ws and @applitools/eyes-cypress in /superset-frontend/cypress-base (@dependabot[bot])
|
||||||
|
- [#29988](https://github.com/apache/superset/pull/29988) build(node): Bumping to Node 20 (@rusackas)
|
||||||
|
- [#25454](https://github.com/apache/superset/pull/25454) chore(tests): Spelling (@jsoref)
|
||||||
|
- [#29970](https://github.com/apache/superset/pull/29970) docs: improve pre-commit docs and discoverability when CI fails (@mistercrunch)
|
||||||
|
- [#29964](https://github.com/apache/superset/pull/29964) build(deps-dev): bump eslint-plugin-cypress from 2.11.2 to 3.4.0 in /superset-frontend + corresponding refactor (@hainenber)
|
||||||
|
- [#29969](https://github.com/apache/superset/pull/29969) chore(antd): straightening out button import paths (@rusackas)
|
||||||
|
- [#29948](https://github.com/apache/superset/pull/29948) chore(deps): bump micromatch (@rusackas)
|
||||||
|
- [#29952](https://github.com/apache/superset/pull/29952) chore: add additional code owners to migrations (@sadpandajoe)
|
||||||
|
- [#29945](https://github.com/apache/superset/pull/29945) build(deps): bump axios from 1.6.8 to 1.7.4 in /docs (@dependabot[bot])
|
||||||
|
- [#29949](https://github.com/apache/superset/pull/29949) build(deps-dev): bump axios from 1.7.3 to 1.7.4 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29946](https://github.com/apache/superset/pull/29946) build(deps-dev): bump axios from 1.6.0 to 1.7.4 in /superset-embedded-sdk (@dependabot[bot])
|
||||||
|
- [#29904](https://github.com/apache/superset/pull/29904) chore: Changes the migrations owners (@michael-s-molina)
|
||||||
|
- [#29868](https://github.com/apache/superset/pull/29868) chore: remove useless GitHub action (@mistercrunch)
|
||||||
|
- [#29869](https://github.com/apache/superset/pull/29869) chore: remove useless GitHub action required check (@mistercrunch)
|
||||||
|
- [#29859](https://github.com/apache/superset/pull/29859) chore(deps): bumping underscore via npm override (@rusackas)
|
||||||
|
- [#29876](https://github.com/apache/superset/pull/29876) chore(docs): reorder fs users (@villebro)
|
||||||
|
- [#29841](https://github.com/apache/superset/pull/29841) chore(deps): bumping jquery (@rusackas)
|
||||||
|
- [#29870](https://github.com/apache/superset/pull/29870) docs: add unit to companies list (@amitmiran137)
|
||||||
|
- [#29652](https://github.com/apache/superset/pull/29652) chore(build): uplift several outdated frontend packages (@hainenber)
|
||||||
|
- [#29866](https://github.com/apache/superset/pull/29866) chore: pre-matrixify pre-commit check (@mistercrunch)
|
||||||
|
- [#29844](https://github.com/apache/superset/pull/29844) chore(cleanup): Removing bootstrap (experimental) (@rusackas)
|
||||||
|
- [#29863](https://github.com/apache/superset/pull/29863) chore: describe timezone issue with alerts and reports scheduler in UPDATING.md (@danielli-ziprecruiter)
|
||||||
|
- [#29855](https://github.com/apache/superset/pull/29855) perf: Lazy load rehype-raw and react-markdown (@kgabryje)
|
||||||
|
- [#29788](https://github.com/apache/superset/pull/29788) perf: Remove antd-with-locales import (@kgabryje)
|
||||||
|
- [#29791](https://github.com/apache/superset/pull/29791) perf: Lazy load moment-timezone (@kgabryje)
|
||||||
|
- [#29808](https://github.com/apache/superset/pull/29808) build(deps-dev): update @babel/types requirement from ^7.24.5 to ^7.25.2 in /superset-frontend/plugins/plugin-chart-pivot-table (@dependabot[bot])
|
||||||
|
- [#29838](https://github.com/apache/superset/pull/29838) chore(deps): npm audit fix results (@rusackas)
|
||||||
|
- [#28294](https://github.com/apache/superset/pull/28294) build(deps): bump react-bootstrap-slider from 2.1.5 to 3.0.0 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#29756](https://github.com/apache/superset/pull/29756) build(deps): bump react-diff-viewer-continued from 3.2.5 to 3.4.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29759](https://github.com/apache/superset/pull/29759) build(deps-dev): bump eslint-plugin-file-progress from 1.2.0 to 1.4.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29812](https://github.com/apache/superset/pull/29812) build(deps): bump @fontsource/inter from 5.0.19 to 5.0.20 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29813](https://github.com/apache/superset/pull/29813) build(deps): bump chrono-node from 2.7.5 to 2.7.6 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29815](https://github.com/apache/superset/pull/29815) build(deps): bump mustache from 2.3.2 to 4.2.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29816](https://github.com/apache/superset/pull/29816) build(deps-dev): bump @types/react-syntax-highlighter from 15.5.11 to 15.5.13 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29820](https://github.com/apache/superset/pull/29820) build(deps-dev): bump style-loader from 3.3.4 to 4.0.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29821](https://github.com/apache/superset/pull/29821) build(deps): bump memoize-one from 5.1.1 to 5.2.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29809](https://github.com/apache/superset/pull/29809) build(deps-dev): bump @types/jest from 27.0.2 to 29.5.12 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#29811](https://github.com/apache/superset/pull/29811) build(deps-dev): bump @types/node from 22.0.0 to 22.0.2 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#29758](https://github.com/apache/superset/pull/29758) build(deps): bump rimraf from 3.0.2 to 6.0.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29787](https://github.com/apache/superset/pull/29787) perf: Antd icons tree shaking (@kgabryje)
|
||||||
|
- [#29796](https://github.com/apache/superset/pull/29796) perf: Lazy load React Ace (@kgabryje)
|
||||||
|
- [#29792](https://github.com/apache/superset/pull/29792) chore: deleting vestigial EMAIL_NOTIFICATIONS (@rusackas)
|
||||||
|
- [#29673](https://github.com/apache/superset/pull/29673) style: remove uppercase from labels, buttons, tabs to align with design system (@mistercrunch)
|
||||||
|
- [#29755](https://github.com/apache/superset/pull/29755) build(deps): bump @types/lodash from 4.17.0 to 4.17.7 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29765](https://github.com/apache/superset/pull/29765) build(deps-dev): bump webpack from 5.89.0 to 5.93.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29794](https://github.com/apache/superset/pull/29794) chore(deps): bump dayjs to unblock CI. (@rusackas)
|
||||||
|
- [#29790](https://github.com/apache/superset/pull/29790) chore(docs): remove mention of MariaDB in dev environment setup (@sfirke)
|
||||||
|
- [#29738](https://github.com/apache/superset/pull/29738) build(deps-dev): bump @types/node from 20.13.0 to 22.0.0 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#29748](https://github.com/apache/superset/pull/29748) build(deps): bump @ant-design/icons from 5.3.7 to 5.4.0 in /docs (@dependabot[bot])
|
||||||
|
- [#29747](https://github.com/apache/superset/pull/29747) build(deps-dev): bump webpack from 5.92.1 to 5.93.0 in /docs (@dependabot[bot])
|
||||||
|
- [#29427](https://github.com/apache/superset/pull/29427) chore(deps): bump abortcontroller-polyfill from 1.2.1 to 1.7.5 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#28820](https://github.com/apache/superset/pull/28820) chore(deps): bump d3-hierarchy from 1.1.9 to 3.1.2 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29740](https://github.com/apache/superset/pull/29740) build(deps-dev): update @types/lodash requirement from ^4.17.6 to ^4.17.7 in /superset-frontend/plugins/plugin-chart-handlebars (@dependabot[bot])
|
||||||
|
- [#29743](https://github.com/apache/superset/pull/29743) build(deps): update underscore requirement from ^1.13.6 to ^1.13.7 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#29763](https://github.com/apache/superset/pull/29763) build(deps-dev): bump history from 4.10.1 to 5.3.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29760](https://github.com/apache/superset/pull/29760) build(deps-dev): bump ts-loader from 7.0.5 to 9.5.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#28297](https://github.com/apache/superset/pull/28297) build(deps-dev): update @babel/types requirement from ^7.24.0 to ^7.24.5 in /superset-frontend/plugins/plugin-chart-pivot-table (@dependabot[bot])
|
||||||
|
- [#29767](https://github.com/apache/superset/pull/29767) build(deps): bump fast-xml-parser from 4.2.7 to 4.4.1 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29739](https://github.com/apache/superset/pull/29739) build(deps): bump debug from 4.3.5 to 4.3.6 in /superset-websocket/utils/client-ws-app (@dependabot[bot])
|
||||||
|
- [#29742](https://github.com/apache/superset/pull/29742) build(deps-dev): bump prettier from 3.2.5 to 3.3.3 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#29744](https://github.com/apache/superset/pull/29744) build(deps): bump deck.gl from 9.0.21 to 9.0.24 in /superset-frontend/plugins/legacy-preset-chart-deckgl (@dependabot[bot])
|
||||||
|
- [#29746](https://github.com/apache/superset/pull/29746) build(deps): bump @types/lodash from 4.17.4 to 4.17.7 in /superset-websocket (@dependabot[bot])
|
||||||
|
- [#29750](https://github.com/apache/superset/pull/29750) build(deps-dev): bump typescript from 5.5.2 to 5.5.4 in /docs (@dependabot[bot])
|
||||||
|
- [#29751](https://github.com/apache/superset/pull/29751) build(deps): bump @docsearch/react from 3.6.0 to 3.6.1 in /docs (@dependabot[bot])
|
||||||
|
- [#29753](https://github.com/apache/superset/pull/29753) build(deps-dev): bump mini-css-extract-plugin from 2.7.6 to 2.9.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29754](https://github.com/apache/superset/pull/29754) build(deps-dev): bump @svgr/webpack from 8.0.1 to 8.1.0 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29762](https://github.com/apache/superset/pull/29762) build(deps): bump ace-builds from 1.4.14 to 1.35.4 in /superset-frontend (@dependabot[bot])
|
||||||
|
- [#29731](https://github.com/apache/superset/pull/29731) chore(build): pin Storybook-related packages to 8.1.11 as further v8+ version requires React 18 (@hainenber)
|
||||||
|
- [#26557](https://github.com/apache/superset/pull/26557) build(deps-dev): bump thread-loader from 3.0.4 to 4.0.2 in /superset-frontend (@dependabot[bot])
|
||||||
@@ -16,9 +16,23 @@
|
|||||||
specific language governing permissions and limitations
|
specific language governing permissions and limitations
|
||||||
under the License.
|
under the License.
|
||||||
-->
|
-->
|
||||||
|
# Contributing to Apache Superset
|
||||||
|
|
||||||
Contributions are welcome and are greatly appreciated! Every
|
Contributions are welcome and are greatly appreciated! Every
|
||||||
little bit helps, and credit will always be given.
|
little bit helps, and credit will always be given.
|
||||||
|
|
||||||
All matters related to contributions have moved to [this section of
|
## Developer Portal
|
||||||
the official Superset documentation](https://superset.apache.org/docs/contributing/). Source for the documentation is
|
|
||||||
[located here](https://github.com/apache/superset/tree/master/docs/docs).
|
All developer and contribution documentation has moved to the Apache Superset Developer Portal:
|
||||||
|
|
||||||
|
**[📚 View the Developer Portal →](https://superset.apache.org/developer_portal/)**
|
||||||
|
|
||||||
|
The Developer Portal includes comprehensive guides for:
|
||||||
|
- [Contributing Overview](https://superset.apache.org/developer_portal/contributing/overview)
|
||||||
|
- [Development Setup](https://superset.apache.org/developer_portal/contributing/development-setup)
|
||||||
|
- [Submitting Pull Requests](https://superset.apache.org/developer_portal/contributing/submitting-pr)
|
||||||
|
- [Contribution Guidelines](https://superset.apache.org/developer_portal/contributing/guidelines)
|
||||||
|
- [Code Review Process](https://superset.apache.org/developer_portal/contributing/code-review)
|
||||||
|
- [Development How-tos](https://superset.apache.org/developer_portal/contributing/howtos)
|
||||||
|
|
||||||
|
Source for the Developer Portal documentation is [located here](https://github.com/apache/superset/tree/master/docs/developer_portal).
|
||||||
|
|||||||
383
Dockerfile
383
Dockerfile
@@ -18,47 +18,56 @@
|
|||||||
######################################################################
|
######################################################################
|
||||||
# Node stage to deal with static asset construction
|
# Node stage to deal with static asset construction
|
||||||
######################################################################
|
######################################################################
|
||||||
ARG PY_VER=3.10-slim-bookworm
|
ARG PY_VER=3.11.14-slim-trixie
|
||||||
|
|
||||||
# if BUILDPLATFORM is null, set it to 'amd64' (or leave as is otherwise).
|
# If BUILDPLATFORM is null, set it to 'amd64' (or leave as is otherwise).
|
||||||
ARG BUILDPLATFORM=${BUILDPLATFORM:-amd64}
|
ARG BUILDPLATFORM=${BUILDPLATFORM:-amd64}
|
||||||
FROM --platform=${BUILDPLATFORM} node:20-bullseye-slim AS superset-node
|
|
||||||
|
|
||||||
ARG NPM_BUILD_CMD="build"
|
# Include translations in the final build
|
||||||
|
|
||||||
# Include translations in the final build. The default supports en only to
|
|
||||||
# reduce complexity and weight for those only using en
|
|
||||||
ARG BUILD_TRANSLATIONS="false"
|
ARG BUILD_TRANSLATIONS="false"
|
||||||
|
|
||||||
# Used by docker-compose to skip the frontend build,
|
# Build arg to pre-populate examples DuckDB file
|
||||||
# in dev we mount the repo and build the frontend inside docker
|
ARG LOAD_EXAMPLES_DUCKDB="false"
|
||||||
ARG DEV_MODE="false"
|
|
||||||
|
|
||||||
# Include headless browsers? Allows for alerts, reports & thumbnails, but bloats the images
|
######################################################################
|
||||||
ARG INCLUDE_CHROMIUM="true"
|
# superset-node-ci used as a base for building frontend assets and CI
|
||||||
ARG INCLUDE_FIREFOX="false"
|
######################################################################
|
||||||
|
FROM --platform=${BUILDPLATFORM} node:20-trixie-slim AS superset-node-ci
|
||||||
|
ARG BUILD_TRANSLATIONS
|
||||||
|
ENV BUILD_TRANSLATIONS=${BUILD_TRANSLATIONS}
|
||||||
|
ARG DEV_MODE="false" # Skip frontend build in dev mode
|
||||||
|
ENV DEV_MODE=${DEV_MODE}
|
||||||
|
|
||||||
# Somehow we need python3 + build-essential on this side of the house to install node-gyp
|
COPY docker/ /app/docker/
|
||||||
RUN apt-get update -qq \
|
# Arguments for build configuration
|
||||||
&& apt-get install \
|
ARG NPM_BUILD_CMD="build"
|
||||||
-yqq --no-install-recommends \
|
|
||||||
build-essential \
|
|
||||||
python3 \
|
|
||||||
zstd
|
|
||||||
|
|
||||||
|
# Install system dependencies required for node-gyp
|
||||||
|
RUN /app/docker/apt-install.sh build-essential python3 zstd
|
||||||
|
|
||||||
|
# Define environment variables for frontend build
|
||||||
ENV BUILD_CMD=${NPM_BUILD_CMD} \
|
ENV BUILD_CMD=${NPM_BUILD_CMD} \
|
||||||
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||||
# NPM ci first, as to NOT invalidate previous steps except for when package.json changes
|
|
||||||
|
|
||||||
RUN --mount=type=bind,target=/frontend-mem-nag.sh,src=./docker/frontend-mem-nag.sh \
|
# Run the frontend memory monitoring script
|
||||||
/frontend-mem-nag.sh
|
RUN /app/docker/frontend-mem-nag.sh
|
||||||
|
|
||||||
WORKDIR /app/superset-frontend
|
WORKDIR /app/superset-frontend
|
||||||
# Creating empty folders to avoid errors when running COPY later on
|
|
||||||
RUN mkdir -p /app/superset/static/assets
|
# Create necessary folders to avoid errors in subsequent steps
|
||||||
RUN --mount=type=bind,target=./package.json,src=./superset-frontend/package.json \
|
RUN mkdir -p /app/superset/static/assets \
|
||||||
--mount=type=bind,target=./package-lock.json,src=./superset-frontend/package-lock.json \
|
/app/superset/translations
|
||||||
if [ "$DEV_MODE" = "false" ]; then \
|
|
||||||
|
# Mount package files and install dependencies if not in dev mode
|
||||||
|
# NOTE: we mount packages and plugins as they are referenced in package.json as workspaces
|
||||||
|
# ideally we'd COPY only their package.json. Here npm ci will be cached as long
|
||||||
|
# as the full content of these folders don't change, yielding a decent cache reuse rate.
|
||||||
|
# Note that it's not possible to selectively COPY or mount using blobs.
|
||||||
|
RUN --mount=type=bind,source=./superset-frontend/package.json,target=./package.json \
|
||||||
|
--mount=type=bind,source=./superset-frontend/package-lock.json,target=./package-lock.json \
|
||||||
|
--mount=type=cache,target=/root/.cache \
|
||||||
|
--mount=type=cache,target=/root/.npm \
|
||||||
|
if [ "${DEV_MODE}" = "false" ]; then \
|
||||||
npm ci; \
|
npm ci; \
|
||||||
else \
|
else \
|
||||||
echo "Skipping 'npm ci' in dev mode"; \
|
echo "Skipping 'npm ci' in dev mode"; \
|
||||||
@@ -66,161 +75,225 @@ RUN --mount=type=bind,target=./package.json,src=./superset-frontend/package.json
|
|||||||
|
|
||||||
# Runs the webpack build process
|
# Runs the webpack build process
|
||||||
COPY superset-frontend /app/superset-frontend
|
COPY superset-frontend /app/superset-frontend
|
||||||
# This copies the .po files needed for translation
|
|
||||||
RUN mkdir -p /app/superset/translations
|
######################################################################
|
||||||
COPY superset/translations /app/superset/translations
|
# superset-node is used for compiling frontend assets
|
||||||
RUN if [ "$DEV_MODE" = "false" ]; then \
|
######################################################################
|
||||||
BUILD_TRANSLATIONS=$BUILD_TRANSLATIONS npm run ${BUILD_CMD}; \
|
FROM superset-node-ci AS superset-node
|
||||||
|
|
||||||
|
# Build the frontend if not in dev mode
|
||||||
|
RUN --mount=type=cache,target=/root/.npm \
|
||||||
|
if [ "${DEV_MODE}" = "false" ]; then \
|
||||||
|
echo "Running 'npm run ${BUILD_CMD}'"; \
|
||||||
|
npm run ${BUILD_CMD}; \
|
||||||
else \
|
else \
|
||||||
echo "Skipping 'npm run ${BUILD_CMD}' in dev mode"; \
|
echo "Skipping 'npm run ${BUILD_CMD}' in dev mode"; \
|
||||||
fi
|
fi;
|
||||||
|
|
||||||
|
# Copy translation files
|
||||||
|
COPY superset/translations /app/superset/translations
|
||||||
|
|
||||||
# Compiles .json files from the .po files, then deletes the .po files
|
# Build translations if enabled, then cleanup localization files
|
||||||
RUN if [ "$BUILD_TRANSLATIONS" = "true" ]; then \
|
RUN if [ "${BUILD_TRANSLATIONS}" = "true" ]; then \
|
||||||
npm run build-translation; \
|
npm run build-translation; \
|
||||||
else \
|
fi; \
|
||||||
echo "Skipping translations as requested by build flag"; \
|
rm -rf /app/superset/translations/*/*/*.[po,mo];
|
||||||
fi
|
|
||||||
RUN rm /app/superset/translations/*/LC_MESSAGES/*.po
|
|
||||||
RUN rm /app/superset/translations/messages.pot
|
|
||||||
|
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Base python layer
|
||||||
|
######################################################################
|
||||||
FROM python:${PY_VER} AS python-base
|
FROM python:${PY_VER} AS python-base
|
||||||
|
|
||||||
|
ARG SUPERSET_HOME="/app/superset_home"
|
||||||
|
ENV SUPERSET_HOME=${SUPERSET_HOME}
|
||||||
|
|
||||||
|
RUN mkdir -p ${SUPERSET_HOME}
|
||||||
|
RUN useradd --user-group -d ${SUPERSET_HOME} -m --no-log-init --shell /bin/bash superset \
|
||||||
|
&& chmod -R 1777 ${SUPERSET_HOME} \
|
||||||
|
&& chown -R superset:superset ${SUPERSET_HOME}
|
||||||
|
|
||||||
|
# Some bash scripts needed throughout the layers
|
||||||
|
COPY --chmod=755 docker/*.sh /app/docker/
|
||||||
|
|
||||||
|
RUN pip install --no-cache-dir --upgrade uv
|
||||||
|
|
||||||
|
# Using uv as it's faster/simpler than pip
|
||||||
|
RUN uv venv /app/.venv
|
||||||
|
ENV PATH="/app/.venv/bin:${PATH}"
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Python translation compiler layer
|
||||||
|
######################################################################
|
||||||
|
FROM python-base AS python-translation-compiler
|
||||||
|
|
||||||
|
ARG BUILD_TRANSLATIONS
|
||||||
|
ENV BUILD_TRANSLATIONS=${BUILD_TRANSLATIONS}
|
||||||
|
|
||||||
|
# Install Python dependencies using docker/pip-install.sh
|
||||||
|
COPY requirements/translations.txt requirements/
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
|
. /app/.venv/bin/activate && /app/docker/pip-install.sh --requires-build-essential -r requirements/translations.txt
|
||||||
|
|
||||||
|
COPY superset/translations/ /app/translations_mo/
|
||||||
|
RUN if [ "${BUILD_TRANSLATIONS}" = "true" ]; then \
|
||||||
|
pybabel compile -d /app/translations_mo | true; \
|
||||||
|
fi; \
|
||||||
|
rm -f /app/translations_mo/*/*/*.[po,json]
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Python APP common layer
|
||||||
|
######################################################################
|
||||||
|
FROM python-base AS python-common
|
||||||
|
|
||||||
|
# Re-declare build arg to receive it in this stage
|
||||||
|
ARG LOAD_EXAMPLES_DUCKDB
|
||||||
|
|
||||||
|
ENV SUPERSET_HOME="/app/superset_home" \
|
||||||
|
HOME="/app/superset_home" \
|
||||||
|
SUPERSET_ENV="production" \
|
||||||
|
FLASK_APP="superset.app:create_app()" \
|
||||||
|
PYTHONPATH="/app/pythonpath" \
|
||||||
|
SUPERSET_PORT="8088"
|
||||||
|
|
||||||
|
# Copy the entrypoints, make them executable in userspace
|
||||||
|
COPY --chmod=755 docker/entrypoints /app/docker/entrypoints
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
# Set up necessary directories and user
|
||||||
|
RUN mkdir -p \
|
||||||
|
${PYTHONPATH} \
|
||||||
|
superset/static \
|
||||||
|
requirements \
|
||||||
|
superset-frontend \
|
||||||
|
apache_superset.egg-info \
|
||||||
|
requirements \
|
||||||
|
&& touch superset/static/version_info.json
|
||||||
|
|
||||||
|
# Install Playwright and optionally setup headless browsers
|
||||||
|
ENV PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers
|
||||||
|
|
||||||
|
ARG INCLUDE_CHROMIUM="false"
|
||||||
|
ARG INCLUDE_FIREFOX="false"
|
||||||
|
RUN --mount=type=cache,target=${SUPERSET_HOME}/.cache/uv \
|
||||||
|
if [ "${INCLUDE_CHROMIUM}" = "true" ] || [ "${INCLUDE_FIREFOX}" = "true" ]; then \
|
||||||
|
uv pip install playwright && \
|
||||||
|
playwright install-deps && \
|
||||||
|
if [ "${INCLUDE_CHROMIUM}" = "true" ]; then playwright install chromium; fi && \
|
||||||
|
if [ "${INCLUDE_FIREFOX}" = "true" ]; then playwright install firefox; fi; \
|
||||||
|
else \
|
||||||
|
echo "Skipping browser installation"; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy required files for Python build
|
||||||
|
COPY pyproject.toml setup.py MANIFEST.in README.md ./
|
||||||
|
COPY superset-frontend/package.json superset-frontend/
|
||||||
|
COPY scripts/check-env.py scripts/
|
||||||
|
|
||||||
|
# keeping for backward compatibility
|
||||||
|
COPY --chmod=755 ./docker/entrypoints/run-server.sh /usr/bin/
|
||||||
|
|
||||||
|
# Some debian libs
|
||||||
|
RUN /app/docker/apt-install.sh \
|
||||||
|
curl \
|
||||||
|
libsasl2-dev \
|
||||||
|
libsasl2-modules-gssapi-mit \
|
||||||
|
libpq-dev \
|
||||||
|
libecpg-dev \
|
||||||
|
libldap2-dev
|
||||||
|
|
||||||
|
# Pre-load examples DuckDB file if requested
|
||||||
|
RUN if [ "$LOAD_EXAMPLES_DUCKDB" = "true" ]; then \
|
||||||
|
mkdir -p /app/data && \
|
||||||
|
echo "Downloading pre-built examples.duckdb..." && \
|
||||||
|
curl -L -o /app/data/examples.duckdb \
|
||||||
|
"https://raw.githubusercontent.com/apache-superset/examples-data/master/examples.duckdb" && \
|
||||||
|
chown -R superset:superset /app/data; \
|
||||||
|
else \
|
||||||
|
mkdir -p /app/data && \
|
||||||
|
chown -R superset:superset /app/data; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy compiled things from previous stages
|
||||||
|
COPY --from=superset-node /app/superset/static/assets superset/static/assets
|
||||||
|
|
||||||
|
# TODO, when the next version comes out, use --exclude superset/translations
|
||||||
|
COPY superset superset
|
||||||
|
# TODO in the meantime, remove the .po files
|
||||||
|
RUN rm superset/translations/*/*/*.po
|
||||||
|
|
||||||
|
# Merging translations from backend and frontend stages
|
||||||
|
COPY --from=superset-node /app/superset/translations superset/translations
|
||||||
|
COPY --from=python-translation-compiler /app/translations_mo superset/translations
|
||||||
|
|
||||||
|
HEALTHCHECK CMD /app/docker/docker-healthcheck.sh
|
||||||
|
CMD ["/app/docker/entrypoints/run-server.sh"]
|
||||||
|
EXPOSE ${SUPERSET_PORT}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Final lean image...
|
# Final lean image...
|
||||||
######################################################################
|
######################################################################
|
||||||
FROM python-base AS lean
|
FROM python-common AS lean
|
||||||
|
|
||||||
# Include translations in the final build. The default supports en only to
|
# Install Python dependencies using docker/pip-install.sh
|
||||||
# reduce complexity and weight for those only using en
|
COPY requirements/base.txt requirements/
|
||||||
ARG BUILD_TRANSLATIONS="false"
|
|
||||||
|
|
||||||
WORKDIR /app
|
# Copy superset-core package needed for editable install in base.txt
|
||||||
ENV LANG=C.UTF-8 \
|
COPY superset-core superset-core
|
||||||
LC_ALL=C.UTF-8 \
|
|
||||||
SUPERSET_ENV=production \
|
|
||||||
FLASK_APP="superset.app:create_app()" \
|
|
||||||
PYTHONPATH="/app/pythonpath" \
|
|
||||||
SUPERSET_HOME="/app/superset_home" \
|
|
||||||
SUPERSET_PORT=8088
|
|
||||||
|
|
||||||
RUN mkdir -p ${PYTHONPATH} superset/static requirements superset-frontend apache_superset.egg-info requirements \
|
RUN --mount=type=cache,target=${SUPERSET_HOME}/.cache/uv \
|
||||||
&& useradd --user-group -d ${SUPERSET_HOME} -m --no-log-init --shell /bin/bash superset \
|
/app/docker/pip-install.sh --requires-build-essential -r requirements/base.txt
|
||||||
&& apt-get update -qq && apt-get install -yqq --no-install-recommends \
|
# Install the superset package
|
||||||
curl \
|
RUN --mount=type=cache,target=${SUPERSET_HOME}/.cache/uv \
|
||||||
libsasl2-dev \
|
uv pip install -e .
|
||||||
libsasl2-modules-gssapi-mit \
|
RUN python -m compileall /app/superset
|
||||||
libpq-dev \
|
|
||||||
libecpg-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
&& touch superset/static/version_info.json \
|
|
||||||
&& chown -R superset:superset ./* \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
COPY --chown=superset:superset pyproject.toml 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/
|
|
||||||
COPY --chown=superset:superset requirements/base.txt requirements/
|
|
||||||
COPY --chown=superset:superset scripts/check-env.py scripts/
|
|
||||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
|
||||||
apt-get update -qq && apt-get install -yqq --no-install-recommends \
|
|
||||||
build-essential \
|
|
||||||
&& pip install --no-cache-dir --upgrade setuptools pip \
|
|
||||||
&& pip install --no-cache-dir -r requirements/base.txt \
|
|
||||||
&& apt-get autoremove -yqq --purge build-essential \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Copy the compiled frontend assets
|
|
||||||
COPY --chown=superset:superset --from=superset-node /app/superset/static/assets superset/static/assets
|
|
||||||
|
|
||||||
## Lastly, let's install superset itself
|
|
||||||
COPY --chown=superset:superset superset superset
|
|
||||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
|
||||||
pip install --no-cache-dir -e .
|
|
||||||
|
|
||||||
# Copy the .json translations from the frontend layer
|
|
||||||
COPY --chown=superset:superset --from=superset-node /app/superset/translations superset/translations
|
|
||||||
|
|
||||||
# Compile translations for the backend - this generates .mo files, then deletes the .po files
|
|
||||||
COPY ./scripts/translations/generate_mo_files.sh ./scripts/translations/
|
|
||||||
RUN if [ "$BUILD_TRANSLATIONS" = "true" ]; then \
|
|
||||||
./scripts/translations/generate_mo_files.sh \
|
|
||||||
&& chown -R superset:superset superset/translations \
|
|
||||||
&& rm superset/translations/messages.pot \
|
|
||||||
&& rm superset/translations/*/LC_MESSAGES/*.po; \
|
|
||||||
else \
|
|
||||||
echo "Skipping translations as requested by build flag"; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
COPY --chmod=755 ./docker/run-server.sh /usr/bin/
|
|
||||||
USER superset
|
USER superset
|
||||||
|
|
||||||
HEALTHCHECK CMD curl -f "http://localhost:${SUPERSET_PORT}/health"
|
|
||||||
|
|
||||||
EXPOSE ${SUPERSET_PORT}
|
|
||||||
|
|
||||||
CMD ["/usr/bin/run-server.sh"]
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Dev image...
|
# Dev image...
|
||||||
######################################################################
|
######################################################################
|
||||||
FROM lean AS dev
|
FROM python-common AS dev
|
||||||
|
|
||||||
USER root
|
# Debian libs needed for dev
|
||||||
RUN apt-get update -qq \
|
RUN /app/docker/apt-install.sh \
|
||||||
&& apt-get install -yqq --no-install-recommends \
|
git \
|
||||||
libnss3 \
|
pkg-config \
|
||||||
libdbus-glib-1-2 \
|
default-libmysqlclient-dev
|
||||||
libgtk-3-0 \
|
|
||||||
libx11-xcb1 \
|
|
||||||
libasound2 \
|
|
||||||
libxtst6 \
|
|
||||||
git \
|
|
||||||
pkg-config \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
# Copy development requirements and install them
|
||||||
pip install --no-cache-dir playwright
|
COPY requirements/*.txt requirements/
|
||||||
RUN playwright install-deps
|
|
||||||
|
|
||||||
RUN if [ "$INCLUDE_CHROMIUM" = "true" ]; then \
|
# Copy local packages needed for editable installs in development.txt
|
||||||
playwright install chromium; \
|
COPY superset-core superset-core
|
||||||
else \
|
COPY superset-extensions-cli superset-extensions-cli
|
||||||
echo "Skipping translations in dev mode"; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install GeckoDriver WebDriver
|
# Install Python dependencies using docker/pip-install.sh
|
||||||
ARG GECKODRIVER_VERSION=v0.34.0 \
|
RUN --mount=type=cache,target=${SUPERSET_HOME}/.cache/uv \
|
||||||
FIREFOX_VERSION=125.0.3
|
/app/docker/pip-install.sh --requires-build-essential -r requirements/development.txt
|
||||||
|
# Install the superset package
|
||||||
|
RUN --mount=type=cache,target=${SUPERSET_HOME}/.cache/uv \
|
||||||
|
uv pip install -e .
|
||||||
|
|
||||||
RUN if [ "$INCLUDE_FIREFOX" = "true" ]; then \
|
RUN uv pip install .[postgres]
|
||||||
apt-get update -qq \
|
RUN python -m compileall /app/superset
|
||||||
&& apt-get install -yqq --no-install-recommends wget bzip2 \
|
|
||||||
&& wget -q https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O - | tar xfz - -C /usr/local/bin \
|
|
||||||
&& 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 bzip2 && rm -rf /var/[log,tmp]/* /tmp/* /var/lib/apt/lists/*; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Installing mysql client os-level dependencies in dev image only because GPL
|
|
||||||
RUN apt-get install -yqq --no-install-recommends \
|
|
||||||
default-libmysqlclient-dev \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
COPY --chown=superset:superset requirements/development.txt requirements/
|
|
||||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
|
||||||
apt-get update -qq && apt-get install -yqq --no-install-recommends \
|
|
||||||
build-essential \
|
|
||||||
&& pip install --no-cache-dir -r requirements/development.txt \
|
|
||||||
&& apt-get autoremove -yqq --purge build-essential \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
USER superset
|
USER superset
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# CI image...
|
# CI image...
|
||||||
######################################################################
|
######################################################################
|
||||||
FROM lean AS ci
|
FROM lean AS ci
|
||||||
|
USER root
|
||||||
|
RUN uv pip install .[postgres,duckdb]
|
||||||
|
USER superset
|
||||||
|
CMD ["/app/docker/entrypoints/docker-ci.sh"]
|
||||||
|
|
||||||
COPY --chown=superset:superset --chmod=755 ./docker/*.sh /app/docker/
|
######################################################################
|
||||||
|
# Showtime image - lean + DuckDB for examples database
|
||||||
CMD ["/app/docker/docker-ci.sh"]
|
######################################################################
|
||||||
|
FROM lean AS showtime
|
||||||
|
USER root
|
||||||
|
RUN uv pip install .[duckdb]
|
||||||
|
USER superset
|
||||||
|
CMD ["/app/docker/entrypoints/docker-ci.sh"]
|
||||||
|
|||||||
121
LINTING_ARCHITECTURE.md
Normal file
121
LINTING_ARCHITECTURE.md
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
# Superset Frontend Linting Architecture
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
We use a hybrid linting approach combining OXC (fast, standard rules) with custom AST-based checks for Superset-specific patterns.
|
||||||
|
|
||||||
|
## Components
|
||||||
|
|
||||||
|
### 1. Primary Linter: OXC
|
||||||
|
- **What**: Oxidation Compiler's linter (oxlint)
|
||||||
|
- **Handles**: 95% of linting rules (standard ESLint rules, TypeScript, React, etc.)
|
||||||
|
- **Speed**: ~50-100x faster than ESLint
|
||||||
|
- **Config**: `oxlint.json`
|
||||||
|
|
||||||
|
### 2. Custom Rule Checker
|
||||||
|
- **What**: Node.js AST-based script
|
||||||
|
- **Handles**: Superset-specific rules:
|
||||||
|
- No literal colors (use theme)
|
||||||
|
- No FontAwesome icons (use Icons component)
|
||||||
|
- No template vars in i18n
|
||||||
|
- **Speed**: Fast enough for pre-commit
|
||||||
|
- **Script**: `scripts/check-custom-rules.js`
|
||||||
|
|
||||||
|
## Developer Workflow
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
```bash
|
||||||
|
# Fast linting (OXC only)
|
||||||
|
npm run lint
|
||||||
|
|
||||||
|
# Full linting (OXC + custom rules)
|
||||||
|
npm run lint:full
|
||||||
|
|
||||||
|
# Auto-fix what's possible
|
||||||
|
npm run lint-fix
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pre-commit
|
||||||
|
1. OXC runs first (via `scripts/oxlint.sh`)
|
||||||
|
2. Custom rules check runs second (lightweight, AST-based)
|
||||||
|
3. Both must pass for commit to succeed
|
||||||
|
|
||||||
|
### CI Pipeline
|
||||||
|
```yaml
|
||||||
|
- name: Lint with OXC
|
||||||
|
run: npm run lint
|
||||||
|
|
||||||
|
- name: Check custom rules
|
||||||
|
run: npm run check:custom-rules
|
||||||
|
```
|
||||||
|
|
||||||
|
## Why This Architecture?
|
||||||
|
|
||||||
|
### ✅ Pros
|
||||||
|
1. **No binary distribution issues** - ASF compatible
|
||||||
|
2. **Fast performance** - OXC for bulk, lightweight script for custom
|
||||||
|
3. **Maintainable** - Custom rules in JavaScript, not Rust
|
||||||
|
4. **Flexible** - Can evolve as OXC adds plugin support
|
||||||
|
5. **Cacheable** - Both OXC and Node.js are standard tools
|
||||||
|
|
||||||
|
### ❌ Cons
|
||||||
|
1. **Two tools** - Slightly more complex than single linter
|
||||||
|
2. **Duplicate parsing** - Files parsed twice (once by each tool)
|
||||||
|
|
||||||
|
### 🔄 Migration Path
|
||||||
|
When OXC supports JavaScript plugins:
|
||||||
|
1. Convert `check-custom-rules.js` to OXC plugin format
|
||||||
|
2. Consolidate back to single tool
|
||||||
|
3. Keep same rules and developer experience
|
||||||
|
|
||||||
|
## Implementation Checklist
|
||||||
|
|
||||||
|
- [x] OXC for standard linting
|
||||||
|
- [x] Pre-commit integration
|
||||||
|
- [ ] Custom rules script
|
||||||
|
- [ ] Combine in npm scripts
|
||||||
|
- [ ] Update CI pipeline
|
||||||
|
- [ ] Developer documentation
|
||||||
|
|
||||||
|
## Performance Targets
|
||||||
|
|
||||||
|
| Operation | Target Time | Current |
|
||||||
|
|-----------|------------|---------|
|
||||||
|
| Pre-commit (changed files) | <2s | ✅ 1.5s |
|
||||||
|
| Full lint (all files) | <10s | ✅ 8s |
|
||||||
|
| Custom rules check | <5s | 🔄 TBD |
|
||||||
|
|
||||||
|
## Caching Strategy
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
- OXC: Built-in incremental checking
|
||||||
|
- Custom rules: Use file hash cache (similar to pytest cache)
|
||||||
|
|
||||||
|
### CI
|
||||||
|
- Cache `node_modules` (includes oxlint binary)
|
||||||
|
- Cache custom rules results by commit hash
|
||||||
|
- Skip unchanged files using git diff
|
||||||
|
|
||||||
|
## Future Improvements
|
||||||
|
|
||||||
|
1. **When OXC adds plugin support**: Migrate custom rules to OXC plugins
|
||||||
|
2. **Consider Biome**: Another Rust-based linter with plugin support
|
||||||
|
3. **AST sharing**: Investigate sharing AST between tools to avoid double parsing
|
||||||
5
Makefile
5
Makefile
@@ -87,14 +87,11 @@ format: py-format js-format
|
|||||||
py-format: pre-commit
|
py-format: pre-commit
|
||||||
pre-commit run black --all-files
|
pre-commit run black --all-files
|
||||||
|
|
||||||
py-lint: pre-commit
|
|
||||||
pylint -j 0 superset
|
|
||||||
|
|
||||||
js-format:
|
js-format:
|
||||||
cd superset-frontend; npm run prettier
|
cd superset-frontend; npm run prettier
|
||||||
|
|
||||||
flask-app:
|
flask-app:
|
||||||
flask run -p 8088 --with-threads --reload --debugger
|
flask run -p 8088 --reload --debugger
|
||||||
|
|
||||||
node-app:
|
node-app:
|
||||||
cd superset-frontend; npm run dev-server
|
cd superset-frontend; npm run dev-server
|
||||||
|
|||||||
28
README.md
28
README.md
@@ -20,11 +20,11 @@ under the License.
|
|||||||
# Superset
|
# Superset
|
||||||
|
|
||||||
[](https://opensource.org/license/apache-2-0)
|
[](https://opensource.org/license/apache-2-0)
|
||||||
[](https://github.com/apache/superset/tree/latest)
|
[](https://github.com/apache/superset/releases/latest)
|
||||||
[](https://github.com/apache/superset/actions)
|
[](https://github.com/apache/superset/actions)
|
||||||
[](https://badge.fury.io/py/apache-superset)
|
[](https://badge.fury.io/py/apache_superset)
|
||||||
[](https://codecov.io/github/apache/superset)
|
[](https://codecov.io/github/apache/superset)
|
||||||
[](https://pypi.python.org/pypi/apache-superset)
|
[](https://pypi.python.org/pypi/apache_superset)
|
||||||
[](http://bit.ly/join-superset-slack)
|
[](http://bit.ly/join-superset-slack)
|
||||||
[](https://superset.apache.org)
|
[](https://superset.apache.org)
|
||||||
|
|
||||||
@@ -72,8 +72,10 @@ Superset provides:
|
|||||||
## Screenshots & Gifs
|
## Screenshots & Gifs
|
||||||
|
|
||||||
**Video Overview**
|
**Video Overview**
|
||||||
|
|
||||||
<!-- File hosted here https://github.com/apache/superset-site/raw/lfs/superset-video-4k.mp4 -->
|
<!-- File hosted here https://github.com/apache/superset-site/raw/lfs/superset-video-4k.mp4 -->
|
||||||
[superset-video-4k.webm](https://github.com/apache/superset/assets/812905/da036bc2-150c-4ee7-80f9-75e63210ff76)
|
|
||||||
|
[superset-video-1080p.webm](https://github.com/user-attachments/assets/b37388f7-a971-409c-96a7-90c4e31322e6)
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
@@ -101,7 +103,7 @@ Here are some of the major database solutions that are supported:
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://superset.apache.org/img/databases/redshift.png" alt="redshift" border="0" width="200"/>
|
<img src="https://superset.apache.org/img/databases/redshift.png" alt="redshift" border="0" width="200"/>
|
||||||
<img src="https://superset.apache.org/img/databases/google-biquery.png" alt="google-biquery" border="0" width="200"/>
|
<img src="https://superset.apache.org/img/databases/google-biquery.png" alt="google-bigquery" border="0" width="200"/>
|
||||||
<img src="https://superset.apache.org/img/databases/snowflake.png" alt="snowflake" border="0" width="200"/>
|
<img src="https://superset.apache.org/img/databases/snowflake.png" alt="snowflake" border="0" width="200"/>
|
||||||
<img src="https://superset.apache.org/img/databases/trino.png" alt="trino" border="0" width="150" />
|
<img src="https://superset.apache.org/img/databases/trino.png" alt="trino" border="0" width="150" />
|
||||||
<img src="https://superset.apache.org/img/databases/presto.png" alt="presto" border="0" width="200"/>
|
<img src="https://superset.apache.org/img/databases/presto.png" alt="presto" border="0" width="200"/>
|
||||||
@@ -109,7 +111,6 @@ Here are some of the major database solutions that are supported:
|
|||||||
<img src="https://superset.apache.org/img/databases/druid.png" alt="druid" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/druid.png" alt="druid" border="0" width="200" />
|
||||||
<img src="https://superset.apache.org/img/databases/firebolt.png" alt="firebolt" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/firebolt.png" alt="firebolt" border="0" width="200" />
|
||||||
<img src="https://superset.apache.org/img/databases/timescale.png" alt="timescale" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/timescale.png" alt="timescale" border="0" width="200" />
|
||||||
<img src="https://superset.apache.org/img/databases/rockset.png" alt="rockset" border="0" width="200" />
|
|
||||||
<img src="https://superset.apache.org/img/databases/postgresql.png" alt="postgresql" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/postgresql.png" alt="postgresql" border="0" width="200" />
|
||||||
<img src="https://superset.apache.org/img/databases/mysql.png" alt="mysql" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/mysql.png" alt="mysql" border="0" width="200" />
|
||||||
<img src="https://superset.apache.org/img/databases/mssql-server.png" alt="mssql-server" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/mssql-server.png" alt="mssql-server" border="0" width="200" />
|
||||||
@@ -134,8 +135,10 @@ Here are some of the major database solutions that are supported:
|
|||||||
<img src="https://superset.apache.org/img/databases/starrocks.png" alt="starrocks" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/starrocks.png" alt="starrocks" border="0" width="200" />
|
||||||
<img src="https://superset.apache.org/img/databases/doris.png" alt="doris" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/doris.png" alt="doris" border="0" width="200" />
|
||||||
<img src="https://superset.apache.org/img/databases/oceanbase.svg" alt="oceanbase" border="0" width="220" />
|
<img src="https://superset.apache.org/img/databases/oceanbase.svg" alt="oceanbase" border="0" width="220" />
|
||||||
<img src="https://superset.apache.org/img/databases/sap-hana.png" alt="oceanbase" border="0" width="220" />
|
<img src="https://superset.apache.org/img/databases/sap-hana.png" alt="sap-hana" border="0" width="220" />
|
||||||
<img src="https://superset.apache.org/img/databases/denodo.png" alt="denodo" border="0" width="200" />
|
<img src="https://superset.apache.org/img/databases/denodo.png" alt="denodo" border="0" width="200" />
|
||||||
|
<img src="https://superset.apache.org/img/databases/ydb.svg" alt="ydb" border="0" width="200" />
|
||||||
|
<img src="https://superset.apache.org/img/databases/tdengine.png" alt="TDengine" border="0" width="200" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
**A more comprehensive list of supported databases** along with the configuration instructions can be found [here](https://superset.apache.org/docs/configuration/databases).
|
**A more comprehensive list of supported databases** along with the configuration instructions can be found [here](https://superset.apache.org/docs/configuration/databases).
|
||||||
@@ -144,7 +147,7 @@ Want to add support for your datastore or data engine? Read more [here](https://
|
|||||||
|
|
||||||
## Installation and Configuration
|
## Installation and Configuration
|
||||||
|
|
||||||
[Extended documentation for Superset](https://superset.apache.org/docs/installation/docker-compose)
|
Try out Superset's [quickstart](https://superset.apache.org/docs/quickstart/) guide or learn about [the options for production deployments](https://superset.apache.org/docs/installation/architecture/).
|
||||||
|
|
||||||
## Get Involved
|
## Get Involved
|
||||||
|
|
||||||
@@ -153,7 +156,7 @@ Want to add support for your datastore or data engine? Read more [here](https://
|
|||||||
and please read our [Slack Community Guidelines](https://github.com/apache/superset/blob/master/CODE_OF_CONDUCT.md#slack-community-guidelines)
|
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). To join, simply send an email to [dev-subscribe@superset.apache.org](mailto:dev-subscribe@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)
|
- 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)
|
- 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
|
## Contributor Guide
|
||||||
|
|
||||||
@@ -181,14 +184,16 @@ Understanding the Superset Points of View
|
|||||||
- [Building New Database Connectors](https://preset.io/blog/building-database-connector/)
|
- [Building New Database Connectors](https://preset.io/blog/building-database-connector/)
|
||||||
- [Create Your First Dashboard](https://superset.apache.org/docs/using-superset/creating-your-first-dashboard/)
|
- [Create Your First Dashboard](https://superset.apache.org/docs/using-superset/creating-your-first-dashboard/)
|
||||||
- [Comprehensive Tutorial for Contributing Code to Apache Superset
|
- [Comprehensive Tutorial for Contributing Code to Apache Superset
|
||||||
](https://preset.io/blog/tutorial-contributing-code-to-apache-superset/)
|
](https://preset.io/blog/tutorial-contributing-code-to-apache-superset/)
|
||||||
- [Resources to master Superset by Preset](https://preset.io/resources/)
|
- [Resources to master Superset by Preset](https://preset.io/resources/)
|
||||||
|
|
||||||
- Deploying Superset
|
- Deploying Superset
|
||||||
|
|
||||||
- [Official Docker image](https://hub.docker.com/r/apache/superset)
|
- [Official Docker image](https://hub.docker.com/r/apache/superset)
|
||||||
- [Helm Chart](https://github.com/apache/superset/tree/master/helm/superset)
|
- [Helm Chart](https://github.com/apache/superset/tree/master/helm/superset)
|
||||||
|
|
||||||
- Recordings of Past [Superset Community Events](https://preset.io/events)
|
- 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/)
|
- [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/)
|
- [Live Demo: Visualizing MongoDB and Pinot Data using Trino](https://preset.io/events/2021-04-13-visualizing-mongodb-and-pinot-data-using-trino/)
|
||||||
@@ -196,6 +201,7 @@ Understanding the Superset Points of View
|
|||||||
- [Building a Database Connector for Superset](https://preset.io/events/2021-02-16-building-a-database-connector-for-superset/)
|
- [Building a Database Connector for Superset](https://preset.io/events/2021-02-16-building-a-database-connector-for-superset/)
|
||||||
|
|
||||||
- Visualizations
|
- Visualizations
|
||||||
|
|
||||||
- [Creating Viz Plugins](https://superset.apache.org/docs/contributing/creating-viz-plugins/)
|
- [Creating Viz Plugins](https://superset.apache.org/docs/contributing/creating-viz-plugins/)
|
||||||
- [Managing and Deploying Custom Viz Plugins](https://medium.com/nmc-techblog/apache-superset-manage-custom-viz-plugins-in-production-9fde1a708e55)
|
- [Managing and Deploying Custom Viz Plugins](https://medium.com/nmc-techblog/apache-superset-manage-custom-viz-plugins-in-production-9fde1a708e55)
|
||||||
- [Why Apache Superset is Betting on Apache ECharts](https://preset.io/blog/2021-4-1-why-echarts/)
|
- [Why Apache Superset is Betting on Apache ECharts](https://preset.io/blog/2021-4-1-why-echarts/)
|
||||||
|
|||||||
@@ -14,13 +14,13 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
FROM python:3.10-slim-bookworm
|
FROM python:3.10-slim-trixie
|
||||||
|
|
||||||
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset
|
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset
|
||||||
|
|
||||||
# Configure environment
|
# Configure environment
|
||||||
ENV LANG=C.UTF-8 \
|
ENV LANG=C.UTF-8 \
|
||||||
LC_ALL=C.UTF-8
|
LC_ALL=C.UTF-8
|
||||||
|
|
||||||
RUN apt-get update -y
|
RUN apt-get update -y
|
||||||
|
|
||||||
@@ -30,14 +30,14 @@ RUN apt-get install -y apt-transport-https apt-utils
|
|||||||
# Install superset dependencies
|
# Install superset dependencies
|
||||||
# https://superset.apache.org/docs/installation/installing-superset-from-scratch
|
# https://superset.apache.org/docs/installation/installing-superset-from-scratch
|
||||||
RUN apt-get install -y build-essential libssl-dev \
|
RUN apt-get install -y build-essential libssl-dev \
|
||||||
libffi-dev python3-dev libsasl2-dev libldap2-dev libxi-dev chromium
|
libffi-dev python3-dev libsasl2-dev libldap2-dev libxi-dev chromium zstd
|
||||||
|
|
||||||
# Install nodejs for custom build
|
# Install nodejs for custom build
|
||||||
# https://nodejs.org/en/download/package-manager/
|
# https://nodejs.org/en/download/package-manager/
|
||||||
RUN set -eux; \
|
RUN set -eux; \
|
||||||
curl -sL https://deb.nodesource.com/setup_18.x | bash -; \
|
curl -sL https://deb.nodesource.com/setup_20.x | bash -; \
|
||||||
apt-get install -y nodejs; \
|
apt-get install -y nodejs; \
|
||||||
node --version;
|
node --version;
|
||||||
RUN if ! which npm; then apt-get install -y npm; fi
|
RUN if ! which npm; then apt-get install -y npm; fi
|
||||||
|
|
||||||
RUN mkdir -p /home/superset
|
RUN mkdir -p /home/superset
|
||||||
@@ -50,21 +50,21 @@ ARG SUPERSET_RELEASE_RC_TARBALL
|
|||||||
# Can fetch source from svn or copy tarball from local mounted directory
|
# Can fetch source from svn or copy tarball from local mounted directory
|
||||||
COPY $SUPERSET_RELEASE_RC_TARBALL ./
|
COPY $SUPERSET_RELEASE_RC_TARBALL ./
|
||||||
RUN tar -xvf *.tar.gz
|
RUN tar -xvf *.tar.gz
|
||||||
WORKDIR /home/superset/apache-superset-$VERSION/superset-frontend
|
WORKDIR /home/superset/apache_superset-$VERSION/superset-frontend
|
||||||
|
|
||||||
RUN npm ci \
|
RUN npm ci \
|
||||||
&& npm run build \
|
&& npm run build \
|
||||||
&& rm -rf node_modules
|
&& rm -rf node_modules
|
||||||
|
|
||||||
WORKDIR /home/superset/apache-superset-$VERSION
|
WORKDIR /home/superset/apache_superset-$VERSION
|
||||||
RUN pip install --upgrade setuptools pip \
|
RUN pip install --upgrade setuptools pip \
|
||||||
&& pip install -r requirements/base.txt \
|
&& pip install -r requirements/base.txt \
|
||||||
&& pip install --no-cache-dir .
|
&& pip install --no-cache-dir .
|
||||||
|
|
||||||
RUN flask fab babel-compile --target superset/translations
|
RUN flask fab babel-compile --target superset/translations
|
||||||
|
|
||||||
ENV PATH=/home/superset/superset/bin:$PATH \
|
ENV PATH=/home/superset/superset/bin:$PATH \
|
||||||
PYTHONPATH=/home/superset/superset/:$PYTHONPATH \
|
PYTHONPATH=/home/superset/superset/ \
|
||||||
SUPERSET_TESTENV=true
|
SUPERSET_TESTENV=true
|
||||||
COPY from_tarball_entrypoint.sh /entrypoint.sh
|
COPY from_tarball_entrypoint.sh /entrypoint.sh
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
|||||||
@@ -14,13 +14,13 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
FROM python:3.10-slim-bookworm
|
FROM python:3.10-slim-trixie
|
||||||
|
|
||||||
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset
|
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset
|
||||||
|
|
||||||
# Configure environment
|
# Configure environment
|
||||||
ENV LANG=C.UTF-8 \
|
ENV LANG=C.UTF-8 \
|
||||||
LC_ALL=C.UTF-8
|
LC_ALL=C.UTF-8
|
||||||
|
|
||||||
RUN apt-get update -y
|
RUN apt-get update -y
|
||||||
|
|
||||||
@@ -29,13 +29,16 @@ RUN apt-get install -y apt-transport-https apt-utils
|
|||||||
|
|
||||||
# Install superset dependencies
|
# Install superset dependencies
|
||||||
# https://superset.apache.org/docs/installation/installing-superset-from-scratch
|
# https://superset.apache.org/docs/installation/installing-superset-from-scratch
|
||||||
RUN apt-get install -y build-essential libssl-dev \
|
RUN apt-get install -y subversion build-essential libssl-dev \
|
||||||
libffi-dev python3-dev libsasl2-dev libldap2-dev libxi-dev chromium
|
libffi-dev python3-dev libsasl2-dev libldap2-dev libxi-dev chromium zstd
|
||||||
|
|
||||||
# Install nodejs for custom build
|
# Install nodejs for custom build
|
||||||
# https://nodejs.org/en/download/package-manager/
|
# https://nodejs.org/en/download/package-manager/
|
||||||
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - \
|
RUN set -eux; \
|
||||||
&& apt-get install -y nodejs
|
curl -sL https://deb.nodesource.com/setup_20.x | bash -; \
|
||||||
|
apt-get install -y nodejs; \
|
||||||
|
node --version;
|
||||||
|
RUN if ! which npm; then apt-get install -y npm; fi
|
||||||
|
|
||||||
RUN mkdir -p /home/superset
|
RUN mkdir -p /home/superset
|
||||||
RUN chown superset /home/superset
|
RUN chown superset /home/superset
|
||||||
@@ -46,22 +49,20 @@ ARG VERSION
|
|||||||
# Can fetch source from svn or copy tarball from local mounted directory
|
# Can fetch source from svn or copy tarball from local mounted directory
|
||||||
RUN svn co https://dist.apache.org/repos/dist/dev/superset/$VERSION ./
|
RUN svn co https://dist.apache.org/repos/dist/dev/superset/$VERSION ./
|
||||||
RUN tar -xvf *.tar.gz
|
RUN tar -xvf *.tar.gz
|
||||||
WORKDIR apache-superset-$VERSION
|
WORKDIR /home/superset/apache_superset-$VERSION/superset-frontend
|
||||||
|
|
||||||
RUN cd superset-frontend \
|
RUN npm ci \
|
||||||
&& npm ci \
|
&& npm run build \
|
||||||
&& npm run build \
|
&& rm -rf node_modules
|
||||||
&& rm -rf node_modules
|
|
||||||
|
|
||||||
|
WORKDIR /home/superset/apache_superset-$VERSION
|
||||||
WORKDIR /home/superset/apache-superset-$VERSION
|
|
||||||
RUN pip install --upgrade setuptools pip \
|
RUN pip install --upgrade setuptools pip \
|
||||||
&& pip install -r requirements/base.txt \
|
&& pip install -r requirements/base.txt \
|
||||||
&& pip install --no-cache-dir .
|
&& pip install --no-cache-dir .
|
||||||
|
|
||||||
RUN flask fab babel-compile --target superset/translations
|
RUN flask fab babel-compile --target superset/translations
|
||||||
|
|
||||||
ENV PATH=/home/superset/superset/bin:$PATH \
|
ENV PATH=/home/superset/superset/bin:$PATH \
|
||||||
PYTHONPATH=/home/superset/superset/:$PYTHONPATH
|
PYTHONPATH=/home/superset/superset/
|
||||||
COPY from_tarball_entrypoint.sh /entrypoint.sh
|
COPY from_tarball_entrypoint.sh /entrypoint.sh
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
FROM python:3.10-slim-bookworm
|
FROM python:3.10-slim-trixie
|
||||||
ARG VERSION
|
ARG VERSION
|
||||||
|
|
||||||
RUN git clone --depth 1 --branch ${VERSION} https://github.com/apache/superset.git /superset
|
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
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
FROM python:3.10-slim-bookworm
|
FROM python:3.10-slim-trixie
|
||||||
|
|
||||||
RUN apt-get update -y
|
RUN apt-get update -y
|
||||||
RUN apt-get install -y \
|
RUN apt-get install -y \
|
||||||
|
|||||||
@@ -123,10 +123,10 @@ SUPERSET_RC=1
|
|||||||
SUPERSET_GITHUB_BRANCH=1.5
|
SUPERSET_GITHUB_BRANCH=1.5
|
||||||
SUPERSET_PGP_FULLNAME=villebro@apache.org
|
SUPERSET_PGP_FULLNAME=villebro@apache.org
|
||||||
SUPERSET_VERSION_RC=1.5.1rc1
|
SUPERSET_VERSION_RC=1.5.1rc1
|
||||||
SUPERSET_RELEASE=apache-superset-1.5.1
|
SUPERSET_RELEASE=apache_superset-1.5.1
|
||||||
SUPERSET_RELEASE_RC=apache-superset-1.5.1rc1
|
SUPERSET_RELEASE_RC=apache_superset-1.5.1rc1
|
||||||
SUPERSET_RELEASE_TARBALL=apache-superset-1.5.1-source.tar.gz
|
SUPERSET_RELEASE_TARBALL=apache_superset-1.5.1-source.tar.gz
|
||||||
SUPERSET_RELEASE_RC_TARBALL=apache-superset-1.5.1rc1-source.tar.gz
|
SUPERSET_RELEASE_RC_TARBALL=apache_superset-1.5.1rc1-source.tar.gz
|
||||||
SUPERSET_TMP_ASF_SITE_PATH=/tmp/incubator-superset-site-1.5.1
|
SUPERSET_TMP_ASF_SITE_PATH=/tmp/incubator-superset-site-1.5.1
|
||||||
-------------------------------
|
-------------------------------
|
||||||
```
|
```
|
||||||
@@ -380,7 +380,7 @@ Official instructions:
|
|||||||
https://www.apache.org/info/verification.html
|
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:
|
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`
|
`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:
|
If all goes well, you will see this result in your terminal:
|
||||||
|
|
||||||
@@ -452,10 +452,13 @@ cd ../
|
|||||||
|
|
||||||
|
|
||||||
# Compile translations for the backend
|
# Compile translations for the backend
|
||||||
./scripts/translations/generate_po_files.sh
|
./scripts/translations/generate_mo_files.sh
|
||||||
|
|
||||||
|
# update build version number
|
||||||
|
sed -i '' "s/version_string = .*/version_string = \"$SUPERSET_VERSION\"/" setup.py
|
||||||
|
|
||||||
# build the python distribution
|
# build the python distribution
|
||||||
python -m build
|
python setup.py sdist
|
||||||
```
|
```
|
||||||
|
|
||||||
Publish to PyPI
|
Publish to PyPI
|
||||||
@@ -466,8 +469,11 @@ an account first if you don't have one, and reference your username
|
|||||||
while requesting access to push packages.
|
while requesting access to push packages.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
twine upload dist/apache_superset-${SUPERSET_VERSION}-py3-none-any.whl
|
# Run this first to make sure you are uploading the right version.
|
||||||
twine upload dist/apache-superset-${SUPERSET_VERSION}.tar.gz
|
# Pypi does not allow you to delete or retract once uplaoded.
|
||||||
|
twine check dist/*
|
||||||
|
|
||||||
|
twine upload dist/*
|
||||||
```
|
```
|
||||||
|
|
||||||
Set your username to `__token__`
|
Set your username to `__token__`
|
||||||
@@ -516,6 +522,8 @@ takes the version (ie `3.1.1`), the git reference (any SHA, tag or branch
|
|||||||
reference), and whether to force the `latest` Docker tag on the
|
reference), and whether to force the `latest` Docker tag on the
|
||||||
generated images.
|
generated images.
|
||||||
|
|
||||||
|
**NOTE:** If the docker image isn't built, you'll need to run this [GH action](https://github.com/apache/superset/actions/workflows/tag-release.yml) where you provide it the tag sha.
|
||||||
|
|
||||||
### Npm Release
|
### Npm Release
|
||||||
|
|
||||||
You might want to publish the latest @superset-ui release to npm
|
You might want to publish the latest @superset-ui release to npm
|
||||||
|
|||||||
@@ -232,8 +232,7 @@ class GitChangeLog:
|
|||||||
for log in self._logs:
|
for log in self._logs:
|
||||||
yield {
|
yield {
|
||||||
"pr_number": log.pr_number,
|
"pr_number": log.pr_number,
|
||||||
"pr_link": f"https://github.com/{SUPERSET_REPO}/pull/"
|
"pr_link": f"https://github.com/{SUPERSET_REPO}/pull/{log.pr_number}",
|
||||||
f"{log.pr_number}",
|
|
||||||
"message": log.message,
|
"message": log.message,
|
||||||
"time": log.time,
|
"time": log.time,
|
||||||
"author": log.author,
|
"author": log.author,
|
||||||
@@ -272,14 +271,14 @@ class GitLogs:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _git_get_current_head() -> str:
|
def _git_get_current_head() -> str:
|
||||||
output = os.popen("git status | head -1").read()
|
output = os.popen("git status | head -1").read() # noqa: S605, S607
|
||||||
match = re.match("(?:HEAD detached at|On branch) (.*)", output)
|
match = re.match("(?:HEAD detached at|On branch) (.*)", output)
|
||||||
if not match:
|
if not match:
|
||||||
return ""
|
return ""
|
||||||
return match.group(1)
|
return match.group(1)
|
||||||
|
|
||||||
def _git_checkout(self, git_ref: str) -> None:
|
def _git_checkout(self, git_ref: str) -> None:
|
||||||
os.popen(f"git checkout {git_ref}").read()
|
os.popen(f"git checkout {git_ref}").read() # noqa: S605
|
||||||
current_head = self._git_get_current_head()
|
current_head = self._git_get_current_head()
|
||||||
if current_head != git_ref:
|
if current_head != git_ref:
|
||||||
print(f"Could not checkout {git_ref}")
|
print(f"Could not checkout {git_ref}")
|
||||||
@@ -290,7 +289,7 @@ class GitLogs:
|
|||||||
current_git_ref = self._git_get_current_head()
|
current_git_ref = self._git_get_current_head()
|
||||||
self._git_checkout(self._git_ref)
|
self._git_checkout(self._git_ref)
|
||||||
output = (
|
output = (
|
||||||
os.popen('git --no-pager log --pretty=format:"%h|%an|%ae|%ad|%s|"')
|
os.popen('git --no-pager log --pretty=format:"%h|%an|%ae|%ad|%s|"') # noqa: S605, S607
|
||||||
.read()
|
.read()
|
||||||
.split("\n")
|
.split("\n")
|
||||||
)
|
)
|
||||||
@@ -323,9 +322,9 @@ class BaseParameters:
|
|||||||
|
|
||||||
|
|
||||||
def print_title(message: str) -> None:
|
def print_title(message: str) -> None:
|
||||||
print(f"{50*'-'}")
|
print(f"{50 * '-'}")
|
||||||
print(message)
|
print(message)
|
||||||
print(f"{50*'-'}")
|
print(f"{50 * '-'}")
|
||||||
|
|
||||||
|
|
||||||
@click.group()
|
@click.group()
|
||||||
@@ -349,14 +348,14 @@ def compare(base_parameters: BaseParameters) -> None:
|
|||||||
previous_logs = base_parameters.previous_logs
|
previous_logs = base_parameters.previous_logs
|
||||||
current_logs = base_parameters.current_logs
|
current_logs = base_parameters.current_logs
|
||||||
print_title(
|
print_title(
|
||||||
f"Pull requests from " f"{current_logs.git_ref} not in {previous_logs.git_ref}"
|
f"Pull requests from {current_logs.git_ref} not in {previous_logs.git_ref}"
|
||||||
)
|
)
|
||||||
previous_diff_logs = previous_logs.diff(current_logs)
|
previous_diff_logs = previous_logs.diff(current_logs)
|
||||||
for diff_log in previous_diff_logs:
|
for diff_log in previous_diff_logs:
|
||||||
print(f"{diff_log}")
|
print(f"{diff_log}")
|
||||||
|
|
||||||
print_title(
|
print_title(
|
||||||
f"Pull requests from " f"{previous_logs.git_ref} not in {current_logs.git_ref}"
|
f"Pull requests from {previous_logs.git_ref} not in {current_logs.git_ref}"
|
||||||
)
|
)
|
||||||
current_diff_logs = current_logs.diff(previous_logs)
|
current_diff_logs = current_logs.diff(previous_logs)
|
||||||
for diff_log in current_diff_logs:
|
for diff_log in current_diff_logs:
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user