From a98cc1f143bf74e990323f5b446224ed8ce4490c Mon Sep 17 00:00:00 2001 From: Thomas Churchman Date: Fri, 24 Jan 2025 17:57:53 +0100 Subject: [PATCH 1/5] Upload test snapshots to LFS --- .gitattributes | 3 +++ .github/workflows/ci.yml | 42 +++++++++++++++++++++++++++++++++++ parley/src/tests/utils/env.rs | 16 +++++++++++-- 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..4cea6983 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# LFS settings +# If changing, also change in .github/workflows/ci.yml +parley/tests/snapshots/*.png filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f54837ac..8dc2073a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -152,14 +152,51 @@ jobs: - name: cargo clippy (auxiliary) run: cargo hack clippy --workspace --locked --target ${{ matrix.target }} --optional-deps --each-feature --ignore-unknown-features --features std --tests --benches --examples -- -D warnings + prime-lfs-cache: + name: Prime LFS Cache + runs-on: ubuntu-latest + continue-on-error: true + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache git lfs + id: lfs-cache + uses: actions/cache@v4 + with: + path: .git/lfs + # The files targeted with git lfs + key: parley-lfs-${{ hashFiles('parley/tests/snapshots/*.png') }} + restore-keys: parley-lfs- + enableCrossOsArchive: true + + - name: Fetch lfs data + if: ${{ steps.lfs-cache.outputs.cache-hit != 'true' }} + run: git lfs fetch + test-stable: name: cargo test + needs: prime-lfs-cache runs-on: ${{ matrix.os }} strategy: matrix: os: [windows-latest, macos-latest, ubuntu-latest] steps: - uses: actions/checkout@v4 + # We intentionally do not use lfs: true here, instead using the caching method to save LFS bandwidth. + + - name: Restore lfs cache + id: lfs-cache + uses: actions/cache/restore@v4 + with: + path: .git/lfs + # The files targeted with git lfs + key: parley-lfs-${{ hashFiles('parley/tests/snapshots/*.png') }} + enableCrossOsArchive: true + + - name: Checkout LFS files + run: git lfs checkout + continue-on-error: true - name: install stable toolchain uses: dtolnay/rust-toolchain@master @@ -178,6 +215,11 @@ jobs: - name: cargo nextest run: cargo nextest run --workspace --locked --all-features --no-fail-fast + env: + # We are experimenting with git lfs, and we don't expect to run out of bandwidth. + # However, if we do, the tests are designed to be robust against that, if this environment variable is set. + # If we do run out of bandwidth, uncomment the following line and inform @DJMcNab. + # PARLEY_IGNORE_DECODING_ERRORS: 1 - name: cargo test --doc run: cargo test --doc --workspace --locked --all-features --no-fail-fast diff --git a/parley/src/tests/utils/env.rs b/parley/src/tests/utils/env.rs index 180130a8..38e13460 100644 --- a/parley/src/tests/utils/env.rs +++ b/parley/src/tests/utils/env.rs @@ -190,8 +190,20 @@ impl TestEnv { if !snapshot_path.is_file() { return Err(format!("Cannot find snapshot {}", snapshot_path.display())); } - let snapshot_img = Pixmap::load_png(snapshot_path) - .map_err(|_| format!("Loading snapshot {} failed", snapshot_path.display()))?; + let snapshot_img = match Pixmap::load_png(snapshot_path) { + Ok(snapshot_img) => snapshot_img, + Err(d) => { + if std::env::var("PARLEY_IGNORE_DECODING_ERRORS").is_ok() { + return Ok(()); + } + return Err(format!( + "Loading snapshot {} failed due to decoding error {d}.\n\ + If this file is an LFS file, install git lfs (https://git-lfs.com/) and run `git lfs pull`.\n\ + If that fails (due to e.g. a lack of bandwidth), rerun tests with `PARLEY_IGNORE_DECODING_ERRORS=1` to skip this test.", + snapshot_path.display() + ))?; + } + }; if snapshot_img.width() != current_img.width() || snapshot_img.height() != current_img.height() { From 260456f51f169931670ab419cdc140e7dc398c39 Mon Sep 17 00:00:00 2001 From: Thomas Churchman Date: Fri, 24 Jan 2025 20:45:42 +0100 Subject: [PATCH 2/5] Move PNG snapshots to lfs --- parley/tests/snapshots/editor_select_all-0.png | Bin 2888 -> 129 bytes .../tests/snapshots/editor_simple_move-0.png | Bin 2947 -> 129 bytes .../tests/snapshots/editor_simple_move-1.png | Bin 3148 -> 129 bytes .../tests/snapshots/editor_simple_move-2.png | Bin 3035 -> 129 bytes .../tests/snapshots/editor_simple_move-3.png | Bin 3061 -> 129 bytes .../tests/snapshots/editor_simple_move-4.png | Bin 3010 -> 129 bytes parley/tests/snapshots/only_inboxes_wrap-0.png | Bin 689 -> 128 bytes .../tests/snapshots/placing_inboxes-end_nl.png | Bin 5954 -> 129 bytes .../snapshots/placing_inboxes-in_word.png | Bin 5901 -> 129 bytes .../tests/snapshots/placing_inboxes-start.png | Bin 5794 -> 129 bytes .../snapshots/placing_inboxes-start_nl.png | Bin 5742 -> 129 bytes .../tests/snapshots/plain_multiline_text-0.png | Bin 5696 -> 129 bytes 12 files changed, 0 insertions(+), 0 deletions(-) diff --git a/parley/tests/snapshots/editor_select_all-0.png b/parley/tests/snapshots/editor_select_all-0.png index 7070610082b142f826b834bcf9c47c582f02a684..ad07d0f1a958166cdd2e26809fb321ac454f1686 100644 GIT binary patch literal 129 zcmWN?!4bkB5CFhGRnUL|4mgf<6W|bLR5F5jSiSCNFMiKHUb3xq&RwZ{U$;k{+yC}S zTOLm}PtNKxV)P^!E3G&Sf>&lmZ&KOrkbtM6|1WRoP)v42Wq2J3<$*JU9yBW MCNcY$B@mJL0lRS~^8f$< literal 2888 zcmchZ4NMbf7{^<%6sS_!=GX*U6sKEeAYl_0=~{Fyh-T{M3{xwI!Dep2KnPMsOXbTt zGwqxUjWdFo$%v3x#fdPW$A^lpI$V?hBD571f=I7a+H0@v?Kz+Y5sW0ul776`=Dp{6 z{?G6EzxTtIO|c7n7yHs^v;}eN*L?xsTj9OI+Y3HhllQ^}iygOa&6i^O(?-wJ%eI$X zGm_cEN3P#2&)ArBF15RQ;`Pmsr6n6wr4b)29k%Yj{O$L@%cGOqH&@@1?3=l$zO&2GFWf&)F;&%_;IJ7er=AzAfKRxDqRwr23wf;N+_O998&12RK)7AX$#VJG+x@CPlkYWR`xTdEQJ3cv}Wju z`e?uLl-5UUJ%tfyo9wUx_YNceRP|Lozp$wc;`aDpob3Vnk})!j`5=^EpivJ$5p$@$ za0`?qg!?T$*hX}ofl$}4H(T@;8FyHHQj^fPO6RZ8ZFfb~Ok1GpzHLaBPT&pga(X(N zxQAT9b0q!Q&DnV?>`p^w7vfkXxf0uGAo=8P4k>@ERR(z}D z;k3lvrOa4?$8asP_u*$^j%+j@ig&61JUT~YE!gcndeh|xprtPpW)}H z1I?yaF#d~9&z38k12YJ%yRrFTEU%z{pQR_g?PKcJA}XRkmktr_C#P2FhG6QV{-&mp zXh2>G2uhAaiUWXG!ZNBgNdhl|;K|{7IuqlR98l)GEk-R*UZua!X%j1ZLv2phZxt+p z1}EkQQbK`Vd8DOwXabI!$wji-i(~W_UyPc2AQx#RD(hnW0=IC+Qc4T&8Y@(*G44EY z1v1~MW4i{+$eWs(%IORE=`6A`jrwtN&CnVC;eO*P#1pk^u(M^p9lMw^M+e0-L5%gu zHFP5P0wwB%<{hf`xrTF5-+uvRm)Xt&Z&yWZ*+;ww{?yC}%t`5vQ9zw{$D5z0WKfkSSxK3Z1s}m(0BtKNyyjXt-oApalQZR%zwLSKBq$xIUS$$vh zNYG@HtZWm^AT=OrgGTi7-R4MYct$%+D<^HpF1JoG$arZXV@H@CTNoLMhtsCmmj^f$ zl_K({8e`>@P=*TI0It#&gM-7f-VmCXr+IWBZ6fG6_Dgvq$eogw*>${ZK5EIu;6L=) zM#?qDGi8OFBCy?MH8GlZf;i3Byhw)oPypLX?}FWu!Sd#Sye0LIlQX)&)u_zD&Duta z5pOEQVig?(-&`36q|esoL-1Ll|BlZ9m=Oh6I-qnson+%s)tIc7yJ z%@(#p8Z7y%yb&Q+*#{KO<8rwiHQc#Wq7P`!mIeTXLNhf5BmtmY6A5f*uuBLFpd4cp zu6Ah|loXRH3(Xa2=U)@@gBIuv)mcLJWr>xO)>FgvX9? zeV}TdW>O^OEX28|aw21jbZC{ULNHNa%qW5LwF$6P_DG|siD}{bX&pU0`DD+-WtG2!Z}$4M{MW40>ml8 zk8$(4-)bdGZrw*mfa9l$N z;h2Ww+O(3I3I;;6+;5>=PI9ljDU?H>zz1r;4#7-J^mkma3EY`Xpq-_4elnA1pzTh+ xG8K$21NaBKoEbs;9E|J#duE(1l8#G%H?ea|!wL3rctWPdeY$DgxwVM}{{k#bP}u+g diff --git a/parley/tests/snapshots/editor_simple_move-0.png b/parley/tests/snapshots/editor_simple_move-0.png index 0a157716be5756c5ebdcac9ef393f12cf5622788..cb010747b665bfc4d7e875f13b5a355d1c21de7e 100644 GIT binary patch literal 129 zcmWN|OA^8$3;@tQr{Dq>O!$=ECIk>>R63@1;py$_t=?HbGUi+N`kVJ;g8AV$bH&F}JiAr0r4`mq< zbaf_^X|**m3>|?Q2~>pgaHyDRZPY>4Dup_Wfb@e$>GylP_ZIs~jGAR8e7#%Vy}#c% z=XcIM_|@vO89bDgSZt718^&~XWQd+*$t+p!vvTijYF5**kVwFYfRTu5 z5fZ~fw%rIGFuzkk$79^U9j*?a8Qfl+Q)H0NmH9NdqG$NNDsaE>R!`x?dX~FSP3=gs zY)Sfw@KzD#3W2x6-WH}i8=a?dcY`_rFrNMm~mN>MmpqByoJn}fl15EAQ=pPo* z3HpIrp0Cz(Qtz3bO{%)<1im_!d%#5HV0>SlAg0Jf4VWUjm}QC$LFXO4B4jsp2pzES zM2(($rnlrJ_2iw8YN^(A{^csvyX+fO&J9ho_vYt&j;lOVbG6QIu+F~f&eC#OZ@ERL z4m?mtwTS3p5!?O%JYc9Aj9Df*V*$zZFLC^st~!1hti#f0ztbEYqCf}s64;sLFxb1MM$0|{``C1O zK8OZF6;K2rQ7#W~c6fDVM{-ikbu4~=9g>dHn1v5#0hY+c_ktn> zEJEE$&0KBrRxg(MKMf(7`4Z*E6v?TlatlJo=8}nCtHLnY1cQveT)wAr zYFo2K*c@Sei5~nPL({VaFNdDzh%Sh zYq-ueNMR=OGgIqb6}3Co-xY}{dtuCiikZ%nom5f1DhqECFivV#%BHQP$Z@13@khD$ ztlWHt=RG6&7K}0^i(ZZe9pL)}dLu7zm!~TrTm^Z+@pk#$KTwldLHKTDQ*)ocaRa_F z%Bbl~JYc|e6{+O_Wa(U`5!%KArDFon5Wfr@0X6ju0_Hho^2})Nt7NY0b62h&^7X)Z&< zQvf4@R)x$&}hm!Gy@YSf6<*|d4kQ|{|qd|V|F9`ci zpVp*s$!xCCrNDU7p;MrW69c_zJ#NQiq~;L=ZuT`23YSFX>V~Ev?k$&X$CA8fcqdfA z@w?}R|2*qZfxpQ;Q)GRW zvQot4NVLJM29W~L-~sfBt0=p7Ld4;uluOT*o7J>eEji8Pp$>l!CV6B56T&`3HBK(V zTMM*?0!O@nj1QRu)P~ZSN(`mu0qtTTv9r2D7+YPh!Yq%-5NUr!8GEN96$2Y#hRh3O{CvkC#iPW+RzCl=fFA{_}oxa8O~JOmj#pZE_A2 zn13=G`p0?Z0wc){&2y&07k~+jf*HC6#_y}(mm*!EI}qF##aQTC#B#s5)&NU~a-FyN z(v_@z9a#>DXz*lu67Xsawt|;IB%yQo7h!My9{GQ7tnTE)x6%d2Ds(PzxyDjfu3k~| IMdpEj0Us?2eE!5CFhCuiyiQVORqB&9DhoDk%qZ@b%i4zUrIDe96An$%j(+v2KsX+yDMa zTb@tFXU*!;VvZuY6FPqsXE5060lX!m77Ce!Q~;=i_@% literal 3148 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 Nktfz4{#*5%{{#QRHunGk diff --git a/parley/tests/snapshots/editor_simple_move-3.png b/parley/tests/snapshots/editor_simple_move-3.png index 3368d1b22fceaff7f7c038844e53c437b9192add..47bb7c95b59591e7c63543980d8cd50c51cdd61a 100644 GIT binary patch literal 129 zcmWN{K@!3s3;@78uiyigB$$-;H1RNG-1Z`P*ccws7WB~ zqIhNOd4v98qm3rcF_qCu(~+SoM_@s0p;yw3wh(HNjnpPWO0r=INj95}@4aX?RoglL zxN(LbVH4i_zR%D1>YpF3EV%MFS7I1eu>FB;JHYRq;QPVLW#H$S?rHExo^$)QKRsfU zEDlTGyX`Ogjz!Xj(7(nfy8mAF)dk?+5rdCj)(L5FQ)=`Eqei{!J-?{{p`O;#Uq z?MiE~@gw~UbRKr5tR~eWxykGQkWgZO^*$aAU)HwUdQcd|UT??`hFiE-Y7KV$RukhA|SwMFtZ!9Go1TdjWZO?%>P``2Bng|2uf^Q9y8CC0Dl z(`6WVkapSSqwp!i`-lkC$Lwb8;NE%S+w1u29{J*}fwbW+AkrMwlSTR89b zH>mTk%?T$O~*=YBWS4^h=3IWc`P%qE9g8Ktg{lwvvfS}G`?|m ztW(NN=~GkZL!l+Oea=~adPHUF3#F@uh}N)*%Yl5;BakjDB?Kw|0WEjH)Cgg88;_M9 z&M1T3>|i%f`{}t}b+Q)#omjW~k_SRK0G%zp#94or;0&{i~T(`s+ByrvUeyH5V zY~E0)1n5rh3IoMs%noIA2TBm+!c%tP`C{HDM|Ay6;6QBFsquI0!o1zDz8WN@AUBO~ zE&jB!^>k(Ab4BWN=UrfY_>uI@Fp<=sRi~G$+1YSvcBVPlgWk9wy)h2v80%C7h#R1B z4GCZ29)05a`1|^o3xzsijTFLa0WahG^e^eT-^P7~e&YAY`F!x9@X?sr9Yax#>H=vI;RLDUGq8TI)-E;IWwMf{ zB7C76-%H{_Qsxr_V^mJuWj;YND#y~D{OPmBV=xw3w3mzK3$jVs6zn0Fz5oe@V1@e? z3~w!7x*BO3CL0Qu9|FqQ<7wV7n;fLAF+3deQ)@+NQChgrF3<`Usrl+aJaQIU0+g7& zy#Z=qfI3%eRQO=*pytF>T$g%3>dN_QVlxKZrFD&&C&rlNZuPriAr$tb?t_|vd`TIR z_k?~`RvwuU=p7h1(XQa@U{iG1xex3)2?_zxr#8@^hHh0H*Q+D1&V;jBm2K6G)%u^G zzXp&(xN2G_YmhBw!XmOPy*eA>KXh)kpAi=**-^(rNjX=59;i_^2C>Oh9)z@h}sAYDe zlHF*YtZBVYojRp<9jLOzp_M|hOVPsKo23;)3-?EBhyKxlp&Wx4KgY+P17SMU;ov@W z%uUtmFY`U6@jrFg1-C>BeZ8aN735~fgLu4-ZgpxNrV?-xtIhurFaG|l=@D8mq3|TA zqnL2q{>=?;qYMM_sXS^RVg?p@05%*H>nI#J0v};n0gKO&`{A|CQu4%HuPWG!;1>P~ zZ(G!fjPZucTdxIK02G-w3(u6IJKy(J0KMq!H0sff{%H3A!WNr7l$f@nm~DtI)XFSW47o@miyY2 Oflv*j{zI-o0{a8Z!Y4`q literal 3010 zcmc&$4Qvx-7``&4D9jomq9QB)MkQk+GGdsm3S`0}^M4_emN?DCu~nV0Zgh9UDhmUh zF=o?MRueL(;3&Fm&9a}{M1%-k71;__+78^6t*q^KYkPOSAHVM#?m8x@iHS-7?(5z6 zz3=lp@AJO9o?f4seEn_LV;Gja_Q}=Hg74?Rd)=&=;PYs~Yv5w`uC=Qlf8MAV=}!9m z?hQ3Rj7lZJ_m7=ud@C#OV4=J9(rfdc`kHmN`iGX?8DzKFUoZQja%DkZcB|tBNrxS4 zZ5#H^#?GYY2-_8l+|+&|4SU7?QY3V3#TLr}u@n2Su(*$$k9}Kskc-WD>_2~qFJXPE zod))1<_p6+DshuIKM5Q{)PkQ(jbVp@yO;5)C}JrHidV)1q*#FIxCVWle_No*KDH-6 z!|W<+a=|Bygc`#@zGq+|^QBsNM!c&dT0o{_q~Io#y9>x@K~mTaE-*f#mzHB`!pSrT zu?X$DeZ++qVtCw6Sp3m5R^g1P*KfL^b-=9s#3q70^D0R00C}!K&o!{IvdNnlRJiaF z*G!+Ch}#v$$z_Z57yy-3MSrykzhZpUAf-D;nziv}_A@7Y`;z84Kd-sa+xu&p^ zRu8o3<1Gqi#48qJx_FCzL4{Ww@y_(g%VHAbMSEJ#A;azzFFL7WjlcL%vYPMtjZ5`@ z7wcdx^agFLxZ}QUB_-^qR`%AS&d7_HXSm5zRf`YRQaA|6mfUTSqK2ff933Vv)9P73 z2~v+72-Q{|%_q{W^dnYtA!Nc%4(1vccBe}pojtoz=ijQU+&w>S%o7qkC{>bPNgmD? zPGyhw8-#xB3LMDGQ#hy}-IE`NTV>cG2oyy28<-#;wVP(!l1@|lu}OaBr|EuYM$cm% zkz8_ldwV-NJ|UNBDLS&q@hrMeFZA(BC}iRgR<0|$V@&YV3vxMRz-uoDSGxB-D$ zr@;2t()B{=ZpGYuRu@ojT{Zhj^+0=9pxqd-;{_k6wY@0PM*y>@6V*0Fg!{DIK7@@Y z-s$}Z!k)yeHi2P5!|l`7+1NT;Px=-3k#+%_q16{<(bv1>@OFaY#^bqN@3|BJo}bmi z&zLEaLo9cW!1&nu5S!8!ZznCvM=w0i_lEcz5JJJ=lGcQ>oKmgKkX77_dAKHT-QQR1 zpGhTbX7RVSw;#_XBe_8C^h&JbR95FaWGOL|GZr3i)b3SknI0L0DGr2|k5;SwjRe=o zs;&V>D=h&k52t!(c*ma#_o(M|uSyxaQ8Thhh@elS6Qm4QpnX(g8NID{Wk6aM5>aLOM}m3p^1V2@k%H6weuW#9cUV&xf9wj zvW3y}M_C~B#VNc`Sxm|n<{&;!yqGJSGBC2XNPlkWURUWte7F&>iYK^H%7uKK%4bkZ z@B}(NyCLKlKb|c;OwcQc!hy$JAJ_hOqnLY9t=**=sP3UE#6PHjQTz4;$!oLxQ21WH$`PG$C5UpUM{I0jo1O^io6*&ZSq#OVCh|>p;<>M=@3D zu~o*O%qibP8>XQPL)J3R-|F-s>_ai!Fi~xZp&)ZZr-XpQk-*L$t)?fG~ zU+$@#Y*q^9LbdoBzzE;js1=4LibhQ@RUiJvD!z?M#wHHiCLAzq2C9>5j!I+?HBkpB zC>0(y%Vfx;C3nMGXa+R_vnnPLvRgrSU?AVHU*CqBC3UhP3-w=p!Jm_dHtjmfeqZh31XPp$DY{muC8=uTd~` zI9s*7J#>>bvcY-;Av$sLs*Azkj5k0kVk$%uItT5={=aGUN^`MKtvIkdPrs~xT`!o; Pv9)W~uRi$1rg#1T;m;~` diff --git a/parley/tests/snapshots/only_inboxes_wrap-0.png b/parley/tests/snapshots/only_inboxes_wrap-0.png index 9050bb6edbc37260f8c3dd25dda7933d420d1d64..d09740d3b739f3fdaf84b698b719fd1bf597a49d 100644 GIT binary patch literal 128 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 diff --git a/parley/tests/snapshots/placing_inboxes-in_word.png b/parley/tests/snapshots/placing_inboxes-in_word.png index d16fc434efe63f9f44631ec1178f613a904b74ba..35862a17775463aa88aa6f5bf77dd4c982e76c20 100644 GIT binary patch literal 129 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 A%K!iX diff --git a/parley/tests/snapshots/placing_inboxes-start.png b/parley/tests/snapshots/placing_inboxes-start.png index 1ed1e7bbea2f86442d2b3961f164a2cd80e09b22..69d260cf85e6b6233c8ea908bce585fbcc45e4c6 100644 GIT binary patch literal 129 zcmWN?NfN>!5CFh?Ucm}V^x)qB1Z3g1_H%3<-(RABm@(fFa@m=T1}?v Mvd#Ww;gIb11GV=i^Z)<= literal 5794 zcmd5=4^Wf$8UBzK+A6Z^oUHW^wzJpXwwkt7+A0#;*`ei5+FdEdvSeM(mnUz!!S(Jy0vS52cK2&KmV=-_`6}j5fQ`8-@0zi zvoDv%jkU-BdFh5DXPw~^`yab6)W4a%n*65uMS>S>%%+g!zR0E+pJ9a`lQf*(tFh4UAQg&jnT&D8wUz9 z_87|=jYGnpGyf~MMkqBblqT; zz!pvV>KE>X_0?UtLj00_2H&TKAzDFgk6CCp9RSu>?de)NLQeVH^TgJxTWxk~N( zn|i3x;%oGdvZ2C|wK%jl`cvGYGX)jB13(vIqTUn)Bs&)?^7mXaJ z2<5(dMP04*gWAD*`AGfK^1#!EF`dP)YjO4Fd&exHB4)eJ^~&NKhpNU!4wp#gE>S$i z2!oe|dXrXf8lR{aeu!zI-yK}0qcdA~IotUqWHc~Y98Q0D{n3GD`DimP%pAtQt*x!v z-a_4c0%R<>dh?6F*(I{=YSL%36WNkmQ10*Fv@L!dLjk%{xjwnSS)sIq#w=&k8B4I=qW5bJ{_#A8D^EL-%|6Mb2ERzv6K3Gt zi(+~zsgehc6%X=2vh*$BH`HqY0jPfy~wUza^Ldhs`*hCA3@`aUrA0@R@aF-zIh&{TB zDJ3X3CAIT8v_?8Ue%;XXzgN=Iny^nJMIft8jm_qNrKy~AAep_z!QSh3`wiTz&(W;# zH%mV>N*9GjG@<>q^5NRw@?A5fZ*P%D6~y>vz_Y{drZ_Jc0&{W{zDv^WP}`$V@7Ns$ zBEU*|AM}!WKed$xb|BD+tgngo5=S+#z6P(|5!z0mt``P}Gdvy1RyogbQ>ZT(Ll6vN zO9zeVfpfoZck>X5BeX|oE|3@x5lgm>snUPVuy6O-TP;Fq{aRki{y#uOEX--))1JFlabA;wjy zNlsn^D3@Z%3FS4RZ)^TgQd0ZVhu4q4QtWyKdi5x#Az^?T5xaq}y_`;h2Sg~%iV?^b zOKg=0RoKHsIQ|OM>xig?-iupevI-9^70o*>#X~SefVN4#JaL}^j|2BC{yd*`<#V}W zS1ujOt8xrBw2d_2*|mgG?ukZ=rLQg1Jvc zkR(C4q^X1-;*R?ar3sWn;Mdb}9@Ig(twdf`hU`l!_jqdOC3R>g7K}^13!T|{Aoy8t zKtqQbNx<=ndMjY_+PNCeu?y98AW`^!_&KKgbj!#mwmU#n8%~t1|Nd8R@?^wep@bR? zkZduxT-=#eaXD)TuAkNqssuhPFbAa_Zvx~Ocjbm3q-HFS0j4e51_UX$+~Kwg&qu+o zy_~I^cdjNCifAh#p&&_W5IyqUmBPzNSkG%OoF7L_6N;E=e#_IXhKL}980t5m6rvX+ zM?-pp*zkU6@h&3k=)mqk7XXYzz7o&$cAKrdtt!7*_p?fOnZ`ZTkt~1AU_fsH+2Ti7t}|!qhsioogAn6K5_(6RO1Rk*NkBa=K#7cC}vLBV?nSfdFx%hT!sy?D)U@J)vcV`sN5#2fmU0IrWV`qQ zm6WM=*``?oI01Q(p2>*YCZkUXx}zPk(IrELReS)(1#6NU-U>shq$k&KH%ouzf@{?5?oW;UJ@nj>^$O`gNs(4CCk+_n-A`$T?z2{ippmo&l80@i5~)O z8mN2Kn}OqLoZlzGLTNyL(RUPY9vV+4piWLHITQ`0}FAV5DKI8xONt*P*X-Jc3 z17(~>LVkW*Cen5T_evuk2l;|11Y3=#;b|}<{Q=B8g&vb9h^j7}*UpJ)H(qh`bT9I3 za&!JN+)fIwSmpdQ6lEDQn&h={mat9YO9l)svFw%|tHSBkDo1!EwPSm6_|8J>E@z+0 zTP6N6&Ol;o0qKiO4_&AWC&ALiSD=rLyazy-kaeCyT*tF(X*PmU3ux3CCHH8?INr6l zSfs`y$X5)RJYNkPMDD<5QJ2}?VT7u&s>ow_X#aeC>GKDr^X;O+Nw53hbmo$0F%X|BMzb$#MQ1H*) zyn`0<=l6cU@AvcX`+M{E>sF`TGWQmWqSCV0Jh6fNE+>C;r>ByinjO1mQPiBJ*-t$7 z2VKf=o9rJ8H@)+DP$(IB>%_^1m)AajsIceQ#GfsD>fiaDrT)PscaN|;tuL1TvvNg2 zSI#lV(}I>-(Bu6`P*Hmei@St$>cp|;L16~<=bq=n!p+pb3J=AEY1FxljR{jq#n!q; zo~9oC|9?$r=VKOOZbgl8pvK$WTRPN~dGQWs-%-ubQQi9N{v%mKN1~UV{8nmVaFaQ_ z$uO30$`DSM!!I+l+`Ow$v)9RAc6y7me8q>;+M2BH|17Bw&Lm&gR0(iJN^_#spKB)w41B*+umHSwd`c@-Xh*yC-M^mrtacnZ=$uDd()#0bq z9l?v8`fdJ%+wTDI6bWNRGCaxN%FMq;N-dH87CPRN5*;w}Tio74_ZtoB#6V`WUEzh- z_2!6PsTn+|*^L0Un&Q^w+xu^#!?`ppoU->b^7CA8@3#Qx=&*+`%!(gT*Fm-0GbpRO z^j-_|h=rgyc2HZJTV(%xK7s$`k&!=L7i&=IfSc?$(~5P1M}CslR$_{jFj%E7ZDKYw zHmz;7DYTkdqGpz4CI)ik5=_Vzyy=X6?CggIG>5x$^(R)%|5W4x7uE_(31=)0Tmev> zY4!6Xes8(kS58>A(G=duz{_j;`#Y*ALuj?>Aw(%O<_PKZs`;b0A_dL-fH^g06Z@W-y<@8^AaaaVq!OJH z@^GgJiLc1HGp$$3cs8{Uz6jNaA~k!Ux1`$4Bixl5y)`vz@N7urbd~0tXz=2B{{eOE z0B!*Re4g+F`iua|CEaEoR51_Qx^nHa0r$tXi7ssrc7rgpgrBu^V9kw%34 zDIWGkKX%4`gRjIT@TbLjP*r`+Zj9kW~ljDA|M} z)I)G$J2hmRb)^D(#1?ps60N1O4P6_{XOoR69g~VAeunh^MglJjpzz~{oWlpTv4hKv z+{0px=aENr=ar!C$3z3jRO9=oxa*bS^(dS~c})(a9OyM}6cuD- z+Xx4)yzr{vl6=jZ&OpZI;{Dax1`neSVX>`))A%Ed2rF zYDil^A19ZQP-Z#|1WfG%S<`Qm5F(y{l!H)&6hxsjp>ji!i5rO`F9|&0_IjwJ(N|)W zSIAdhdJIW}>&#%lY*4A8sFC>9kVcCyqa$T#HPoFecJ9HL1o9vaCDP8fK>0-g8ofb;>) z6dwPMWGmbQHBD>7EWnXPM}hZ-GpoyQCvM|YpN1R&e22_}A9|)J{0yhO3Ebu$kj)7| za%hx9_*KUdN?53T_KJ2?)|7r&(@)%kXf8JkvljY-X(og_S$6-Ef2y z!%u5Fz+Cg{bh3xgjV#^@*ufTU-t@mWJe+5_N+Hef{( zm;tat00wjl0tvp2At|Bp?a)-x&k?ey%cF5lkj2f3y)Z=7|BkXR(mSKj6m@*z4*gBe> zhXVNlq7zF3(E`qJy%yjaF8zMjg{j;x62EqrdT_|MmFiPDLMW%0MwQ<|4)SkZ@NPik z>ufT3iYHU2{_q~;)s2e-&e``_ z)u$Pgun$Tzc`+1?iQFGa8a=idh71OPgvkMVq2Gp#fb>0XH&`~9K+yB}>S-W!3$ksC zwlb0d&MAhtD0QL6k+TK%?t&mBGERwJ^XNX^`m&)qI?t$RpxW)A|k)N5J}GjPs2pyQDgi!~~~=`Cm8y z8JBE&iEYDQ8w6qu;E<+k|D<#Z8tYvfs$s|C390G*J*9^`+Odapl z=kI-Q{FFpCB>{;&o| zI51FlzlXgGM`u4<@4wKUTl6i_Y@DlsfUlyY65`LUNb0Jv5A7Yk4HX)n(68N_^M+ux zh1Sv!b-sPqMR16dPHrZ!%K=^3P9xX=6c}$1e=r!L4kDaqj3zrrW--%*S-@+Y`sU_qAJJc7;6Peq`N0fj0m8d(!X_>aBm86YNB34@Me%bIi4bnT`Vxa- zlDigFK}@^S2`x!(yq+MYZ;UmVY9$iZQI!t0pSaP1P=aLwbr$79$Vnl0Uh1>3$oDa- z?;(=%Sd!aGK~BLrXZ#jOXdw4%jPf$*ND5B;_2#6iiwRkBla!dkHL&<_4vh5T^r8r1 z^^<`j0f(NrJp)VE`6I?6-kfrENHk9I49Q$Jr87Yy z;a|jUV(7{jPyN%Vr)`nM|D~D&A-2-z0|TaX;AP|=#wzq3ad4J6ZL%j57f%pF;0P36 z7~znIll-;MQ^8dSQMl$oZ5lD;pZ4PPdp?c-*+)AsZd%;<+$D04Ol3d0?ukQ>=e_nn DUa%@4 diff --git a/parley/tests/snapshots/plain_multiline_text-0.png b/parley/tests/snapshots/plain_multiline_text-0.png index ee09cbdf1052f0a065d03e3fc9314beb68309cdd..b5f9f4ab11820ea28256fe561a776e68a7a47256 100644 GIT binary patch literal 129 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 Date: Fri, 24 Jan 2025 21:24:37 +0100 Subject: [PATCH 3/5] Update .github/workflows/ci.yml Message bump for CI. Co-authored-by: Daniel McNab <36049421+DJMcNab@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8dc2073a..b47a46eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -216,7 +216,7 @@ jobs: - name: cargo nextest run: cargo nextest run --workspace --locked --all-features --no-fail-fast env: - # We are experimenting with git lfs, and we don't expect to run out of bandwidth. + # Although GitHub's LFS limits are very low, we don't expect to run out of bandwidth. # However, if we do, the tests are designed to be robust against that, if this environment variable is set. # If we do run out of bandwidth, uncomment the following line and inform @DJMcNab. # PARLEY_IGNORE_DECODING_ERRORS: 1 From f52c567bf5afea7bfc391e6bf30506df366e76fd Mon Sep 17 00:00:00 2001 From: Thomas Churchman Date: Fri, 24 Jan 2025 21:31:16 +0100 Subject: [PATCH 4/5] Null --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b47a46eb..f6824732 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -220,6 +220,7 @@ jobs: # However, if we do, the tests are designed to be robust against that, if this environment variable is set. # If we do run out of bandwidth, uncomment the following line and inform @DJMcNab. # PARLEY_IGNORE_DECODING_ERRORS: 1 + ~ - name: cargo test --doc run: cargo test --doc --workspace --locked --all-features --no-fail-fast From 930aaea6fefe7932306ef4a7b019e9c9e7c386c7 Mon Sep 17 00:00:00 2001 From: Thomas Churchman Date: Fri, 24 Jan 2025 21:38:51 +0100 Subject: [PATCH 5/5] Does GitHub's YAML parser have issues with null? --- .github/workflows/ci.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f6824732..dca33927 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -215,12 +215,11 @@ jobs: - name: cargo nextest run: cargo nextest run --workspace --locked --all-features --no-fail-fast - env: + # env: # Although GitHub's LFS limits are very low, we don't expect to run out of bandwidth. # However, if we do, the tests are designed to be robust against that, if this environment variable is set. - # If we do run out of bandwidth, uncomment the following line and inform @DJMcNab. + # If we do run out of bandwidth, uncomment both `# env:` above and the following line, and inform @DJMcNab. # PARLEY_IGNORE_DECODING_ERRORS: 1 - ~ - name: cargo test --doc run: cargo test --doc --workspace --locked --all-features --no-fail-fast