From 93180fc279c4cee3f69bc73664795283c49f5b34 Mon Sep 17 00:00:00 2001 From: Zebedee Nicholls Date: Sat, 11 Oct 2025 03:20:00 +0200 Subject: [PATCH 1/6] Remove GitHub workflow files --- .github/.DS_Store | Bin 10244 -> 0 bytes .github/GENERATE_SUMMARY/.DS_Store | Bin 6148 -> 0 bytes .../__pycache__/__main__.cpython-310.pyc | Bin 1903 -> 0 bytes .../GENERATE_SUMMARY/__pycache__/__main__.py | 80 ---- .../__pycache__/activity.cpython-310.pyc | Bin 583 -> 0 bytes .../__pycache__/drs.cpython-310.pyc | Bin 569 -> 0 bytes .../__pycache__/experiment.cpython-310.pyc | Bin 590 -> 0 bytes .../experiment_csv.cpython-310.pyc | Bin 1279 -> 0 bytes .../experiment_names.cpython-310.pyc | Bin 987 -> 0 bytes .../experiment_simplified.cpython-310.pyc | Bin 682 -> 0 bytes .../__pycache__/frequency.cpython-310.pyc | Bin 651 -> 0 bytes .../__pycache__/index.cpython-310.pyc | Bin 571 -> 0 bytes .../native-nominal-resolution.cpython-310.pyc | Bin 591 -> 0 bytes .../nominal-resolution.cpython-310.pyc | Bin 896 -> 0 bytes .../__pycache__/product.cpython-310.pyc | Bin 788 -> 0 bytes ...required-global-attributes.cpython-310.pyc | Bin 807 -> 0 bytes .../x_experiment_csv.cpython-310.pyc | Bin 1303 -> 0 bytes .github/GENERATE_SUMMARY/activity.py | 10 - .github/GENERATE_SUMMARY/drs.py | 10 - .github/GENERATE_SUMMARY/experiment.py | 9 - .../GENERATE_SUMMARY/experiment_simplified.py | 12 - .github/GENERATE_SUMMARY/frequency.py | 17 - .github/GENERATE_SUMMARY/index.py | 10 - .../native-nominal-resolution.py | 10 - .../required-global-attributes.py | 10 - .github/GEN_ISSUE_TEMPLATE/README.md | 231 ------------ .../GEN_ISSUE_TEMPLATE/deactivated/.DS_Store | Bin 6148 -> 0 bytes .../deactivated/new_component.csv | 41 --- .../deactivated/new_component.py | 67 ---- .github/GEN_ISSUE_TEMPLATE/discussion.csv | 12 - .github/GEN_ISSUE_TEMPLATE/discussion.py | 18 - .github/GEN_ISSUE_TEMPLATE/experiment.csv | 22 -- .github/GEN_ISSUE_TEMPLATE/experiment.py | 34 -- .github/GEN_ISSUE_TEMPLATE/general_issue.csv | 10 - .github/GEN_ISSUE_TEMPLATE/general_issue.py | 42 --- .github/ISSUE_TEMPLATE/discussion.yml | 118 ------ .github/ISSUE_TEMPLATE/experiment.yml | 346 ------------------ .github/ISSUE_TEMPLATE/general_issue.yml | 104 ------ .github/POST_ISSUE_SCRIPT/experiment.py | 157 -------- .github/workflows/.DS_Store | Bin 6148 -> 0 bytes .github/workflows/check_ld.yml | 46 --- .github/workflows/deploy-docs.yml | 57 --- .github/workflows/issue-templates.yml | 57 --- .github/workflows/new_issue.yml | 25 -- .github/workflows/src-data-change.yml | 68 ---- .github/workflows/static.yml | 51 --- .github/workflows/update-jsonld.yml | 90 ----- 47 files changed, 1764 deletions(-) delete mode 100644 .github/.DS_Store delete mode 100644 .github/GENERATE_SUMMARY/.DS_Store delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/__main__.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/__main__.py delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/activity.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/drs.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/experiment.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/experiment_csv.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/experiment_names.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/experiment_simplified.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/frequency.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/index.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/native-nominal-resolution.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/nominal-resolution.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/product.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/required-global-attributes.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/__pycache__/x_experiment_csv.cpython-310.pyc delete mode 100644 .github/GENERATE_SUMMARY/activity.py delete mode 100644 .github/GENERATE_SUMMARY/drs.py delete mode 100644 .github/GENERATE_SUMMARY/experiment.py delete mode 100644 .github/GENERATE_SUMMARY/experiment_simplified.py delete mode 100644 .github/GENERATE_SUMMARY/frequency.py delete mode 100644 .github/GENERATE_SUMMARY/index.py delete mode 100644 .github/GENERATE_SUMMARY/native-nominal-resolution.py delete mode 100644 .github/GENERATE_SUMMARY/required-global-attributes.py delete mode 100644 .github/GEN_ISSUE_TEMPLATE/README.md delete mode 100644 .github/GEN_ISSUE_TEMPLATE/deactivated/.DS_Store delete mode 100644 .github/GEN_ISSUE_TEMPLATE/deactivated/new_component.csv delete mode 100644 .github/GEN_ISSUE_TEMPLATE/deactivated/new_component.py delete mode 100644 .github/GEN_ISSUE_TEMPLATE/discussion.csv delete mode 100644 .github/GEN_ISSUE_TEMPLATE/discussion.py delete mode 100644 .github/GEN_ISSUE_TEMPLATE/experiment.csv delete mode 100644 .github/GEN_ISSUE_TEMPLATE/experiment.py delete mode 100644 .github/GEN_ISSUE_TEMPLATE/general_issue.csv delete mode 100644 .github/GEN_ISSUE_TEMPLATE/general_issue.py delete mode 100644 .github/ISSUE_TEMPLATE/discussion.yml delete mode 100644 .github/ISSUE_TEMPLATE/experiment.yml delete mode 100644 .github/ISSUE_TEMPLATE/general_issue.yml delete mode 100644 .github/POST_ISSUE_SCRIPT/experiment.py delete mode 100644 .github/workflows/.DS_Store delete mode 100644 .github/workflows/check_ld.yml delete mode 100644 .github/workflows/deploy-docs.yml delete mode 100644 .github/workflows/issue-templates.yml delete mode 100644 .github/workflows/new_issue.yml delete mode 100644 .github/workflows/src-data-change.yml delete mode 100644 .github/workflows/static.yml delete mode 100644 .github/workflows/update-jsonld.yml diff --git a/.github/.DS_Store b/.github/.DS_Store deleted file mode 100644 index 5fe5ee686fba016a1ab0b37125156d34e344b2a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMO>7%Q6n-xW)NY!_`7NZStZG$4N>t*siBKr zm=ZN^=grQ{ zx3llb45C zDG#tPk}YGltO#jA>6#*YKpTp7ih%-7;}V}vGG@z)kOB@U;DGkZXlE#Btxh<}nhqEf z(yx6B_!eli0MFg~;UZ=1uTswL&fk;NcNrGo6_^HUCp4DLXe>kXxr=>8$7c_$Lai3B zktv%+`xw$D$D zk4fjwPVMXj14H2#FD#}uw1Un)w)6qCi3WPadA0teRc+PmmaQ$`b+r986teXV1P^x~ z={edP>gylq8|)hz8b0>SQ2)sA@lq=fP(wxCshjr15hN9>zc|*<3udSI%Y01@I=Bs55rfCbz zR7)z;mshRTOG+W3uQ6JY-@$y551CgK!z9^&S-PgBGm18^$62Yw3d?E3Nb7keetk(L zE%=>VOUlJ`R@L+2m;Mwc4u)edh*k)~j@84l1$Wf z@D^0yQ}`Ti!8h<7{0@I%C-&elp2ATa!%2){3={Y=uHY)B1-ip|>L(sv2H&Lfmi$D^ zN8~Ik6kYh1a0NCyYx_pvx2uy2JD2WFx4LG5<@Sv&uJ7-Dw`4=tn4YJ5WlvdM`@wVuB6&0uX=HsNghQfLVG4GeidO!wt9zU&CGa9)5;D;BQ1ci~~4?C-He4 z#|Tbg)Ov(arGXJ~?$lN^+4LEDP(V|R+x_4D;=R$IZhy<&zXe>)_1nRDxP8;L>RkS4 z8{xt&(#7rWdtzO#{@)H0_SDkl>GvH^ZyFvPKjH1~jSlrV9lzmI|L=zfXM~G-k%9;h z?D)Y=4*QA|tVnsVr8dBlUjQ|_&PW0qZoUhzLm+k_*;e<`fes@G+FoUJVh(q zbbUKpxWWN&spun#yj#%KgMM2;xd~W5{lkOxFD(LY30b4y_K+SV+`@Ww?@tiQz`%eF zSObk(WiadB7ygF2$=3sM0N#&BlbLzwR%b8AQGMAdOd#?7|2c{^cKQF`H^-W2aHVcOn<}?#g6Dn&n+%+g%6H0!wdZ?8ZL6ecdE+KC8vZ(W~X@K zJU#m7sG~`ZafWMRhtJezU4wp%J7)ZLmCdlq;tw1-Mz(Qt^_i3bWk4C&zyQx|k;0xw zwaS1ppbRV-kne+~3Pu4lkM7e!sM= ze63Zha7p28U0a--wU&BM6_LEm(C)1YY=R6rppB4f*yOqHaY z#&CuK?RAF%yX^z^ap&Fkr|_`Lu*3Ez6ezMs$tbepD2RNIe0+R-zuzODo2w#dfBf`U zcUVT~Potb{4k%y3FUJ@mihM*dB?;%6>T?UEj^e zieJgcs$XTbNuAoXG$sBV!~I5oezGt{{^CqtVvAGkFVD0ltgOuBQy`z7$sd7yhT+NC zDPqfKkbjPyr_LLU5sYPa?nm@9nQ1OtJfT(C@(C^9L94X(7Wo(0MOuGB#P1O2TyiP( zd=I=8@m+?~F4G2`kFkG+dF;yMV>tIRJJ%&$Oc&_lcb0#ZU7cK`OAz~Y*!9WeQ+Ay$ z)8<=LSZ|;=cuK&dGjZ4)T{(@wvc;;CDr-&g272!LtLy?>HBrC(jglQ?{?@6{SJfxI zSbF<$!aS)$p`@pJATsfa2~P|M(hHL$pEEYniwC(PSjJ_nxHzo-ZLr;HVO@J9C=-ls z#E}}+f*=j!K@haFLybl^Z~X5zYHWu>#)GbB4qNj^)dxHZRm=w6|LM8E@wvCxSEi)Dc`+}#1 zn`D+&y-*xmEEyy1Bs>I6b&WxEL9whYpoOlOT}h8irJaKw57St?2B$1ky+Sg<>&oWq zh-C(}maT0QwYGE5wgTR1%zj1U3;^`*e&;EWPIhQGh*{ERNfOJ>?!D~;E?#ujAKu&k zB3S=gcG_@5z`b*Kb8GYQohO^Y&eMkv?>v6iIYBou4-T&x=+8svVjDLJAq}gJ>v)OS zrN;ZK*e33`yNi@3Lg+t4B@mz?YfjWA2wkA+a|Z~B#`q2X zp1g!I%@YK%*^m;|BAT>6*Er5+i|#CJ)YV&NIpS${`#$K>xNah0@-VVjp$c1{>2eTI z9tD9Y!K|o2r|rJv16_-FlCa3&B!$_j?QX*NG~qxhc_=jz0GxVBQ(?l@Ww>7wM$8C_ zfn1nJUBGLPv^5k-!GOR>4sCVz%N zV%f~h3s{9j15Q~6B_bBhY$+4*Kz+c_m_tc4i;`&P718GV`|v(6VVD4Hrg^M@0_=_z zOQo*mJT4&D_52B(5kM>$vq~m-#H8dxH)fX(W<^oTUqrD2W+%WfY!*2p?yaI=Zkwk` zK7kHcS8}lnJT!g&kve=03_Z-&i3_s%V9jz@%#3Z>$FAdGa!jyuT(um$gze*o)v&7A I{>NVV7cB-4ng9R* diff --git a/.github/GENERATE_SUMMARY/__pycache__/__main__.py b/.github/GENERATE_SUMMARY/__pycache__/__main__.py deleted file mode 100644 index add2c011..00000000 --- a/.github/GENERATE_SUMMARY/__pycache__/__main__.py +++ /dev/null @@ -1,80 +0,0 @@ - - -''' -This file starts the server runs all the files in the repository -''' - -# %% -import cmipld -import importlib -import json -from collections import OrderedDict -import glob -import os -import sys -import re -# from p_tqdm import p_map -import tqdm - -relpath = __file__.replace('__main__.py', '') - -repo_url = cmipld.utils.git.url() -io_url = cmipld.utils.git.url2io(repo_url) - -branch = cmipld.utils.git.getbranch() -repopath = cmipld.utils.git.toplevel() -reponame = cmipld.utils.git.getreponame() - -whoami = cmipld.reverse_mapping()[io_url] - -print('-'*50) -print(f'Parsing repo: {whoami}') -print(f'Location: {repo_url}') -print(f'Github IO link: {io_url}') -print('-'*50) - - -def run(file): - if file == __file__: - return - - cmipld.utils.git.update_summary(f'Executing: {file}') - - try: - # this = importlib.import_module(os.path.abspath(file)) - - spec = importlib.util.spec_from_file_location("module.name", file) - this = importlib.util.module_from_spec(spec) - spec.loader.exec_module(this) # Load the module - - this.run(localhost, whoami, repopath, reponame) - - except Exception as e: - cmipld.utils.git.update_summary(f"Error in {file} : {e}") - - return - - -if __name__ == '__main__': - from cmipld.utils.offline import LD_server - - ldpath = cmipld.utils.git.ldpath() - - repos = { - 'https://wcrp-cmip.github.io/WCRP-universe/': 'universal', - # 'https://wcrp-cmip.github.io/MIP-variables/': 'variables', - # 'https://wcrp-cmip.github.io/CMIP6Plus_CVs/': 'cmip6plus' - } - - localserver = LD_server(repos=repos.items(), copy=[ - [ldpath, whoami]], override='y') - - localhost = localserver.start_server(8084) - cmipld.processor.replace_loader( - localhost, [list(i) for i in repos.items()]) - - files = glob.glob(relpath+'*.py') - - # p_map(run,files) - for file in tqdm.tqdm(files): - run(file) diff --git a/.github/GENERATE_SUMMARY/__pycache__/activity.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/activity.cpython-310.pyc deleted file mode 100644 index c1d2c91f8b90e5a04ab5d7cd9ce43ce896b5535c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 583 zcmYjNO>Yx15VgG@*@X525fZmvb6|a=7lf#)s1%f_YAA?EXl2%J;?(;g+aXG{oZt$7 z098tk{3TyGS zktke{DZxkt+mHu4%)=*W8}W$8J2H)VhbQ0Aw8QZP4Z3@nMdJZ>y^<9o6Q$MbJ52X~ zz&1fzuN}%g(SM8K;r$J`c?Dq60ypR<&|3mXZh?}A-^mv89sUwEk?C_ZL5;6QO#m3T zot;~VHfW-+_&NY7$#~PHwXPN-w{+8cs-&^$!c^rRmPep4;-a>59YE%Awu#!}AarqF z$Xan1%!GBM5SsY@*b!N|cr~wBAzfHAJ9nYq(Zx3_rf0^5oLTk@>4(sM_nKZAp$+A% zltQIK0X=cMa6*o-?t4v%?m}?=e}dDcmCB@w*GvPqSM8E4yOv61nTt%Vq;(xFYQ=J) hA3(YNrPX^69<_7Ni;6Fmc;Rnl5`Y99;K$^E`~~+WmQVly diff --git a/.github/GENERATE_SUMMARY/__pycache__/drs.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/drs.cpython-310.pyc deleted file mode 100644 index 6ae443e425af01c90513dc0c94c4a878d5ae91a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmYjO&1w`u5bmFu*~yX|)F22sZ^Oq z?*4$RY1&>nH1kCNB?8Cm2T=14z@i22&@Z631dv<?AXW$WP!RT`TvOjB!E9Km#0yeeJLa$C5-ujZo571wj)0>Lf+jr1evb)T_wBeh|I*QHdc zRKUzWpPa55eaVhTC#SFS<4=aA^U@Z}uk3v`&d!cLX8GiNG&(x_!h|;dMpQ3re--25 z5Xa;I>nGqQv5vvG{eNSoOIs?FD$#Ncw8W?4JijQF%ySo-R+ZKbv}_fhN$r2X@6wO@ a03P>sud7BZm3-qbWIRiZcJWiPOa21O&XSk_ diff --git a/.github/GENERATE_SUMMARY/__pycache__/experiment.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/experiment.cpython-310.pyc deleted file mode 100644 index f8719ad3ddaa6915fcbd20321d06d6b27f43648b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmYjPOKaRP5SC*bORHid>vp&F1zI zXAgfsRzcdFIW+g9{!0uG3i=t;d;+lO7eFTMfW(W3xpBvTzgr`0f9Xx0?zv8gM?HEfN5TEsLrPnJwCj0-ul%*CcHOQz3$BmDyE9=~LV zMrf09R!N~!p_DY)x1HT(txvM8$Ql7>-dGsSP8xV|al=kVR&fv0kCL zUaz1nin@nhir#t&4A{s1B_7k0|AG%qhf3SH6!>vwI5Q-_A(b>5E`s)!?Tp(NLVs%I zeltON0zG>SKoP|u8tRdR_)w2VNFrlsV8qO8i<&o>S`W~5g;uD2LxwhWX!U0_bSOSR z9rqS;puG-O_)7r$oQaGl@f{xAzJrz<{dA^KpqKo&ErGBA{TcLZ10z(RH?WB-GPg>J zfK-v_6)r4lQ1e%!m!I1O0k2A70NPjP+@a3ATG&s~_a}2V|GIE#6}*hXy~fm~wHq?8 zfvpai1;CH48rOs_)0G?Y z2+ga<==DPrNn>__(Y%FG-jXI=EnM*YxM;mWSLP+g=op;f z;6t>JvXKdE#9_{qL^G{jWeaf;x@Kn!qHv`Gfxtw(mITPJo9-lB@ zWUjJ8?V7t`5|4VNtn7$q8IMP*Mn5D_j{i>vWlBhquSPuX#gpiiiQY_PJveJG# zwoKXzPdm1%1QAa|s*Dkn$`&jQ{eY?J_C)|x!QqsZ3LZ;kCMg4D3h}J7qzF$`Wjap$ zh$}Po?_zjRVf{u8F^O$Ro%I1+;^HNxVRjy)(7)KWi{%!C5wmgszlwJntnB tndd1hOG7TjvbGZ7Lgy{ddk;Pz7fh^a%Bu>{4b~jBMIj8m? za6v*y$&r7mjPhi1cK8(eNd zpon6QBJ(61pO~k`Np3|JM$Dc$)ShGNtfQGrUFywAV0xezL3uZ8j+~Y%c39iM43!QRw)p&i=(A; zb`?W2k)*0?X%f89_*~Dna#-CPl`0z&Ouj_-^lTT#EB>cYp8jWxV@V zhCx45gV9;|rgzXg+BxaP$EW-IJ4f$Bc3Clz<*ZO~k>pI86KikMELCZlS6hz_3%EvT z15KWaQ4wtNGEKPL3jXfVIG#9-Ji>vU-6c(Orrk8pDo(Y#&`mp^1mH&<)8(F!b~43s zDU4>?krmIBc19}WQj@II_IN0ZZcDeCo`X^VzN~%oRefXb%SFNy@|{ST)cOhA}58nu+|)yrd(} Sw#=21=1=yKk2`pcbjTmUX9(T^ diff --git a/.github/GENERATE_SUMMARY/__pycache__/experiment_simplified.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/experiment_simplified.cpython-310.pyc deleted file mode 100644 index 49ee9afb719ac01f9cda565b73b78e9395e88934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 682 zcmYjN%W4}j6xCy1apGM_UFZ+YqBF~GN=OK93B@KPO+#lhD3HeuKWwxw31DWFWe(tu5>u(%(~qUu=S zcOn5xl%W!5xb!j)0_Hyk6hA@gy#$XT^=a^gvWSK>`UyEB>*X?P_-jF~nUKES8<;Qs^@rFu!Kmc5paxHvmdI|U^I%ZP z;>aLAGr_!=k&+v)Cb}@5^KOFaoXCkX9wnL>Z`=rBLe-Qdk&B-|9$1FwtMpPasZvTR z&P2k5;3~a3J)6(uG(8!dp1sLWKB+XBa9uRl>HGe$e}4S2pI=-K2FK^0w;bk*m$l$y z&ZtWn%cgRyKXF#8)%Nu#+?iJ&!+R?6BOw)>64D9^`Susk=u qvh3P~lGTEYnC!YYj&E&b3tl+#=xsTpjbMi^>a~Ul?85`JhyDWTthmqs diff --git a/.github/GENERATE_SUMMARY/__pycache__/frequency.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/frequency.cpython-310.pyc deleted file mode 100644 index baba5a4fdb213ad81fb2e2df37c2bfb1634cb0ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmY*X&2AGh5cbb{cM~-?C_<{Zamaz)BNtRrRRL91qN<@Fa#<~FC)w2dgY8vFw4C4y zFMui~;>0WY$|mrco)%W>NjL>iA+!qg=m!SF>fFq72 znm9`&F35ynB#pSH}mF0{CY4NT%NocB;%{$@Z|D+JXPXjBg$;$Mod*xx}j?K@JI9s32{h{uzCb; zzoXplM>N0Qg60s`*xHcXOfE=7`9rfZoS8z@oBG!v=^VbyWqO6{57gTsCD Wi=yI<6vyz@?g)hF03QN{1M(NJn5awu diff --git a/.github/GENERATE_SUMMARY/__pycache__/index.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/index.cpython-310.pyc deleted file mode 100644 index 5621a210288ae41edbeab0d14f485953acd4bc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmYjO&1xGl5SFy7^~NNJwxJNnq1P>Rb!#uBG^8ekViV$~rM@g%OYzFl{vgS?F`HYi z%?pHpeatKA+EZR3mv*$Jkb(JThSAJ7GpcuX`UvD^a8ta-2>tfKQwbsX2x{H}aKy1f z6K{#aC7BS6M6eEdu)#dsLu<+@k2Yiy@g9$_(WJ-m7$sW|P>V(hcKs?ZMJ6h%FCQ^` z_ye*E(&o~ksVDj`5jb8ygPKnO7R_;sZh_tsKyn9^Jp4u05O44mZK>JiXpCB)rELHh zbuW8&U|V_~z!>ppwZ$4;&&AZTRsW5W#-?*qR~i;aFdgNhv4svGayVPjE|~-_nwGLr z+yygX9VtZ;IU;KpEsHuYr3;(f7B2Lwx#(h<>zQ#O&uxB>^fT!7c*M?((1!86l0v0I z0W$i`>G;lb&5CMzy}`YQ!`QTe+V z53g`c_OX5eZW8MljNAP;Xu7acnN;y6*Fa2sD$cTVsYI4JY8oZ2>uJ%bd@8j6|E^0n b>=St2)x9rkzEI+Wzmf4QG1|s2$u{{5k6V)@ diff --git a/.github/GENERATE_SUMMARY/__pycache__/native-nominal-resolution.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/native-nominal-resolution.cpython-310.pyc deleted file mode 100644 index 81590a62b4b811eba12326941b9a7a028289b2ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmYjNO>Yx15VgG@*@X5&BP1jaTqBhA4K4^#l?YWRQPofo;jl8Xn|12_knIpPT5eq7 z51>lPk-ubdb^-1%_qw&nVnd91ly1YJIup}XdCf}$2&5Md50%o(X7Mq6b-t2s6~?jcD<4nA`_+6*SDDN z{{S{YT3QFHQ4^UyM^n`JY}5q6 zar?7#1HOqa1CWtSHeFilYANQHZhAu{jZK%PD)+EB0(B7=was+^k;B<0YLkP&#q&be zio0MTtRsaO#E!_y#p}Fcg>+%fZ004qx0jpqilLH9v`27pe3{Nvly0DAxox) zT9`_$tgK3Zxj?T7!^gT$oUD^fi&{13Wyr}p}i5LEECIL#&0e(OZ$X~sqoDu*4 diff --git a/.github/GENERATE_SUMMARY/__pycache__/nominal-resolution.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/nominal-resolution.cpython-310.pyc deleted file mode 100644 index 77405e0b3da475bb553c3610a09b94c8cc1a7e6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmYjPOKTKC5bo~TdF|YRs{@BBPYrtUzT)l(9 z5W@m>?UM+ckuJfAJ68?nOfYLaMOQ9!nKvO_kNGS(M_r%cUDR$~LoMpGv1#Qr<1x>* zJiWou^$Hh+dR!Zlad;)+ThmB2&we902W@WlqJ71siWtpPE-d2FD|} zR;le9FUitUFlk$w2DI14n+j&TjO%TV2so-&JTvdux8(;EL(1h1x)LrhO+B=gq Xbg+~aY$*7$T@w{R2+%BEB(vlna_Q`H diff --git a/.github/GENERATE_SUMMARY/__pycache__/product.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/product.cpython-310.pyc deleted file mode 100644 index 0ee328e6a40fcba064949e44f7ebeeeaa72a42e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmYjPO>5gg5S?9pST=D>Aq{O#J(c=Usi)==LPBavC@~>UQfeqd)oyG#D@)y7lg22} zlAH?dA1HzN*uS*bp7IxRX=h~`GBBeZc6Q#IH!9lg7NAAlpQG;t;Ezr2n~TXNx_XU) z0V4ti_DcoH>3|a8&b7;&IbrToxb~RG{5c)?tiggy7&I8^L#KIzZ=u&ArZq`&9`lKo zXSXD}`HMDl!t%^OYJvV+0}np>J9Kq`LBp6-@C)IuD5K2zK`q?5r>O{mf*dR>efH8;X#~ z)?>WXqnW>1U#2L}o!JV@SXqC8;Tu%&@!>hC$Ti9{Cz>qSo={0Eas&iEBXdM`49(cg zdnq!ddmU<=A=ifH9FH`7W!y~j{5Qxp_PpJR4i%RwV#y@qBIE)eMeld^P78SwZSU^v zt;O3%Dhh|09!)<*Z@azj{?%ZtZ`t!?9_qt-#IoA)oLsrQ8TCWy_s@eGan~ zIh};-qDT{=Hp06i>0p5&@yx3=>3GIZ^Q;t1HtmIrt+cd%j;yt6;82C}Pe(sFT96S7PK@{Gt;Oge#lWGj{z;Netf zLWP2ri9}&6vGzm#iF{tI5(msu)4crOWgdEfWGykc%{2GCx$e-6JBfIseV-+Vl*qU+Zf zIB+7N=T<67PJ5Jq@UDFBT@&sbZv z>hzW*H-FJ4UR<79=sTeQ*1%1O{vKWLU@&k%B; zoSubMs24eOp`w`Is6333aj|(B8qfGucuo#Hq&3r-JWfhg9E!e428xx#_)r%k$!{n^ zBHMtA(hMizYJJ&9dG5?*IL6xf3k=_&g3k}nNJXwto@-*rlgw71uG+G%%pb8~I`W1__II8%Zz4P>#;%z4|zdnb_f*OzFWm)u@)GP5_lJYRYl5`T(GPMF5_VcWiTs7T=kEM)q z!=!5Y8rWxH!;@jb^33`rGegY5@3-O62~z`Yea;NCK|Kw1ztix*Rr8R8n*i;oJt6ZX zBF~6g#6v4mk6gz56g(cAOzK$jk}1^6LE9)z4>Bpz)CRhgnXwHeO3C_SO3zifhv$@5 XHE6V)7kn(miu>srIf7ZTKxgSc923k* diff --git a/.github/GENERATE_SUMMARY/__pycache__/x_experiment_csv.cpython-310.pyc b/.github/GENERATE_SUMMARY/__pycache__/x_experiment_csv.cpython-310.pyc deleted file mode 100644 index de699409fba686f6b873f9ca5fa28ebcb4b37fc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1303 zcmY*Z-D?~-5SO&OcYAxE{!ILK6xwpezDr9X5K6G?m=dT>u$>wolx4k=eTw%hlFsK_ z_DaEh4SjEFupj%M^l#8>pZqW6q3LLyVpl@H8I5LsJDSZ$wuTl)%)WN0eS@j9g03sHLaR4qSfwtl{fdSz#rvq| z-2w;N?O}~q0jlRrNS-Di@Zk0%jNIyHQ;kCN$p6LyC@ol9u;h0bp#r^!Bnk{juI!op zU~j?RDIf{z{6S_Fh2G%8Hi^6=)LlWdYC+0a3$O;hF7;-$qWS{;v^VqeZwimr!K+?) z*O)eF^M=eCU~7S`39=2c1+oLOUHZ(?dGP5JwW1D;3q_;EW{Is5+a-1Y7q1#m(X4ie z-mcn6k!gX^Y!0Kmqb#~qc;K;I%)Lif_9e#X5FJ5jXLCQ#yNbOkrdf5FQFk6?W3=d{Cxs;Gml^yTW@7om=foY2katag2yaT zgHsV?qy8J2CK1h-9-jDNnkaUm{JcF0MfU7Is7G>ldjjnSpBS{QfFfUxd9t32<6|b)r$Vm7&DSN5b#e3qPM&r1`k~+o9@JH7SK~>qqAOv{vxsWzlqp@? zz6jygkiB*?!4swJG-I%tKp5*S=vtJ9K{QIG(v`_54Pvfc!Ll?9)aXu2pdi{Bi%46c zy3o#vFb10jD$uTpHtgaN)L3J#ZR0)!Rw$rRMI8=A!$1>Y=)#q!rfeEBjZgkW;&U*6 z*c-f-@Z}9?kZ>0DSp*Fk9KL)tNyXVj3*uB833;*sn}G=uz^UizOk9I^0Bj$>g#gm!)Zgh$NxwIj2LD_w=6 nMnT9lftncZ^4<^Ni!$unIHlu=J%_&vlIAbyB9q}VX^?*bcb#=h diff --git a/.github/GENERATE_SUMMARY/activity.py b/.github/GENERATE_SUMMARY/activity.py deleted file mode 100644 index 54dd9b7e..00000000 --- a/.github/GENERATE_SUMMARY/activity.py +++ /dev/null @@ -1,10 +0,0 @@ -import cmipld -from cmipld.utils.ldparse import name_entry - -me = __file__.split('/')[-1].replace('.py','') - -def run(io, whoami, path, name, **kwargs): - data = cmipld.get(f"{io}/project/{me}-list.json", depth=1).get(me) - - if not data: return None - return f"{path}/{name}_{me}.json", me, name_entry(data) diff --git a/.github/GENERATE_SUMMARY/drs.py b/.github/GENERATE_SUMMARY/drs.py deleted file mode 100644 index 545026db..00000000 --- a/.github/GENERATE_SUMMARY/drs.py +++ /dev/null @@ -1,10 +0,0 @@ -import cmipld -from cmipld.utils.ldparse import name_entry - -me = __file__.split('/')[-1].replace('.py','') - -def run(io, whoami, path, name, **kwargs): - data = cmipld.get(f"{io}/project/{me}-list.json", depth=0).get(me) - - if not data: return None - return f"{path}/{name}_{me}.json", me, data diff --git a/.github/GENERATE_SUMMARY/experiment.py b/.github/GENERATE_SUMMARY/experiment.py deleted file mode 100644 index d6f6f265..00000000 --- a/.github/GENERATE_SUMMARY/experiment.py +++ /dev/null @@ -1,9 +0,0 @@ -import cmipld -from cmipld.utils.ldparse import name_extract - -me = __file__.split('/')[-1].replace('.py','') - -def run(io, whoami, path, name, **kwargs): - data = cmipld.get(f"{io}/{me}/graph.jsonld", depth=0)["@graph"] - summary = name_extract(data) - return f"{path}/{name}_{me}.json", me, summary diff --git a/.github/GENERATE_SUMMARY/experiment_simplified.py b/.github/GENERATE_SUMMARY/experiment_simplified.py deleted file mode 100644 index c77dc35e..00000000 --- a/.github/GENERATE_SUMMARY/experiment_simplified.py +++ /dev/null @@ -1,12 +0,0 @@ -import cmipld -from cmipld.utils.ldparse import name_extract, key_extract, name_entry - -me = __file__.split('/')[-1].replace('.py','') - -def run(io, whoami, path, name, **kwargs): - data = cmipld.get(f"{io}/experiment/graph.jsonld", depth=1)["@graph"] - full = name_extract(data) - # summary = {k: key_extract(v, ['ui-label', 'description']) for k, v in full.items()} - summary = name_entry(data, 'ui-label') - - return f"{path}/{name}_{me}.json", me, summary diff --git a/.github/GENERATE_SUMMARY/frequency.py b/.github/GENERATE_SUMMARY/frequency.py deleted file mode 100644 index beb83531..00000000 --- a/.github/GENERATE_SUMMARY/frequency.py +++ /dev/null @@ -1,17 +0,0 @@ -import cmipld -from cmipld.utils.ldparse import name_entry - -me = __file__.split('/')[-1].replace('.py','') -print(me) - -def run(io, whoami, path, name, **kwargs): - - - print(cmipld.jsonld.expand(f"{io}/project/{me}-list.json")) - - data = cmipld.get(f"{io}/project/{me}-list.json", depth=2)[me] - print(data) - - if not data: return None - return f"{path}/{name}_{me}.json", me, data -# name_entry(data) diff --git a/.github/GENERATE_SUMMARY/index.py b/.github/GENERATE_SUMMARY/index.py deleted file mode 100644 index 4ed20b3b..00000000 --- a/.github/GENERATE_SUMMARY/index.py +++ /dev/null @@ -1,10 +0,0 @@ -import cmipld -from cmipld.utils.ldparse import name_entry - -me = __file__.split('/')[-1].replace('.py','') - -def run(io, whoami, path, name, **kwargs): - data = cmipld.get(f"{io}/project/{me}-list.json", depth=0).get(me) - - if not data: return None - return f"{path}/{name}_{me}.json", me, data \ No newline at end of file diff --git a/.github/GENERATE_SUMMARY/native-nominal-resolution.py b/.github/GENERATE_SUMMARY/native-nominal-resolution.py deleted file mode 100644 index 63917f31..00000000 --- a/.github/GENERATE_SUMMARY/native-nominal-resolution.py +++ /dev/null @@ -1,10 +0,0 @@ -import cmipld -from cmipld.utils.ldparse import name_entry - -me = __file__.split('/')[-1].replace('.py','') - -def run(io, whoami, path, name, **kwargs): - data = cmipld.get(f"{io}/project/{me}-list.json", depth=1).get(me) - - if not data: return None - return f"{path}/{name}_{me}.json", me, data diff --git a/.github/GENERATE_SUMMARY/required-global-attributes.py b/.github/GENERATE_SUMMARY/required-global-attributes.py deleted file mode 100644 index 7c4a4708..00000000 --- a/.github/GENERATE_SUMMARY/required-global-attributes.py +++ /dev/null @@ -1,10 +0,0 @@ -import cmipld -from cmipld.utils.ldparse import name_entry - -me = __file__.split('/')[-1].replace('.py','') - -def run(io, whoami, path, name, **kwargs): - data = cmipld.get(f"{io}/project/graph.jsonld", depth=2)["@graph"] - entry = next((item for item in data if item.get('id') == f'{me}-list'), None) - if not entry: return None - return f"{path}/{name}_{me}.json", me, name_entry(entry) diff --git a/.github/GEN_ISSUE_TEMPLATE/README.md b/.github/GEN_ISSUE_TEMPLATE/README.md deleted file mode 100644 index e1bfd434..00000000 --- a/.github/GEN_ISSUE_TEMPLATE/README.md +++ /dev/null @@ -1,231 +0,0 @@ -# CSV Template System for GitHub Issue Forms - -A simple system for generating GitHub issue templates from CSV field definitions and Python data files. Creates CMIP7-compliant Essential Model Documentation (EMD) forms. - -## How It Works - -Each template consists of two files: - -``` -templates/ -├── template_name.csv # Field definitions -├── template_name.py # Configuration and CV data -└── ... -``` - - - -## CSV Field Structure - -Each CSV defines form fields with these columns: - -| Column | Description | Example | -|--------|-------------|---------| -| `field_order` | Order of fields (1, 2, 3...) | `5` | -| `field_type` | Type of form field | `dropdown`, `input`, `textarea`, `multi-select`, `markdown` | -| `field_id` | Unique identifier | `component_name` | -| `label` | Display label | `Component Name` | -| `description` | Help text (supports `\n` for line breaks) | `Enter the name\nRequired for CMIP7` | -| `data_source` | Data source from Python file | `realms`, `licenses`, `none` | -| `required` | Required field | `true`, `false` | -| `placeholder` | Placeholder text | `e.g., ECHAM6.3` | -| `options_type` | How to format options | `dict_keys`, `list`, `dict_multiple` | -| `default_value` | Default selection | `0` | - -## Field Types - -### `input` - Text Input -Single-line text entry. - -```csv -3,input,name,Name,The name of your model,none,true,"e.g., CESM2",, -``` - -### `textarea` - Multi-line Text -Large text area for descriptions. - -```csv -5,textarea,description,Description,Scientific model overview,none,true,"Describe scientific basis",, -``` - -### `dropdown` - Single Select -Choose one option from a list. - -```csv -4,dropdown,license,License,Select the model license,licenses,true,,dict_keys, -``` - -### `multi-select` - Multiple Select -Choose multiple options from a list. - -```csv -6,multi-select,components,Components,Select all model components,realms,true,,dict_multiple, -``` - -### `markdown` - Instructions -Formatted text (no user input). - -```csv -1,markdown,header,Header,"# Instructions\n\nPlease complete all required fields.",none,false,,, -``` - -## Options Types - -Controls how dropdown options are generated from Python data: - -### `dict_keys` - Dictionary Keys -Uses keys from dictionary data. - -```python -'licenses': { - 'MIT': {'id': 'MIT', 'validation-key': 'MIT'}, - 'GPL': {'id': 'GPL', 'validation-key': 'GPL'} -} -``` -→ Options: `["MIT", "GPL"]` - -### `list` - Simple List -Uses list items directly. - -```python -'priorities': ['High', 'Medium', 'Low'] -``` -→ Options: `["High", "Medium", "Low"]` - -### `dict_multiple` - Multi-Select Dictionary -For multi-select fields using dictionary keys. - -```python -'realms': { - 'atmosphere': {'id': 'atmosphere'}, - 'ocean': {'id': 'ocean'} -} -``` -→ Multi-select options: `["atmosphere", "ocean"]` - -### `hardcoded` - Hardcoded Options -Uses predefined options from Python file. - -```python -'status_options': ['Active', 'Inactive'] -``` -→ Options: `["Active", "Inactive"]` - -### `list_with_na` - List with "Not applicable" -Adds "Not applicable" as first option. - -→ Options: `["Not applicable", "option1", "option2"]` - -### `dict_with_extra` - Dictionary + Extras -Dictionary keys plus hardcoded additional options. - -→ Options: `["CV_option1", "CV_option2", "Open Source", "Proprietary"]` - -## Python Configuration Files - -Structure for template configuration: - -```python -# Required template configuration -TEMPLATE_CONFIG = { - 'name': 'Display Name', - 'description': 'Template description', - 'title': '[EMD] Template Title', - 'labels': ['emd-submission', 'category'], - 'issue_category': 'category' # Usually matches last label -} - -# Data for form options -DATA = { - 'cv_name': { - 'option1': {'id': 'option1', 'validation-key': 'option1'}, - 'option2': {'id': 'option2', 'validation-key': 'option2'} - }, - 'simple_list': ['item1', 'item2'], - 'field_id_options': ['Choice A', 'Choice B'] # For hardcoded options -} -``` - -## CMIPLD Integration - -For controlled vocabularies from the WCRP universe: - -```python -import cmipld -from cmipld.utils.ldparse import * - -DATA = { - # Load from universal repository - 'realms': name_multikey_extract( - cmipld.get('universal:realm/graph.jsonld')['@graph'], - ['id','validation-key','ui-label'],'validation-key' - ), - - # Add custom "none" option + loaded data - 'calendars': { - 'no-calendar': {'id': 'no-calendar', 'validation-key': 'no-calendar'}, - ** name_multikey_extract( - cmipld.get('universal:model-calendar/graph.jsonld')['@graph'], - ['id','validation-key','ui-label'],'validation-key' - ) - }, - - # Hardcoded data for CVs not in universal repo - 'grid_descriptors': ['N48', 'N96', 'ORCA1', 'T63'] -} -``` - -## Generation Commands - -```bash - - -# Generate all templates -python per_file_generator.py - -# Custom directories -python per_file_generator.py -t ./templates -o ./github_templates - -``` - -## Generated Output Format - -Creates GitHub-compliant YAML: - -```yaml -name: Model Component Submission -description: Submit metadata for a model component -title: "[EMD] Model Component Submission" -labels: ["emd-submission", "component"] -body: - - type: input - id: name - attributes: - label: Name - description: The name of your component - placeholder: "e.g., ECHAM6.3" - validations: - required: true - - - type: dropdown - attributes: - multiple: true - label: Components - description: | - Select all model components. - Select all that apply. - options: - - "atmosphere" - - "ocean" - - "land" -``` - -## Adding New Templates - -1. **Create CSV file**: `.github/GEN_ISSUE_TEMPLATE/my_template.csv` -2. **Create Python file**: `.github/GEN_ISSUE_TEMPLATE/my_template.py` -3. **Run generator**: `template_generator` (as installed with cmipld) - -## Automated workflow. -The workflow `issue-templates.yml` runs when the GEN_ISSUE_TEMPLATE folder is updates. -The workflow also has a cron trigger. diff --git a/.github/GEN_ISSUE_TEMPLATE/deactivated/.DS_Store b/.github/GEN_ISSUE_TEMPLATE/deactivated/.DS_Store deleted file mode 100644 index 080afa912247ba19ac023dca2132549c3009beea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKyG{c^474FdB%07s?iV2O2dgL))OVDuOY8A^ zZSUSlw+|7~>GS=S$V5cOXhfwkAaoB7okTEEt;SM1d5|si<3ORm=;GSXvD%fq%3Qv$ ze+BQ8T*9}LmzzzuTx_}pqDj>|TKh18Mc;1~w({1`*Y%HlE0QW1NCuLDWFQ$h3IjN^ zDdRK8)X6|HkPLh=!2O}15o=&`w5SQ1p=reHY-3ibCYy2{UkNkd0_L6~Q;GZ#| zquK3jijRu3_2Bb())uroGz#My4G8SsB>)}nBNsO4', - 'labels': ['cmip7', 'discussion'], - 'issue_category': 'discussion' -} - -# Data for this template -DATA = { - 'participation_options': [ - 'General comments and feedback', - 'Technical expertise', - 'Use case examples' - ] -} diff --git a/.github/GEN_ISSUE_TEMPLATE/experiment.csv b/.github/GEN_ISSUE_TEMPLATE/experiment.csv deleted file mode 100644 index 62b14273..00000000 --- a/.github/GEN_ISSUE_TEMPLATE/experiment.csv +++ /dev/null @@ -1,22 +0,0 @@ -field_order,field_type,field_id,label,description,data_source,required,placeholder,options_type,default_value -1,markdown,header,Generic Experiment Information,"####\n## Generic Experiment information\n\nPlease fill in the information below.",none,false,,, -2,input,label,Experiment ID,"There are rules for constructing acceptable experiment names which can be found in this guidance document (https://doi.org/10.5281/zenodo.14929768).\n\nNote: This name must be unique across all experiments.",none,true,"e.g., piClim-CH4, hist-GHG, amip-p4k",, -3,input,long_label,Experiment Title,"A short phrase that can help in interpreting the unique experiment IDs.\n\nAs examples, the CMIP6 titles are listed at https://wcrp-cmip.github.io/CMIP6_CVs/docs/CMIP6_experiment_id.html in the third column labeled experiments.",none,true,"e.g., AMIP plus 4K sea surface temperature",, -4,textarea,description,Description,"Please provide:\n > 1. Detailed experiment configuration\n > 2. Required model settings\n > 3. Experiment conditions\n > 4. Links to relevant references\n > 5. Similarities to CMIP6 experiments\n > 6. Forcing differences from parent experiment",none,true,Describe the experiment configuration conditions and requirements...,, -5,dropdown,activity,MIP / Activity ID (registered),"The MIP / activity owning the experiment\n\nPlease select a parent from the list below. Note: phases are not considered separate activies.",activity,true,,list, -6,input,activity_other,MIP / Activity ID (unregistered),Please enter your MIP / activity ID below if it does not appear in the list above. Leave blank otherwise.,none,false,,, -7,markdown,parent_header,Parent Information and Tier,"####\n## Parent information and Tier",none,false,,, -8,dropdown,parent_experiment,Parent Experiment,"Select the experiment that provides initial conditions.\nPlease note that scenarioMIP experiment names are under discussion and are likely to change\n\nPlease select a parent from the list below.",parent_experiment,true,,list, -9,input,parent_experiment_other,Custom Parent Experiment,Only fill this if your parent experiment is not in the list above.,none,false,"e.g., new-experiment-2024",, -10,input,sub_experiment,Sub-experiment,"The list of sub-excleperiment IDs where relevant. For most experiments this will be none",none,true,"e.g., none",, -11,dropdown,tier,Priority Tier,"Select the experiment's priority level:\n\n - Tier 1: Essential to primary scientific goals\n - Tier 2: Major scientific value\n - Tier 3: Useful but lower priority",tier,true,,list, -12,markdown,model_components_header,Model Component Requirements,"####\n## Model Component Requirements\n\nSelect the required and optional model components for this experiment:\n\n \n \n > * AER : Aerosol treatment in an atmospheric model where concentrations are calculated based on emissions, transformation, and removal processes (rather than being prescribed or omitted entirely)\n > * AGCM : Atmospheric general circulation model run with prescribed ocean surface conditions and usually a model of the land surface\n > * AOGCM : Coupled atmosphere-ocean global climate model, additionally including explicit representation of at least the land and sea ice\n > * BGC : Biogeochemistry model component that at the very least accounts for carbon reservoirs and fluxes in the atmosphere, terrestrial biosphere, and ocean\n > * CHEM : Chemistry treatment in an atmospheric model that calculates atmospheric oxidant concentrations (including at least ozone), rather than prescribing them\n > * ISM : Ice-sheet model that includes ice-flow\n > * LAND : Land model run uncoupled from the atmosphere\n > * OGCM : Ocean general circulation model run uncoupled from an AGCM but, usually including a sea-ice model\n > * RAD : Radiation component of an atmospheric model run offline\n > * SLAB : Slab-ocean used with an AGCM in representing the atmosphere-ocean coupled system",none,false,,, -13,multi-select,required_model_realms,Source type codes for required model components,"Components that must be included in models when running this experiment.\nSee note 15 in https://wcrp-cmip.github.io/WGCM_Infrastructure_Panel/Papers/CMIP6_global_attributes_filenames_CVs_v6.2.7.pdf for full descriptions\n\n* Select Multiple *",model_components,false,,list, -14,multi-select,model_realms,Source type codes for additional allowed model components,"Components that may be included in models when running this experiment in addition to the required components listed above.\nSee note 15 in https://wcrp-cmip.github.io/WGCM_Infrastructure_Panel/Papers/CMIP6_global_attributes_filenames_CVs_v6.2.7.pdf for full description\n\n* Select Multiple *",model_components,false,,list, -15,markdown,duration_header,Experiment Duration Start and End,"####\n## Experiment duration, start and end\nSome additional information on the experiment",none,false,,, -16,input,start,Start Date,"For experiments initialized on a particular historical date, enter that date in the form YYYY-MM-DD.\n\n If a set of sub-experiments are initialized at different times, list all the start times requested.\n\n - For example, for an historical simulation initialized at the beginning of 1850, enter 1850-01-01.\n - For a set of DCPP prediction runs, enter all dates of the first full forecast/hindcast year (e.g., 1960, 1970, 1980, 1990, 2000, 2010).\n - If there is no specific start date please enter the word none",none,false,"e.g., 1850-01-01 or 1960,1970,1980",, -17,input,min-number-yrs-per-sim,(Minimum) Number of Years,"For most experiments this will be the actual length of the desired simulation.\n\nCalculation : (end_year - start_year + 1)\n- For example, 172 would be specified for a run initialized in 1850-01-01 and extending to 2022-01-01.",none,true,"e.g., 172",, -18,markdown,metadata_header,Issue Handling Metadata,"####\n## Issue Handling Metadata\n\nThe following options are only here such that the github actions know what to do with the information provided above.\n\nIn almost all cases, these do not require to be changed.",none,false,,, -39,dropdown,issue_category,Issue Type,This is pre-set and cannot be changed.,issue_category,true,,hardcoded,0 -40,dropdown,issue_kind,Issue Kind,Select whether this is a new submission or modification of existing entry.,issue_kind,true,,hardcoded,0 - diff --git a/.github/GEN_ISSUE_TEMPLATE/experiment.py b/.github/GEN_ISSUE_TEMPLATE/experiment.py deleted file mode 100644 index 9fe2c13a..00000000 --- a/.github/GEN_ISSUE_TEMPLATE/experiment.py +++ /dev/null @@ -1,34 +0,0 @@ -# CMIPLD Experiment Template Configuration - -TEMPLATE_CONFIG = { - 'name': 'Add/Modify: Experiment', - 'description': 'Type: experiment', - 'title': 'Add/Modify: Experiment: ', - 'labels': ['delta', 'experiment', 'Review'], - 'issue_category': ['experiment'] -} - -import cmipld -from cmipld.utils.ldparse import * - -# Data for this template -DATA = { - 'activity': dict(cmipld.utils.ldparse.name_extract(cmipld.get('cmip7:project/activity-list.json')['activity'])), - - 'parent_experiment': { - "Custom Parent: specify in 'Parent experiment other' field": {'id': 'custom-parent', 'validation-key': 'custom-parent'}, - 'no-parent': {'id': 'no-parent', 'validation-key': 'no-parent'}, - ** name_multikey_extract( - cmipld.get('cmip7:experiment/graph.jsonld',depth=0)['@graph'], - ['id','validation-key','ui-label'],'validation-key' - ), - }, - 'tier': ['Tier 1', 'Tier 2', 'Tier 3'], - 'model_components': name_multikey_extract( - cmipld.get('universal:source-type/graph.jsonld',depth=0)['@graph'], - ['id','validation-key','ui-label'],'validation-key' - ), - 'milestone': ['Review'], - 'issue_kind': ['new', 'modify'] -} - diff --git a/.github/GEN_ISSUE_TEMPLATE/general_issue.csv b/.github/GEN_ISSUE_TEMPLATE/general_issue.csv deleted file mode 100644 index 6fd7fee1..00000000 --- a/.github/GEN_ISSUE_TEMPLATE/general_issue.csv +++ /dev/null @@ -1,10 +0,0 @@ -field_order,field_type,field_id,label,description,data_source,required,placeholder,options_type,default_value -1,markdown,header,Header,"## General Issue Report\n\nPlease provide details about your issue, bug report, or feature request.",none,false,,, -2,dropdown,issue_type,Issue Type,What kind of issue are you reporting?,issue_type_options,true,,list, -3,multi-select,affected_areas,Affected Areas,"Which parts of WCRP-universe does this issue affect?\n\n*Select multiple if applicable*",affected_areas_options,true,,list, -4,textarea,description,Description,"Provide a clear and detailed description of the issue.\n\nFor bugs: What happened? What did you expect to happen?\nFor features: What would you like to see added/changed?",none,true,"Describe your issue in detail...\n\nInclude any relevant context, examples, or use cases.",, -6,textarea,expected_behavior,Expected/Desired Behavior,What should happen instead? What would you like to see?,none,false,The system should...,, -7,textarea,steps_to_reproduce,Steps to Reproduce (for bugs),If reporting a bug provide step-by-step instructions to reproduce the issue.,none,false,"1. Go to...\n2. Click on...\n3. See error...",, -10,markdown,metadata_header,Metadata,## Metadata,none,false,,, -11,dropdown,priority,Priority,How urgent is this issue?,priority_options,true,,list,2 -12,multi-select,help_needed,Help Needed,Do you need help with this issue?,help_needed_options,false,,list, diff --git a/.github/GEN_ISSUE_TEMPLATE/general_issue.py b/.github/GEN_ISSUE_TEMPLATE/general_issue.py deleted file mode 100644 index 03cfe48f..00000000 --- a/.github/GEN_ISSUE_TEMPLATE/general_issue.py +++ /dev/null @@ -1,42 +0,0 @@ -# General Issue Template Configuration - -TEMPLATE_CONFIG = { - 'name': 'General Issue', - 'description': 'Report a general issue, bug, or request', - 'title': 'Issue: ', - 'labels': ['cmip7', 'general'], - 'issue_category': 'general' -} - -# Data for this template -DATA = { - 'issue_type_options': [ - 'Bug Report', - 'Feature Request', - 'Documentation Issue', - 'Data Quality Issue', - 'Process Improvement', - 'Other' - ], - 'affected_areas_options': [ - 'Controlled Vocabularies (CVs)', - 'Documentation', - 'GitHub Actions/Workflows', - 'Data Files', - 'Scripts/Tools', - 'Issue Templates', - 'General Repository Structure', - 'All/Multiple Areas' - ], - 'priority_options': [ - 'Critical - Blocking work', - 'High - Important issue', - 'Medium - Should be addressed', - 'Low - Nice to fix' - ], - 'help_needed_options': [ - 'I can work on this myself', - 'I need help implementing a solution', - "I'm just reporting this issue" - ] -} diff --git a/.github/ISSUE_TEMPLATE/discussion.yml b/.github/ISSUE_TEMPLATE/discussion.yml deleted file mode 100644 index 95069e46..00000000 --- a/.github/ISSUE_TEMPLATE/discussion.yml +++ /dev/null @@ -1,118 +0,0 @@ -name: Start a Discussion -description: Open a topic for discussion or request community input -title: "Discussion: " -labels: ['cmip7', 'discussion'] -body: - - type: markdown - attributes: - value: | - ## Discussion Topic - - Use this template to start a discussion, gather community input, or propose ideas for consideration. - - - type: input - id: topic_summary - attributes: - label: Topic Summary - description: Provide a brief summary of what you'd like to discuss. - placeholder: "In one or two sentences, what is this discussion about?" - validations: - required: true - - - type: textarea - id: background - attributes: - label: Background/Context - description: | - Provide background information to help others understand the discussion topic. - - Include: - - Why this discussion is needed - - Current situation or problem - - Any relevant history or previous discussions - placeholder: "Provide context for this discussion...\n\nWhy is this important now?\nWhat prompted this discussion?" - validations: - required: true - - - type: textarea - id: main_points - attributes: - label: Main Discussion Points - description: | - What are the key points or questions you'd like the community to address? - - Use bullet points or numbered lists for clarity. - placeholder: "1. Should we consider...\n2. What are the implications of...\n3. How should we approach..." - validations: - required: true - - - type: textarea - id: proposed_options - attributes: - label: Options/Proposals (if applicable) - description: If you have specific options or proposals to discuss list them here. - placeholder: "Option A: We could...\n- Pros:\n- Cons:\n\nOption B: Alternatively...\n- Pros:\n- Cons:" - - - type: textarea - id: stakeholders - attributes: - label: Relevant Stakeholders - description: | - Who should be involved in this discussion? - - You can @mention specific people or teams, or describe groups that should provide input. - placeholder: "- Data providers\n- @username\n- Teams working on..." - - - type: input - id: timeline - attributes: - label: Timeline/Urgency - description: Is there a deadline for this discussion? When do you need input by? - placeholder: "e.g., Need input by end of month, No specific deadline" - - - type: textarea - id: desired_outcome - attributes: - label: Desired Outcome - description: | - What do you hope to achieve from this discussion? - - Examples: - - Consensus on approach - - List of requirements - - Decision on policy - - Community feedback - placeholder: "By the end of this discussion we should have..." - validations: - required: true - - - type: textarea - id: related_resources - attributes: - label: Related Resources - description: Link to any relevant documents previous discussions or external resources. - placeholder: "- Related issue: #123\n- Previous discussion: [link]\n- Reference document: [link]" - - - type: markdown - attributes: - value: | - ## How to Participate - - 👋 **Everyone is welcome to contribute to this discussion!** - - Please: - - Keep comments constructive and on-topic - - Consider all perspectives - - Provide examples or evidence where helpful - - Be respectful of different viewpoints - - - type: dropdown - id: participation_type - attributes: - multiple: true - label: Participation Needed - description: What kind of participation are you looking for? - options: - - "General comments and feedback" - - "Technical expertise" - - "Use case examples" diff --git a/.github/ISSUE_TEMPLATE/experiment.yml b/.github/ISSUE_TEMPLATE/experiment.yml deleted file mode 100644 index b17a887b..00000000 --- a/.github/ISSUE_TEMPLATE/experiment.yml +++ /dev/null @@ -1,346 +0,0 @@ -name: "Add/Modify: Experiment" -description: "Type: experiment" -title: "Add/Modify: Experiment: " -labels: ['delta', 'experiment', 'Review'] -body: - - type: markdown - attributes: - value: | - #### - ## Generic Experiment information - - Please fill in the information below. - - - type: input - id: label - attributes: - label: Experiment ID - description: | - There are rules for constructing acceptable experiment names which can be found in this guidance document (https://doi.org/10.5281/zenodo.14929768). - - Note: This name must be unique across all experiments. - placeholder: "e.g., piClim-CH4, hist-GHG, amip-p4k" - validations: - required: true - - - type: input - id: long_label - attributes: - label: Experiment Title - description: | - A short phrase that can help in interpreting the unique experiment IDs. - - As examples, the CMIP6 titles are listed at https://wcrp-cmip.github.io/CMIP6_CVs/docs/CMIP6_experiment_id.html in the third column labeled experiments. - placeholder: "e.g., AMIP plus 4K sea surface temperature" - validations: - required: true - - - type: textarea - id: description - attributes: - label: Description - description: | - Please provide: - > 1. Detailed experiment configuration - > 2. Required model settings - > 3. Experiment conditions - > 4. Links to relevant references - > 5. Similarities to CMIP6 experiments - > 6. Forcing differences from parent experiment - placeholder: "Describe the experiment configuration conditions and requirements..." - validations: - required: true - - - type: dropdown - id: activity - attributes: - label: MIP / Activity ID (registered) - description: | - The MIP / activity owning the experiment - - Please select a parent from the list below. Note: phases are not considered separate activies. - options: - - "AerChemMIP" - - "C4MIP" - - "CFMIP" - - "CMIP" - - "DAMIP" - - "DCPP" - - "GeoMIP" - - "LMIP" - - "PMIP" - - "RFMIP" - - "ScenarioMIP" - validations: - required: true - - - type: input - id: activity_other - attributes: - label: MIP / Activity ID (unregistered) - description: | - Please enter your MIP / activity ID below if it does not appear in the list above. Leave blank otherwise. - - - type: markdown - attributes: - value: | - #### - ## Parent information and Tier - - - type: dropdown - id: parent_experiment - attributes: - label: Parent Experiment - description: | - Select the experiment that provides initial conditions. - Please note that scenarioMIP experiment names are under discussion and are likely to change - - Please select a parent from the list below. - options: - - "Custom Parent: specify in 'Parent experiment other' field" - - "no-parent" - - "1pctCO2-bgc" - - "1pctCO2-rad" - - "1pctCO2" - - "abrupt-0p5CO2" - - "abrupt-0p5xCO2" - - "abrupt-127k" - - "abrupt-2xCO2" - - "abrupt-4xCO2-1950" - - "abrupt-4xCO2" - - "amip-m4K" - - "amip-p4K-SST-rad" - - "amip-p4K-SST-turb" - - "amip-p4K" - - "amip-piForcing" - - "amip" - - "control-1950" - - "dcppB-forecast-cmip6" - - "esm-flat10-cdr" - - "esm-flat10-zec" - - "esm-flat10" - - "esm-hist" - - "esm-piControl" - - "esm-up2p0-gwl2p0" - - "esm-up2p0" - - "G7-1p5K-SAI" - - "highres-yr2020" - - "highresSST-p2K-pat" - - "highresSST-p4K-pat" - - "highresSST-p4k-uni" - - "highresSST-present" - - "hist-1950" - - "hist-aer" - - "hist-GHG" - - "hist-irr" - - "hist-nat" - - "hist-noFire" - - "hist-noirr" - - "hist-piAer" - - "hist-piAQ" - - "hist-piSLCF" - - "historical" - - "Initialised-prediction-2025-2036" - - "land-hist" - - "LIGabrupt" - - "piClim-2xBVOC" - - "piClim-2xDMSpPMOA" - - "piClim-2xdust" - - "piClim-2xfire" - - "piClim-2xss" - - "piClim-2xWet" - - "piClim-4xCO2" - - "piClim-aer" - - "piClim-anthro" - - "piClim-AQ" - - "piClim-BC" - - "piClim-CH4" - - "piClim-control" - - "piClim-HC" - - "piClim-histaer" - - "piClim-histall" - - "piClim-N2O" - - "piClim-NH3" - - "piClim-NOx" - - "piClim-O3" - - "piClim-OC" - - "piClim-ODS" - - "piClim-p4K" - - "piClim-SO2" - - "piClim-VOC" - - "piControl" - - "spinup-1950" - - "SSPX-SLCF" - validations: - required: true - - - type: input - id: parent_experiment_other - attributes: - label: Custom Parent Experiment - description: Only fill this if your parent experiment is not in the list above. - placeholder: "e.g., new-experiment-2024" - - - type: input - id: sub_experiment - attributes: - label: Sub-experiment - description: | - The list of sub-excleperiment IDs where relevant. For most experiments this will be none - placeholder: "e.g., none" - validations: - required: true - - - type: dropdown - id: tier - attributes: - label: Priority Tier - description: | - Select the experiment's priority level: - - - Tier 1: Essential to primary scientific goals - - Tier 2: Major scientific value - - Tier 3: Useful but lower priority - options: - - "Tier 1" - - "Tier 2" - - "Tier 3" - validations: - required: true - - - type: markdown - attributes: - value: | - #### - ## Model Component Requirements - - Select the required and optional model components for this experiment: - - - - > * AER : Aerosol treatment in an atmospheric model where concentrations are calculated based on emissions, transformation, and removal processes (rather than being prescribed or omitted entirely) - > * AGCM : Atmospheric general circulation model run with prescribed ocean surface conditions and usually a model of the land surface - > * AOGCM : Coupled atmosphere-ocean global climate model, additionally including explicit representation of at least the land and sea ice - > * BGC : Biogeochemistry model component that at the very least accounts for carbon reservoirs and fluxes in the atmosphere, terrestrial biosphere, and ocean - > * CHEM : Chemistry treatment in an atmospheric model that calculates atmospheric oxidant concentrations (including at least ozone), rather than prescribing them - > * ISM : Ice-sheet model that includes ice-flow - > * LAND : Land model run uncoupled from the atmosphere - > * OGCM : Ocean general circulation model run uncoupled from an AGCM but, usually including a sea-ice model - > * RAD : Radiation component of an atmospheric model run offline - > * SLAB : Slab-ocean used with an AGCM in representing the atmosphere-ocean coupled system - - - type: dropdown - id: required_model_realms - attributes: - multiple: true - label: Source type codes for required model components - description: | - Components that must be included in models when running this experiment. - See note 15 in https://wcrp-cmip.github.io/WGCM_Infrastructure_Panel/Papers/CMIP6_global_attributes_filenames_CVs_v6.2.7.pdf for full descriptions - - * Select Multiple * - options: - - "AER" - - "AGCM" - - "AOGCM" - - "BGC" - - "CHEM" - - "gridded_insitu" - - "ISM" - - "LAND" - - "OGCM" - - "RAD" - - "reanalysis" - - "satellite_blended" - - "satellite_retrieval" - - "SLAB" - - - type: dropdown - id: model_realms - attributes: - multiple: true - label: Source type codes for additional allowed model components - description: | - Components that may be included in models when running this experiment in addition to the required components listed above. - See note 15 in https://wcrp-cmip.github.io/WGCM_Infrastructure_Panel/Papers/CMIP6_global_attributes_filenames_CVs_v6.2.7.pdf for full description - - * Select Multiple * - options: - - "AER" - - "AGCM" - - "AOGCM" - - "BGC" - - "CHEM" - - "gridded_insitu" - - "ISM" - - "LAND" - - "OGCM" - - "RAD" - - "reanalysis" - - "satellite_blended" - - "satellite_retrieval" - - "SLAB" - - - type: markdown - attributes: - value: | - #### - ## Experiment duration, start and end - Some additional information on the experiment - - - type: input - id: start - attributes: - label: Start Date - description: | - For experiments initialized on a particular historical date, enter that date in the form YYYY-MM-DD. - - If a set of sub-experiments are initialized at different times, list all the start times requested. - - - For example, for an historical simulation initialized at the beginning of 1850, enter 1850-01-01. - - For a set of DCPP prediction runs, enter all dates of the first full forecast/hindcast year (e.g., 1960, 1970, 1980, 1990, 2000, 2010). - - If there is no specific start date please enter the word none - placeholder: "e.g., 1850-01-01 or 1960,1970,1980" - - - type: input - id: min-number-yrs-per-sim - attributes: - label: (Minimum) Number of Years - description: | - For most experiments this will be the actual length of the desired simulation. - - Calculation : (end_year - start_year + 1) - - For example, 172 would be specified for a run initialized in 1850-01-01 and extending to 2022-01-01. - placeholder: "e.g., 172" - validations: - required: true - - - type: markdown - attributes: - value: | - #### - ## Issue Handling Metadata - - The following options are only here such that the github actions know what to do with the information provided above. - - In almost all cases, these do not require to be changed. - - - type: dropdown - id: issue_category - attributes: - label: Issue Type - description: This is pre-set and cannot be changed. - options: - default: 0 - validations: - required: true - - - type: dropdown - id: issue_kind - attributes: - label: Issue Kind - description: Select whether this is a new submission or modification of existing entry. - options: - default: 0 - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/general_issue.yml b/.github/ISSUE_TEMPLATE/general_issue.yml deleted file mode 100644 index a36a9231..00000000 --- a/.github/ISSUE_TEMPLATE/general_issue.yml +++ /dev/null @@ -1,104 +0,0 @@ -name: General Issue -description: Report a general issue, bug, or request -title: "Issue: " -labels: ['cmip7', 'general'] -body: - - type: markdown - attributes: - value: | - ## General Issue Report - - Please provide details about your issue, bug report, or feature request. - - - type: dropdown - id: issue_type - attributes: - label: Issue Type - description: What kind of issue are you reporting? - options: - - "Bug Report" - - "Feature Request" - - "Documentation Issue" - - "Data Quality Issue" - - "Process Improvement" - - "Other" - validations: - required: true - - - type: dropdown - id: affected_areas - attributes: - multiple: true - label: Affected Areas - description: | - Which parts of WCRP-universe does this issue affect? - - *Select multiple if applicable* - options: - - "Controlled Vocabularies (CVs)" - - "Documentation" - - "GitHub Actions/Workflows" - - "Data Files" - - "Scripts/Tools" - - "Issue Templates" - - "General Repository Structure" - - "All/Multiple Areas" - validations: - required: true - - - type: textarea - id: description - attributes: - label: Description - description: | - Provide a clear and detailed description of the issue. - - For bugs: What happened? What did you expect to happen? - For features: What would you like to see added/changed? - placeholder: "Describe your issue in detail...\n\nInclude any relevant context, examples, or use cases." - validations: - required: true - - - type: textarea - id: expected_behavior - attributes: - label: Expected/Desired Behavior - description: What should happen instead? What would you like to see? - placeholder: "The system should..." - - - type: textarea - id: steps_to_reproduce - attributes: - label: Steps to Reproduce (for bugs) - description: If reporting a bug provide step-by-step instructions to reproduce the issue. - placeholder: "1. Go to...\n2. Click on...\n3. See error..." - - - type: markdown - attributes: - value: | - ## Metadata - - - type: dropdown - id: priority - attributes: - label: Priority - description: How urgent is this issue? - options: - - "Critical - Blocking work" - - "High - Important issue" - - "Medium - Should be addressed" - - "Low - Nice to fix" - default: 2 - validations: - required: true - - - type: dropdown - id: help_needed - attributes: - multiple: true - label: Help Needed - description: Do you need help with this issue? - options: - - "I can work on this myself" - - "I need help implementing a solution" - - "I'm just reporting this issue" diff --git a/.github/POST_ISSUE_SCRIPT/experiment.py b/.github/POST_ISSUE_SCRIPT/experiment.py deleted file mode 100644 index 1024990b..00000000 --- a/.github/POST_ISSUE_SCRIPT/experiment.py +++ /dev/null @@ -1,157 +0,0 @@ -import sys -import json, os -import cmipld -from cmipld.utils import git -from cmipld.tests import jsonld as tests -from cmipld.utils.jsontools import sorted_json, validate_and_fix_json, sort_json_keys -from collections import OrderedDict -from cmipld import reverse_mapping - -# --- Initialize Reverse Mapping and Prefix --- -rmap = reverse_mapping() -prefix = rmap[git.url2io(git.url())] - -# --- Main Processing Function --- -def run(issue, packet): - # --- Issue Summary --- - git.update_summary(f"### Issue content\n```json\n{json.dumps(issue, indent=4)}\n```") - - # Define output path and file name - path = f'./src-data/{issue["issue-type"]}/' - acronym = issue['experiment-id'] - id = acronym.lower() - outfile = path + id + '.json' - - # --- Check if File Already Exists in Main Branch --- - mainfiles = git.getfilenames('main') - if outfile in mainfiles: - git.close_issue(f'File {outfile} already exists, please check and correct.') - sys.exit('File already exists on main') - - # --- Branch Setup --- - title = f'New {issue["issue-type"].capitalize()} {acronym}' - branch = title.replace(' ', '_').lower() - git.update_issue_title(title) - git.newbranch(branch) - os.popen(f"git checkout {branch}") - git.update_summary(f"### Branch created: {branch}, {os.popen('git branch').read()}") - gb = git.getbranch() - assert gb == branch, f'The branch was not created properly: "{gb}" != "{branch}"' - - # --- Activity Validation --- - - alist = set([i['name'].replace('.json','') for i in cmipld.utils.git.list_repo_files('WCRP-CMIP','WCRP-universe','production','src-data/activity') if 'json' in i['name']]) - - activity = issue['mip-/-activity-id-(registered)'] - - if activity == "Custom Activity: specify below": - if issue['mip-/-activity-id-(unregistered)'] == "-No response-": - git.update_issue("### Please edit the issue (from the top) and enter the custom activity where it states `-No response-`", err=False) - - elif issue['mip-/-activity-id-(unregistered)'] != "-No response-": - git.update_issue( - f"### Custom Activity {issue['mip-/-activity-id-(unregistered)']} \n" - "Please register this using [universal](https://github.com/WCRP-CMIP/WCRP-universe/issues/new?template=add_activity.yml) " - ". Once approved, edit the issue title with `-added` to rerun the checks.", - err=False - ) - activity = issue['mip-/-activity-id-(unregistered)'] - else: - - git.update_issue("### Custom activity specified along with an existing one. Please correct!", err=False) - sys.exit('Incorrect activity specified') - - - # sanitize activity name - activity = activity.strip().lower().replace(' ', '-').replace('_', '-') - # ensure activity is in the list - if activity not in alist: - git.update_issue(f"Activity {activity} is not registered in the WCRP universe. Please register it first.", err=True) - - # also check if it is in the list of activities, otherwise add it. - aclist = f'./src-data/project/{activity}.json' - proj_activity = cmipld.json_read(aclist, 'r') - if not activity in proj_activity['activity']: - proj_activity['activity'].append(activity) - proj_activity['activity'] = sorted(proj_activity['activity']) - cmipld.json_write(proj_activity, aclist) - git.update_issue(f"### Added activity {activity} to project file: {aclist}.", err=False) - - - # --- Parent Experiment Validation --- - parent = issue['parent-experiment'] - if parent == 'no-parent': - parent = "none" - - if parent == "Custom Parent: specify below": - if issue['custom-parent-experiment'] != "-No response-": - git.update_issue( - f"### Custom Parent {issue['custom-parent-experiment']} \n" - "Please register the parent experiment. If there is none, write 'none' as per the form instructions.", - err=False - ) - parent = issue['custom-parent-experiment'] - else: - git.update_issue("### Custom parent specified along with an existing one. Please correct!") - sys.exit('Incorrect parent experiment specified') - - # --- Component Realms --- - realms = [] - for mr in issue['source-type-codes-for-required-model-components'].split(', '): - realms.append({'id': mr.lower(), 'is-required': True}) - for ma in issue['source-type-codes-for-additional-allowed-model-components'].split(', '): - if ma != "_No response_": - realms.append({'id': ma.lower(), 'is-required': False}) - - # Set default for missing start date - if issue['start-date'] == "_No response_": - issue['start-date'] = 'none' - - # --- Construct File Content --- - data = { - "id": id, - "type": [f'wcrp:{issue["issue-type"]}', prefix], - "label": acronym, - "long-label": issue['experiment-title'], - "description": issue['description'].replace("'", ""), - "activity": [activity.lower()], - "parent-experiment": [parent], - "sub-experiment": issue['sub-experiment'], - "tier": issue['priority-tier'], - "model-realms": realms, - "start-date": issue['start-date'], - "alias": [], - "minimum-number-of-years": issue['(minimum)-number-of-years'], - } - - # --- Sort Keys and Display Data Summary --- - data = sorted_json(data) - git.update_summary(f"### Data content\n```json\n{json.dumps(data, indent=4)}\n```") - - # --- Run Schema Tests --- - tests.run_checks(tests.experiment.experiment_model, data) - git.update_summary("### Content has no errors. \n```") - - # --- Write JSON to File --- - print('writing to', outfile) - cmipld.json_write(data, outfile) - - # --- Validate JSON File --- - status, msg = validate_and_fix_json(outfile) - if not status: - git.update_issue(f"### JSON validation error: {msg}", err=True) - sys.exit(f'JSON validation failed: {msg}') - - print('done') - - # --- Commit and Push to Branch --- - if 'submitter' in issue: - author = {'name': issue['submitter'], 'login': f"{issue['submitter']}@users.noreply.github.com"} - else: - author = git.issue_author(os.environ['ISSUE_NUMBER']) - - print('Author', author) - git.commit_one(outfile, author, comment=f'New entry {acronym} in {issue["issue-type"]} files.', branch=branch) - - print('CREATING PULL\n', branch, author, title, os.environ['ISSUE_NUMBER']) - git.newpull(branch, author, json.dumps(data, indent=4), title, os.environ['ISSUE_NUMBER']) diff --git a/.github/workflows/.DS_Store b/.github/workflows/.DS_Store deleted file mode 100644 index 708f2d11512053c308d584a6d5454f0921684a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHKko5UoNI@fR^{+?dP-ATh?oMrCL(Un`iDeyBC4SXRyI&AF?lYfWEC4(2eNY9(IutSrxrbx zynWy=Dj<8eO$lAo0CjQyMwFhXS<*|h9(?eE@H4RWuBJ=b#ZC`sj2+Lg-%a!~a7=Xf zOVM=tExJKB@SV^M98H>{9w}E>+bdWqL$JIQ=CDKehexLx(Y_Zx_K(Ac^SHKmRD2ewa2|q&9>wsLqj(=h Z4danCfU#j75F;@EBcL*P> $GITHUB_ENV - shell: bash - - - name: Install jsonld CLI - run: | - npm install -g git+https://github.com/digitalbazaar/jsonld-cli.git - shell: bash - - - name: Validate JSON-LD from URL - run: | - jsonld lint "$PAGES_URL/graph.jsonld" || exit 1 - shell: bash - - diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml deleted file mode 100644 index dd4f4fe0..00000000 --- a/.github/workflows/deploy-docs.yml +++ /dev/null @@ -1,57 +0,0 @@ - -name: Deploy Documentation on Production or Docs Update - -on: - push: - branches: [ docs ] - workflow_dispatch: - inputs: - force_deploy: - description: 'Force deployment even if no changes' - required: false - default: false - type: boolean - -jobs: - deploy-docs: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: production # Checkout the production branch - fetch-depth: 1 # Shallow fetch only - - - name: Update docs folder from main branch - uses: WCRP-CMIP/CMIPLD/actions/fetch_branch_path@main - with: - branch: 'main' - path: 'docs/' - - - - - name: Build and Deploy MkDocs to Production - uses: WCRP-CMIP/CMIPLD/actions/mkdocs@main - with: - source_branch: ${{ github.ref_name }} - target_branch: 'production' - config_file: '.src/mkdocs/mkdocs.yml' - docs_dir: 'docs' - - - name: Deployment notification - run: | - echo "## 🚀 Documentation Deployment" >> $GITHUB_STEP_SUMMARY - echo "- **Trigger**: ${{ steps.strategy.outputs.strategy }}" >> $GITHUB_STEP_SUMMARY - echo "- **Source branch**: \`${{ github.ref_name }}\`" >> $GITHUB_STEP_SUMMARY - echo "- **Target branch**: \`production\`" >> $GITHUB_STEP_SUMMARY - echo "- **Status**: ✅ Deployment completed" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "### 🌐 Access Documentation" >> $GITHUB_STEP_SUMMARY - echo "- **GitHub Pages**: Available at your configured Pages URL" >> $GITHUB_STEP_SUMMARY - echo "- **Production branch**: Check \`production\` branch for deployed files" >> $GITHUB_STEP_SUMMARY - - - - - diff --git a/.github/workflows/issue-templates.yml b/.github/workflows/issue-templates.yml deleted file mode 100644 index be679874..00000000 --- a/.github/workflows/issue-templates.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Update Issue Templates - -on: - push: - branches: - - main - paths: - - '.github/GEN_ISSUE_TEMPLATE/**' - - workflow_dispatch: - - schedule: - - cron: '0 0 * * 1' # Weekly on Mondays at 00:00 UTC - -permissions: - contents: write - -jobs: - update-templates: - runs-on: ubuntu-latest - - steps: - - - name: install cmipld - id: install-cmipld - uses: WCRP-CMIP/CMIPLD/actions/cmipld@main - - - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Run template generator - working-directory: ${{ github.workspace }} - run: template_update - continue-on-error: true - - - name: Check for changes - id: check_changes - run: | - if ! git diff --quiet .github/ISSUE_TEMPLATE/; then - echo "changed=true" >> $GITHUB_OUTPUT - fi - continue-on-error: true - - - name: Commit and push changes - - run: | - git config user.name "cmipld-actions[bot]" - git config user.email "wolfiex@users.noreply.github.com" - git add .github/ISSUE_TEMPLATE/* - git commit -m "auto-update issue templates from GEN_ISSUE_TEMPLATE" - git push diff --git a/.github/workflows/new_issue.yml b/.github/workflows/new_issue.yml deleted file mode 100644 index 3b543055..00000000 --- a/.github/workflows/new_issue.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: New Issue Processing - -on: - issues: - types: [opened, edited] - -permissions: - issues: write - contents: write - id-token: write - pull-requests: write - -# concurrency: -# group: "pages" -# cancel-in-progress: true - -jobs: - # Specify the machine type - new-issue: - runs-on: ubuntu-latest # Added missing runs-on field - - steps: - - name: Run the parser on a new issue - id: new-issue-action - uses: WCRP-CMIP/CMIPLD/actions/new-issue@main diff --git a/.github/workflows/src-data-change.yml b/.github/workflows/src-data-change.yml deleted file mode 100644 index 7ed97cf3..00000000 --- a/.github/workflows/src-data-change.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Sync JSON changes from src-data to production, and apply relevant documentation and summary updates - -on: - push: - branches: - - src-data - paths: - - '**/*.json' # ✅ Trigger on any JSON file at any depth - -jobs: - sync: - runs-on: ubuntu-latest - - steps: - # Checkout production branch as the main workspace - - name: Checkout production branch - uses: actions/checkout@v4 - with: - ref: production - fetch-depth: 0 - - - #Changed folders - - - # Checkout src-data branch into a subfolder - - name: Checkout src-data branch into subfolder - uses: actions/checkout@v4 - with: - ref: src-data - path: src-data - fetch-depth: 0 - - - - name: install cmipld - id: install-cmipld - uses: WCRP-CMIP/CMIPLD/actions/cmipld@main - - - - #creating graph files should go here. - - - - name: Generate summaries - id: gen-summary - run: | - generate_summary .github/GENERATE_SUMMARY/ - - - - - name: Commit All - uses: WCRP-CMIP/CMIPLD/actions/commit-all@main - with: - message: "Automated Content Update" - - - name: Push PR - uses: WCRP-CMIP/CMIPLD/actions/pushpr@main - with: - branch: "production" - message: "Automated JSONLD update" - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Publish - uses: WCRP-CMIP/CMIPLD/actions/publish2pages@main - with: - api_key: ${{ secrets.API_KEY }} - github_token: ${{ secrets.GITHUB_TOKEN }} - branch_name: ${{ github.ref_name }} \ No newline at end of file diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml deleted file mode 100644 index 96183cd8..00000000 --- a/.github/workflows/static.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Deploy static content to Pages - -on: - workflow_dispatch: - # Uncomment to trigger on push to the production branch as well - # push: - # branches: - # - "production" - -permissions: - contents: read - pages: write - id-token: write - -concurrency: - group: "pages" - cancel-in-progress: true - -jobs: - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: production - - - name: Setup Pages - uses: actions/configure-pages@v5 - - # - name: Pre-check files - # run: | - # for file in src-data/*; do - # if [ ! -f "$file" ]; then - # echo "Error: $file does not exist." - # exit 1 - # fi - # done - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: 'src-data' - retention-days: 0 - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/update-jsonld.yml b/.github/workflows/update-jsonld.yml deleted file mode 100644 index 3139763b..00000000 --- a/.github/workflows/update-jsonld.yml +++ /dev/null @@ -1,90 +0,0 @@ -name: Update JSONLD -on: - push: - # branches: - # - '*' - # - main # Adjust this to your branch name if different - branches-ignore: - - production - -jobs: - update-jsonld: - runs-on: ubuntu-latest # Specify the machine type - - steps: - - - name: install cmipld - id: install-cmipld - uses: WCRP-CMIP/CMIPLD/actions/cmipld@main - - - name: Checkout Code - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - name: Set up Git - run: | - git pull - - - name: Get a list of directories with updated files - id: updated-dirs - uses: WCRP-CMIP/CMIPLD/actions/updated-dirs@main - with: - filter_dir: "src-data" - - - name: Group JSONLD files - id: group-jsonld - uses: WCRP-CMIP/CMIPLD/actions/process_jsonld@main - with: - dirs: ${{ env.updated_dirs }} - # frames: "$PWD/compiled/graph_data.json" - - - - name: Generate summaries - id: gen-summary - run: | - generate_summary .github/GENERATE_SUMMARY/ - - - - # - name: Run Update Scripts - # if: ${{ env.updated_dirs }} - # id: run-all-files - # uses: WCRP-CMIP/CMIPLD/actions/run-all-files@main - # with: - # directory: "$PWD/JSONLD/scripts" - # script: python - # script_ext: .py - - - # - name: generate CV - # if: ${{ env.updated_dirs }} - # id: generate_cv - # run: | - # if [[ "${{env.updated_dirs}}" == *"JSONLD"* ]]; then - # gencv && git push origin HEAD - # fi - - - name: Commit All - uses: WCRP-CMIP/CMIPLD/actions/commit-all@main - with: - message: "Automated Content Update" - - # - name: Push Changes - # run: | - # git push - - name: Push PR - uses: WCRP-CMIP/CMIPLD/actions/pushpr@main - with: - message: "Automated JSONLD update" - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Publish - if: github.ref_name == 'main' - uses: WCRP-CMIP/CMIPLD/actions/publish2pages@main - with: - api_key: ${{ secrets.API_KEY }} - github_token: ${{ secrets.GITHUB_TOKEN }} - branch_name: ${{ github.ref_name }} - - From b4ba1c29f65675787e87762eef5e6e741efedf39 Mon Sep 17 00:00:00 2001 From: Zebedee Nicholls Date: Sat, 11 Oct 2025 03:20:52 +0200 Subject: [PATCH 2/6] Rename licence to standard name --- LICENSE-CC-BY => LICENCE | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE-CC-BY => LICENCE (100%) diff --git a/LICENSE-CC-BY b/LICENCE similarity index 100% rename from LICENSE-CC-BY rename to LICENCE From b7a46c5c1a2e59f01de7fbca41e7d0fbfb279988 Mon Sep 17 00:00:00 2001 From: Zebedee Nicholls Date: Sat, 11 Oct 2025 03:21:04 +0200 Subject: [PATCH 3/6] Update README --- README.md | 153 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 116 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 0b8f6cc5..5f4212e4 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,105 @@ # CMIP7 Controlled Vocabularies -Core Controlled Vocabularies (CVs) for use in CMIP7 - -[![Update Issue Templates](https://github.com/WCRP-CMIP/CMIP7-CVs/actions/workflows/issue-templates.yml/badge.svg)](https://github.com/WCRP-CMIP/CMIP7-CVs/actions/workflows/issue-templates.yml) - -------- - -> [!CAUTION] -> For information on what is in the CVs please visit the ESGVOC repository at: [insert link here]() - --------- - -### THIS REPOSITORY IS CURRENTLY UNDER ACTIVE DEVELOPMENT - --------- - -## Branch Descriptions - -| Required | | -|--------|-------------| -| [`main`](https://github.com/WCRP-CMIP/CMIP7-CVs/tree/main) | The landing page directing users to the relevant content. | -| [`docs`](https://github.com/WCRP-CMIP/CMIP7-CVs/tree/docs) | Contains the documentation and is version-controlled. This is the branch where documentation edits are made. Actions and automations (e.g., workflows that update docs or summaries) are also configured from this branch. | -| [`src-data`](https://github.com/WCRP-CMIP/CMIP7-CVs/tree/src-data) | Stores the JSONLD content used to link all files. Updates here trigger automated workflows that identify changed JSON files and update documentation or summaries accordingly. | -| [`production`](https://github.com/WCRP-CMIP/CMIP7-CVs/tree/production) | Hosts the compiled documentation and JSONLD files, as well as the static pages site. Updated automatically via workflows when changes in `src-data` or `docs` are processed. | - - - -| Optional | | -|--------|-------------| -| `dev_*` | Other branches used for updating things. | -| `*` | All other branches are usually ones containing submissions to update the content. | - - - - +This repository is used to maintain the data that defines +the core controlled vocabularies (CVs) for use in CMIP7. +However, at present, the only recommend way to access these values +is via the [esgvoc](https://esgf.github.io/esgf-vocab/) package. +If you are looking for further details on ESGF metadata handling, +please follow [this issue](https://github.com/WCRP-CMIP/cmip7-guidance/issues/35) +as this question goes beyond the CVs alone. + +## Overview + +At present, this repository should not be used as your source of truth. +As stated above, the only recommend way to access the CVs +is via the [esgvoc](https://esgf.github.io/esgf-vocab/) package. +This will change in future, but for the CVs Task Team (CVs TT) +does not have the resources to maintain more than one interface to the CVs. + +## Details + +If you would like to understand how this works in more detail, +then here is some further information. +There are a few key concepts to be aware of. + +### How esgvoc works + +esgvoc works by using an `esgvoc` branch in its source data repositories +(we'll get to what those are in a minute). +Each `esgvoc` branch contains the data esgvoc needs, +in the format that esgvoc needs it. +When you query data via `esgvoc` it +(effectively, although it's smarter than this in practice) +grabs the information from the `esgvoc` branch of all the repositories it needs to query, +parses the information and serves it to you following esgvoc's defined API +(see the [esgvoc](https://esgf.github.io/esgf-vocab/) docs for the form of this API). + +### Key nouns + +- **Data descriptor**: a known metadata category used in CMIP + - for example, + "experimentDD" is the data descriptor + which defines the experiment to which a given dataset belongs, + "areaLabelDD" is the data descriptor + which defines the area label given to a dataset + and "productTypeDD" is the data descriptor + which (loosely) describes what kind of product a given dataset is + (e.g. model-based, observations, reanalysis). +- **Term**: an individual entry in the CVs for a given data descriptor + - for example, the entry for the "experimentDD" data descriptor + which defines the `historical` experiment and its associated metadata +- **Collection**: set of terms for a given data descriptor + which are included in a given CMIP phase's CVs + +Note: the naming convention for how data descriptors appear in different places, +e.e. whether they have the trailing DD, whether they are camelCase or snake_case, +are still being ironed out so expect to see a few different variants of these in the short-term, +not always with a clearly defined logic. + +### Source repositories + +esgvoc uses two different sources of information. +The first is the **WCRP-universe** i.e. [this repository](https://github.com/WCRP-CMIP/WCRP-universe), +(specifically the [esgvoc branch thereof](https://github.com/WCRP-CMIP/WCRP-universe/tree/esgvoc)). +This is the main/baseline/canonical repository containing all known terms used in all supported phases of CMIP +(CMIP6, CMIP6-cordex, input4MIPs, CMIP7 etc.). +In the universe, terms are defined in full i.e. all metadata is supplied next to each term. +The second source of information, when it comes to CMIP7 CVs, is this repository +(specifically the [esgvoc branch](https://github.com/WCRP-CMIP/CMIP7-CVs/tree/esgvoc)). +esgvoc uses this repository to define the terms that belong to CMIP7 +(not all terms in the universe are relevant to CMIP7). +In general, this definition simply means including the term in this repository too +(as above, more precisely, in the `esgvoc` branch of this repository). +Normally, this definition simply means including a link back to the universe. +There is no need to duplicate metadata using esgvoc. +However, this repository can also define, where needed, overrides of the information in the universe. +This is rare, but can allow metadata to differ from what is in the universe, specifically for CMIP7. + +## Branches you may see + +There are a few branches in this repository. +Given there are so many relevant ones, here is a quick guide. +In future, we hope to return to 'normal' and just have `main`, +but for now it's like this: + +- `main`: just this README + - deliberately zero content. + If you want to know about CVs, + use [esgvoc](https://esgf.github.io/esgf-vocab/). +- `esgvoc`: source data for esgvoc + - unless you are a developer, you shouldn't need to look at this. + If you want to know about CVs, + use [esgvoc](https://esgf.github.io/esgf-vocab/). +- `esgvoc_dev`: if you want to make a change to the `esgvoc` branch, + target your merge request at this branch + (it is the development branch where all changes are added + before being merged to `esgvoc` for releases). + - unless you are a developer, you shouldn't need to look at this. + If you want to know about CVs, + use [esgvoc](https://esgf.github.io/esgf-vocab/). + +All other branches can be ignored. +They are being used by devs and are not intended to be long-lived. ## Contributors @@ -43,9 +109,22 @@ Thanks to our contributors! ## Acknowledgement -The repository content has been collected from many contributors representing the Coupled Model Intercomparison Project phase 7 (CMIP7), including those from climate modeling groups and model intercomparison projects (MIPs) worldwide. The structure of content and tools required to maintain it was developed by climate and computer scientists from the Program for Climate Model Diagnosis and Intercomparison ([PCMDI](https://pcmdi.llnl.gov/)) at Lawrence Livermore National Laboratory ([LLNL](https://www.llnl.gov/)) with assistance from colleagues at the [UK MetOffice](https://www.metoffice.gov.uk/), UK Centre for Environmental Data Analysis ([CEDA](https://www.ceda.ac.uk/)), the Deutsches Klimarechenzentrum ([DKRZ](https://www.dkrz.de/en/)) in Germany and the members of the Infrastructure for the European Network for Earth System Modelling ([IS-ENES](https://is.enes.org/)) consortium. - -This work is sponsored by the Regional and Global Model Analysis ([RGMA](https://climatemodeling.science.energy.gov/program/regional-global-model-analysis)) program of the Earth and Environmental Systems Sciences Division ([EESSD](https://science.osti.gov/ber/Research/eessd)) in the Office of Biological and Environmental Research ([BER](https://science.osti.gov/ber)) within the Department of Energy's ([DOE](https://www.energy.gov/)) Office of Science ([OS](https://science.osti.gov/)). The work at PCMDI is performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344. + +The repository content has been collected from many contributors representing the Coupled Model Intercomparison Project phase 7 (CMIP7), +including those from climate modeling groups and model intercomparison projects (MIPs) worldwide. +The structure of content and tools required to maintain it +was developed by climate and computer scientists from the Program for Climate Model Diagnosis and Intercomparison ([PCMDI](https://pcmdi.llnl.gov/)) +at Lawrence Livermore National Laboratory ([LLNL](https://www.llnl.gov/)) +with assistance from colleagues at the [UK MetOffice](https://www.metoffice.gov.uk/), +UK Centre for Environmental Data Analysis ([CEDA](https://www.ceda.ac.uk/)), +the Deutsches Klimarechenzentrum ([DKRZ](https://www.dkrz.de/en/)) in Germany +and the members of the Infrastructure for the European Network for Earth System Modelling ([IS-ENES](https://is.enes.org/)) consortium. + +This work is sponsored by the Regional and Global Model Analysis ([RGMA](https://climatemodeling.science.energy.gov/program/regional-global-model-analysis)) +program of the Earth and Environmental Systems Sciences Division ([EESSD](https://science.osti.gov/ber/Research/eessd)) +in the Office of Biological and Environmental Research ([BER](https://science.osti.gov/ber)) within the Department of Energy's ([DOE](https://www.energy.gov/)) +Office of Science ([OS](https://science.osti.gov/)). +The work at PCMDI is performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344.

