<p>Adds workflows (i.e., GitHub Actions) for automated builds. Replaces TravisCI and AppVeyor integration.</p>
<p>Automated builds on push/pull-requests:</p>
<ul>
<li>Linux (x86, 64-bit and 32-bit)</li>
<li>Linux (ARMv6, ARMv7, ARMv8/Aarch64)</li>
<li>macOS (x86, only 64-bit)</li>
<li>Windows (x86, 64-bit and 32-bit)</li>
</ul>
<p>Mostly, those builds include the following flavors:</p>
<ul>
<li>squeak.cog.spur (also for Cuis)</li>
<li>squeak.sista.spur (also for Cuis)</li>
<li>squeak.stack.spur (also for Cuis)</li>
<li>pharo.cog.spur (for Pharo7.0 and before, I suppose)</li>
<li>pharo.sista.spur (for Pharo7.0 and before, I suppose)</li>
<li>pharo.stack.spur (for Pharo7.0 and before, I suppose)</li>
</ul>
<p>There are some exceptions from this pattern such as:</p>
<ul>
<li>pharo.* not building on Windows bc. of an issue with third-party lib builds, related to GitHub Actions</li>
<li>*.sista.spur bc. of unprepared build target on some platforms such as all ARM targets</li>
<li>No Linux itimer-heartbeat builds prepared for *.stack.spur; threaded only for now</li>
<li>No pharo.* builds prepared for ARM so far, except pharo.cog.cpur for ARMv6 in monthly builds; see below</li>
</ul>
<p>Still, many if not all of those issues can easily be fixed in the future. We would just add the missing build configurations. :-)</p>
<p>Note that all these VM flavors include builds for "fast," "assert," and "debug" mode -- which we did not have in our previous TravisCI/AppVeyor setup.</p>
<hr>
<p>There are also two separate workflows that manage "extra builds," such as for VM flavors that are not used on a regular basis:</p>
<ul>
<li>newspeak.* (incl. ARMv7)</li>
<li>*.v3 (incl. ARMv6)</li>
<li>*.lowcode</li>
<li>pharo.cog.spur for ARMv6</li>
</ul>
<p>These extra builds are triggered <em>once per month</em> or anytime per request.</p>
<p>These extra builds are only in "fast" mode.</p>
<hr>
<p>All the latest build artifacts can be downloaded from three different tags, which are for my fork as follows:</p>
<ul>
<li><a href="https://github.com/marceltaeumel/opensmalltalk-vm/releases/tag/latest-build">https://github.com/marceltaeumel/opensmalltalk-vm/releases/tag/latest-build</a></li>
<li><a href="https://github.com/marceltaeumel/opensmalltalk-vm/releases/tag/latest-assert-build">https://github.com/marceltaeumel/opensmalltalk-vm/releases/tag/latest-assert-build</a></li>
<li><a href="https://github.com/marceltaeumel/opensmalltalk-vm/releases/tag/latest-debug-build">https://github.com/marceltaeumel/opensmalltalk-vm/releases/tag/latest-debug-build</a></li>
</ul>
<p>After merging this pull-request, replace "marceltaeumel" with "opensmalltalk-vm", and you will form the respective URLs. The URL will be stable for any particular VM flavor and platform. <strong>Feel free to share those URLs to "Get the latest bleeding edge OSVM now!"</strong> :-)</p>
<p>For previous build artifacts, note that all workflows store their artifacts <em>with a timestamp</em> after they ran. You can access those artifacts for about 90 days when logged into GitHub. Here is an example:</p>
<ul>
<li><a href="https://github.com/marceltaeumel/opensmalltalk-vm/actions/runs/1073960213">https://github.com/marceltaeumel/opensmalltalk-vm/actions/runs/1073960213</a></li>
</ul>
<p>Note that you can download a ZIP archive from GitHub, which will then hold the actual build artifact/container, e.g., *.zip or *.tar.gz or *.dmg.</p>
<hr>
<p>Finally, we can now manage builds and artifacts for release candidates:</p>
<ol>
<li>Tag a commit as candidate such as "202107301330"</li>
<li>For each "Build for *"-workflow on the actions page for OSVM, just click "Run workflow" where you enter that tag and manually start the workflow.</li>
<li>Those artifacts will be attached to the tag and are then accessible under, e.g., "<a href="https://github.com/marceltaeumel/opensmalltalk-vm/releases/tag/202107301330">https://github.com/marceltaeumel/opensmalltalk-vm/releases/tag/202107301330</a>", just like the <em>latest-build</em> artifacts are.</li>
</ol>
<p>For an actual VM release, we would manually create a release through the GitHub webpage and copy over the artifacts from the latest release candidate. For the squeak-app bundles, we would also copy those over to <a rel="nofollow" href="http://files.squeak.org/base/">http://files.squeak.org/base/</a>.</p>
<hr>
<p>After merging this PR, an <em>owner</em> in this repository should:</p>
<ul>
<li>Update the certificates in deploy/squeak, deploy/newspeak, and deploy/pharo and configure the required secret as documented in .github/workflows/macos.yml</li>
<li>Deactivate the TravisCI and AppVeyor hooks. Their .yml files have been removed already.</li>
</ul>
<p>Happy coding!</p>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>  <a href='https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579'>https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579</a></p>