Date: Sat, 11 Oct 2025 03:22:27 +0200 Subject: [PATCH 4/6] Update README --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 5f4212e4..2ce39b41 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ esgvoc works by using an `esgvoc` branch in its source data repositories (we'll get to what those are in a minute). Each `esgvoc` branch contains the data esgvoc needs, in the format that esgvoc needs it. -When you query data via `esgvoc` it +When you query data via `esgvoc` it (effectively, although it's smarter than this in practice) grabs the information from the `esgvoc` branch of all the repositories it needs to query, parses the information and serves it to you following esgvoc's defined API @@ -37,18 +37,18 @@ parses the information and serves it to you following esgvoc's defined API ### Key nouns - **Data descriptor**: a known metadata category used in CMIP - - for example, - "experimentDD" is the data descriptor + - for example, + "experimentDD" is the data descriptor which defines the experiment to which a given dataset belongs, - "areaLabelDD" is the data descriptor + "areaLabelDD" is the data descriptor which defines the area label given to a dataset and "productTypeDD" is the data descriptor which (loosely) describes what kind of product a given dataset is (e.g. model-based, observations, reanalysis). - **Term**: an individual entry in the CVs for a given data descriptor - - for example, the entry for the "experimentDD" data descriptor + - for example, the entry for the "experimentDD" data descriptor which defines the `historical` experiment and its associated metadata -- **Collection**: set of terms for a given data descriptor +- **Collection**: set of terms for a given data descriptor which are included in a given CMIP phase's CVs Note: the naming convention for how data descriptors appear in different places, @@ -83,7 +83,7 @@ In future, we hope to return to 'normal' and just have `main`, but for now it's like this: - `main`: just this README - - deliberately zero content. + - deliberately zero content. If you want to know about CVs, use [esgvoc](https://esgf.github.io/esgf-vocab/). - `esgvoc`: source data for esgvoc @@ -110,20 +110,20 @@ Thanks to our contributors! ## Acknowledgement -The repository content has been collected from many contributors representing the Coupled Model Intercomparison Project phase 7 (CMIP7), +The repository content has been collected from many contributors representing the Coupled Model Intercomparison Project phase 7 (CMIP7), including those from climate modeling groups and model intercomparison projects (MIPs) worldwide. -The structure of content and tools required to maintain it -was developed by climate and computer scientists from the Program for Climate Model Diagnosis and Intercomparison ([PCMDI](https://pcmdi.llnl.gov/)) -at Lawrence Livermore National Laboratory ([LLNL](https://www.llnl.gov/)) -with assistance from colleagues at the [UK MetOffice](https://www.metoffice.gov.uk/), -UK Centre for Environmental Data Analysis ([CEDA](https://www.ceda.ac.uk/)), -the Deutsches Klimarechenzentrum ([DKRZ](https://www.dkrz.de/en/)) in Germany +The structure of content and tools required to maintain it +was developed by climate and computer scientists from the Program for Climate Model Diagnosis and Intercomparison ([PCMDI](https://pcmdi.llnl.gov/)) +at Lawrence Livermore National Laboratory ([LLNL](https://www.llnl.gov/)) +with assistance from colleagues at the [UK MetOffice](https://www.metoffice.gov.uk/), +UK Centre for Environmental Data Analysis ([CEDA](https://www.ceda.ac.uk/)), +the Deutsches Klimarechenzentrum ([DKRZ](https://www.dkrz.de/en/)) in Germany and the members of the Infrastructure for the European Network for Earth System Modelling ([IS-ENES](https://is.enes.org/)) consortium. -This work is sponsored by the Regional and Global Model Analysis ([RGMA](https://climatemodeling.science.energy.gov/program/regional-global-model-analysis)) -program of the Earth and Environmental Systems Sciences Division ([EESSD](https://science.osti.gov/ber/Research/eessd)) -in the Office of Biological and Environmental Research ([BER](https://science.osti.gov/ber)) within the Department of Energy's ([DOE](https://www.energy.gov/)) -Office of Science ([OS](https://science.osti.gov/)). +This work is sponsored by the Regional and Global Model Analysis ([RGMA](https://climatemodeling.science.energy.gov/program/regional-global-model-analysis)) +program of the Earth and Environmental Systems Sciences Division ([EESSD](https://science.osti.gov/ber/Research/eessd)) +in the Office of Biological and Environmental Research ([BER](https://science.osti.gov/ber)) within the Department of Energy's ([DOE](https://www.energy.gov/)) +Office of Science ([OS](https://science.osti.gov/)). The work at PCMDI is performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344.