<h4>Commit Summary</h4>
<ul>
  <li>Adds latest work on actions for continuous integration.</li>
  <li>Change deploy branch to "Cog".</li>
  <li>Try Newspeak builds.</li>
  <li>Also build for pull_request; only deploy on push. [ci skip]</li>
  <li>Merge remote-tracking branch 'remotes/upstream/Cog' into Cog</li>
  <li>Setup all main builds for Linux, macOS, and Windows. Sketch workflow for Linux32xARMv6 (not functional). Adds extra workflow for not-so-common VM flavors.</li>
  <li>Quick-fix generated FT2Plugin to compile in Linux. Note that code generation does currently not work for that plugin.</li>
  <li>Quick fix to make squeak.cog.v3 build again on Linux32x86. Do not set or use endOfJITZone. This might not be what we actually want.</li>
  <li>[ci skip] Another quickfix for making the rather old EventsHandlerPlugin compile on Linux. Where are its Slang sources located anyway?</li>
  <li>Setup ARM builds for Linux. Remove obsolete build files for TravisCI, AppVeyor, Bintray.</li>
  <li>In all main "Build for *" workflows, add workflow_dispatch to build artifacts for release candidates per tag.</li>
  <li>Merge remote-tracking branch 'remotes/upstream/Cog' into Cog</li>
</ul>