From be6f46f21bf02c1633cd7f9e18f3c4c159bd5cdd Mon Sep 17 00:00:00 2001 From: Zebedee Nicholls Date: Sat, 11 Oct 2025 03:32:33 +0200 Subject: [PATCH 5/6] Add references to Dan's branches --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 2ce39b41..2a3dbe91 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,20 @@ but for now it's like this: - unless you are a developer, you shouldn't need to look at this. If you want to know about CVs, use [esgvoc](https://esgf.github.io/esgf-vocab/). +- `src-data`: A pure JSONLD version of the content. + Can be accessed with [cmip-ld](https://github.com/WCRP-CMIP/CMIPLD). + - as a user, for now this view should not be considered a reliable source. + If you want to know about CVs, + use [esgvoc](https://esgf.github.io/esgf-vocab/). +- `docs`: An experimental docs page basd on `src-data`. + - as a user, for now this view should not be considered a reliable source. + If you want to know about CVs, + use [esgvoc](https://esgf.github.io/esgf-vocab/). +- `production`: An experimental branch that hosts compiled documentation and JSONLD files, + as well as a static pages site. + - as a user, for now this view should not be considered a reliable source. + If you want to know about CVs, + use [esgvoc](https://esgf.github.io/esgf-vocab/). All other branches can be ignored. They are being used by devs and are not intended to be long-lived. From 518d33a1e0128e093e04cbe1915848d7a0f21aee Mon Sep 17 00:00:00 2001 From: Zebedee Nicholls Date: Sat, 11 Oct 2025 08:45:52 +0200 Subject: [PATCH 6/6] Add link to ongoing esgvoc discussion --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2a3dbe91..f094a593 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,8 @@ Note: the naming convention for how data descriptors appear in different places, e.e. whether they have the trailing DD, whether they are camelCase or snake_case, are still being ironed out so expect to see a few different variants of these in the short-term, not always with a clearly defined logic. +To follow discussion on this issue, +please see [esgvoc#56](https://github.com/ESGF/esgf-vocab/issues/56). ### Source repositories