<h4>File Changes</h4>
<ul>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-e1ab4c3cec24f841948eb867754d4ad0b9b6d11eaa6b5bfbe0357aceb0a49eff">.appveyor.yml</a>
    (198)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-49daac3e9bff56da6faed5a0dc650536e5eedcde3ab2c5e9b9fa96ad053210eb">.github/workflows/extra-arm.yml</a>
    (114)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-19d7df14a6f8885d622eaded996284d60a0a469aadd397b2f6a39833aaaae248">.github/workflows/extra.yml</a>
    (105)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-ba1cd3a525e7f9e9fb68d3ce8c4cffbb627f2f62b4c958fe124f6b9609e10519">.github/workflows/linux-arm.yml</a>
    (142)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-21364b2e6fae1f2875cee1ab3daefb0685403687eaf8bc32b5c6eacda351c9d3">.github/workflows/linux.yml</a>
    (137)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-7b74d73de878e0e53f6768bbf3a3d4b50c3c6f1f16f9b64518690028b8206b1c">.github/workflows/macos.yml</a>
    (122)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-1cdfa4ffa155b02bf72e684ed7592abdfbfdb27fadc70cc447c3780af6753d9e">.github/workflows/win.yml</a>
    (129)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-6ac3f79fc25d95cd1e3d51da53a4b21b939437392578a35ae8cd6d5366ca5485">.travis.yml</a>
    (225)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-8ae0648a98665495d399be01fe4512c88187e969a7600c20829f31a07ed471d4">build.linux32ARMv6/newspeak.cog.spur/build.assert/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-357ec63b461bc0788c839a4edce25eccb8e1d85c32f85444db7184f68ebe1ae6">build.linux32ARMv6/newspeak.cog.spur/build.debug/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-89f1fb60543c9c7a405f70782c7963b1ff3e4ad4ac6b9e2d783d50539ae29567">build.linux32ARMv6/newspeak.stack.spur/build.assert/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-c76f39ea252593aaab76eadd5234a2768b6cd60d460079423d1274bb6714e192">build.linux32ARMv6/newspeak.stack.spur/build.debug/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-217168e519ddb58efffc58cd47f0134412181bdd45a4fc4a423127138ea9ea65">build.linux32ARMv6/newspeak.stack.spur/build/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-27aa7795154a19d1b8b981f0e30f0c5c7e370a4a3a8725957d1fe75807b5c8da">build.linux32ARMv6/pharo.cog.spur/build.assert/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-5ddfeb40bab2a01936eaf6bb2435534bf524832de370a3f5528b058747f5193e">build.linux32ARMv6/pharo.cog.spur/build.debug/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-9c8e5c152e64d7a746ee6b226e0e42ad54897b798f5f553ba8a15b2d1d10111f">build.linux32ARMv6/squeak.cog.spur/build.assert/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-6a6a73abecddba11142665b2177575bb44c0e862ee8778b085e4d317872dbb9a">build.linux32ARMv6/squeak.cog.spur/build.debug/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-6ae2e052cbfd247ea8f0e3a55138bf7ac374a5bc8723c7861f18438065bccce8">build.linux32ARMv6/squeak.cog.spur/build/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-952708f075e231b4de3a52eb4ff78d9c32375beb4826350b195fc8f2b6612530">build.linux32ARMv6/squeak.cog.v3/build.assert/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-be79d4deb95b32d88c42192d85efb152e81c1fc9dcaec1d717103d920eaf2925">build.linux32ARMv6/squeak.cog.v3/build.debug/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-deb96e39ede6f399ebe996ecc4835ffe2880e207efd3a3e9235460b110d40b07">build.linux32ARMv6/squeak.cog.v3/build/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-4731e52db02ba763d395c7569a0e65b7de195e08de271fc9a35fa16befb604a1">build.linux32ARMv6/squeak.stack.spur/build.assert/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-d8a3cb6c3088dc84b4d48dd0bdbfa71d58832b62d772d9d3a06ea971927faf09">build.linux32ARMv6/squeak.stack.spur/build.debug/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-709f5ffb4803c7a2a702a7e9119639da35e67eb6037d3b354cd2653a4ff31aab">build.linux32ARMv6/squeak.stack.spur/build/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-95d75662cb1c7de9dd5f1300b19ddcc342e005a999d660b9b89dd037668839db">build.linux32ARMv6/squeak.stack.v3/build.assert/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-3c5b59da893b905c80eb32d8848486c87f98c84f81eddfbc316723fca05b3b4e">build.linux32ARMv6/squeak.stack.v3/build.debug/mvm</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-90a4869bc51de8d170afb46baa4d625a206296af7b38ee46768ddd547bd97976">build.linux32ARMv6/squeak.stack.v3/build/mvm</a>
    (2)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-2245b7647f26180c01617174c9073badbba91bc2504b656611ec1fb80149183a">build.linux32ARMv7/newspeak.cog.spur/plugins.ext</a>
    (3)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-af8cee69435dcf8552d6e23a9e7ca8b2a1244cf40b7a8d0dc0a2985948e16dda">build.linux32ARMv7/newspeak.cog.spur/plugins.int</a>
    (29)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-99334adc0dbe6c28e537014163621b40aed3dd875f9aa42533ab348bbfdba1f8">build.linux32ARMv7/newspeak.stack.spur/plugins.ext</a>
    (3)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-5bcaa5b157d2ad00634768236c55cf102df6bd02e3602dabe3b6b0b719c2ddae">build.linux32ARMv7/newspeak.stack.spur/plugins.int</a>
    (29)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-95a6e103c133603c52608795348ae434bab061a520693f8d4266bb448b62056e">build.linux32x86/pharo.cog.spur.lowcode/build/mvm</a>
    (6)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-d233c453742846d3b95196db86373222438f526b542cd3fba97c8af59128b5e1">build.linux32x86/pharo.stack.spur.lowcode/build/mvm</a>
    (6)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-6389901613da3018c447b1d4763a806dc639287e0095dc7f15c9a26a25da2585">deploy/bintray-cleanup.sh</a>
    (37)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-176714e315d64b9c097da91421253dc0c424e1533222c4a3fe1d41b2b394420f">deploy/bintray.json</a>
    (15)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-784a3588f26929d3d44900eeb72f5223a069f6aee4d2ff4ffa2500eda83c9af9">deploy/bintray.sh</a>
    (22)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-ebe31a74e925b3a507832d8a1d8734ac7b32a73d8e834a9cb2f6015c7f9dbacd">deploy/filter-exec.sh</a>
    (35)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-cd1f835c8ba8c29d4a97336b1e721013b2a69c4afee2faed3fdcff664d415481">deploy/pack-vm.sh</a>
    (144)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-8945966403c94099bb2a5f4882c7b51023eee32359db02cbd1afcd684183c5d3">deploy/sign-vm.sh</a>
    (100)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-7c774fae551eec3b2a20dc6c01af65c002d5e747868461660cde9d00584d24a5">platforms/Cross/plugins/IA32ABI/ia32abi.h</a>
    (4)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-b69fe9cfcefec532972f077dc30c995dff39ab5c086770bbdccc0269533f3a40">platforms/unix/vm/sqUnixMemory.c</a>
    (2)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-6f2910a44b1c1d95a8472e349261a042d80a4a334d14a2c758af7db030202ec7">scripts/ci/actions_build.sh</a>
    (182)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-be9a9faddb35df37d75688dddcb4636670cc5991078cf1ad653cee2dc0311423">scripts/ci/actions_prepare_linux_arm.sh</a>
    (17)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-9edc0d37db7b131eff306e3003f1cbb9c6627881b8236b3b3c2a61ee35013685">scripts/ci/actions_prepare_linux_x86.sh</a>
    (68)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-44abdc872c46ffc928ec886e030181b320f898add6809a117924679513d516fc">scripts/ci/actions_prepare_msys.sh</a>
    (28)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-20cbf028d45989c15fed79ea8654a428fbac542996fa77f8ba911735a5a0ccc9">scripts/ci/travis_build.sh</a>
    (142)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-b437d4e7d73472ea6d603d5b20bdf6573e19752820033e268095ac234e4b6444">scripts/ci/travis_helpers.sh</a>
    (12)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-6a174f24279fe167a038cdb7387ca9091d90a56a72614eddd09af1a985d36a49">scripts/ci/travis_install.sh</a>
    (144)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-6773db794eadf95329b6e6dbd6cc4cad01eb9becaea2166382752961382e88eb">src/plugins/EventsHandlerPlugin/EventsHandlerPlugin.c</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579/files#diff-370e1ddb0afeba63984ee9074025bc2160a406f722efe33fa9a799ca06d400b1">src/plugins/FT2Plugin/FT2Plugin.c</a>
    (2)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579.patch'>https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579.patch</a></li>
  <li><a href='https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579.diff'>https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AIJPEWYTXKNUGM47HP3ZSQTT2KP4NANCNFSM5BIP2JBQ">unsubscribe</a>.<img src="https://github.com/notifications/beacon/AIJPEW2MHLBTLQD36BRU4A3T2KP4NA5CNFSM5BIP2JB2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4OIGRXZA.gif" height="1" width="1" alt="" /></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579",
"url": "https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/579",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>