Difference between revisions of "Team:BITSPilani-Goa India/Software"

(Prototype team page)
 
Line 1: Line 1:
{{IGEM_TopBar}}
+
<html lang="en"><head><meta charset="utf-8"/><meta content="width=device-width,initial-scale=1" name="viewport"/><title>Software | SugarGain | iGEM BITS Goa</title><link href="https://2020.igem.org/Template:BITSPilani-Goa_India/css/contentCSS?action=raw&amp;ctype=text/css" rel="stylesheet"/></head><body><nav id="main-nav"><div class="navbar navbar-expand-lg d-flex justify-content-between bg-none nav-transparent"><a class="navbar-brand" href="https://2020.igem.org/Team:BITSPilani-Goa_India"><i class="navbar-logo"></i><span> Sugar<strong>Gain</strong></span></a><div class="controls h-100 d-flex align-items-center"><div class="align-items-center" id="themeSwitchWrapper"><i class="icon-light"></i><div id="themeSwitch"><label class="switch" for="themeSwitchInput"><input id="themeSwitchInput" type="checkbox"/><span class="slider round"></span></label></div><i class="icon-dark"></i></div><button class="btn" id="menuSwitch"><div class="menu-icon"></div></button></div></div><div id="fullscreenMenuWrapper"><div class="w-100 h-100" id="fullscreenMenu"><div class="container-fluid d-flex align-items-stretch pr-0 flex-column"><div class="row nav-header w-100"><div class="col-xl-3 col-lg-2"><div class="teamLogo"></div></div><div class="col-xl-6 col-lg-8"></div><div class="col-xl-3 col-lg-2"></div></div><div class="row flex-grow-1 w-100"><div class="col-xl-3 col-lg-2"></div><div class="col-xl-6 col-lg-8 d-flex justify-content-between flex-column" id="menuContent"><div class="row"><div class="col-md-6" id="nav-headings"><ul role="tablist"><li><a href="javascript:;" id="Project-tab">Project</a><ul class="mobile-nav-items"><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Description">Description</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Design">Design</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Model">Model</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Engineering">Engineering</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Safety">Safety</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Implementation">Implementation</a></li></ul></li><li><a href="javascript:;" id="Human_Practices-tab">Human Practices</a><ul class="mobile-nav-items"><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Human_Practices">Human-Centered Design</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Education">Science Communication</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Humans_of_iGEM">Humans of iGEM</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Accessibility">Accessibility</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/All_India_iGEM_Meet">All India iGEM Meet</a></li></ul></li><li><a href="javascript:;" id="Parts-tab">Parts</a><ul class="mobile-nav-items"><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Part_Collection">Part Collection</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Parts">Parts</a></li></ul></li><li><a href="javascript:;" id="Journal-tab">Journal</a><ul class="mobile-nav-items"><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Notebook">Notebook</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Experiments">Experiments</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Appendix">Appendix</a></li></ul></li><li><a href="javascript:;" id="Team-tab">Team</a><ul class="mobile-nav-items"><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Team">Team</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Attributions">Attributions</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Collaborations">Collaborations</a></li></ul></li><li><a href="javascript:;" id="Contribution-tab">Contribution</a><ul class="mobile-nav-items"><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Contribution">Overview</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Software">Software</a></li></ul></li><li><a href="javascript:;" id="Judging-tab">Judging</a><ul class="mobile-nav-items"><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Bronze">Bronze</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Silver">Silver</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Gold">Gold</a></li></ul></li><li><a href="javascript:;" id="Other_Areas-tab">Other Areas</a><ul class="mobile-nav-items"><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Excellence">Overview</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Dance">Dance</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Policy">Policy</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Entrepreneurship">Entrepreneurship</a></li></ul></li></ul></div><div class="col-6" id="nav-items"><div class="tab-content"><div class="tab-pane" id="Project-pane"><ul><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Description">Description</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Design">Design</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Model">Model</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Engineering">Engineering</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Safety">Safety</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Implementation">Implementation</a></li></ul></div><div class="tab-pane" id="Human_Practices-pane"><ul><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Human_Practices">Human-Centered Design</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Education">Science Communication</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Humans_of_iGEM">Humans of iGEM</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Accessibility">Accessibility</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/All_India_iGEM_Meet">All India iGEM Meet</a></li></ul></div><div class="tab-pane" id="Parts-pane"><ul><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Part_Collection">Part Collection</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Parts">Parts</a></li></ul></div><div class="tab-pane" id="Journal-pane"><ul><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Notebook">Notebook</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Experiments">Experiments</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Appendix">Appendix</a></li></ul></div><div class="tab-pane" id="Team-pane"><ul><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Team">Team</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Attributions">Attributions</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Collaborations">Collaborations</a></li></ul></div><div class="tab-pane" id="Contribution-pane"><ul><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Contribution">Overview</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Software">Software</a></li></ul></div><div class="tab-pane" id="Judging-pane"><ul><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Bronze">Bronze</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Silver">Silver</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Gold">Gold</a></li></ul></div><div class="tab-pane" id="Other_Areas-pane"><ul><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Excellence">Overview</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Dance">Dance</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Policy">Policy</a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Entrepreneurship">Entrepreneurship</a></li></ul></div></div></div></div><div class="row"><div id="contact-links"><ul><li><a href="https://instagram.com/igem_bits" rel="noopener" target="_blank"><i class="insta"></i><span>Instagram</span></a></li><li><a href="https://twitter.com/igembitsgoa" rel="noopener" target="_blank"><i class="twitter"></i><span>Twitter</span></a></li><li><a href="mailto:igembitsgoa@gmail.com" rel="noopener" target="_blank"><i class="email"></i><span>Email</span></a></li><li><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Sample"><i class="sample"></i><span>Sample</span></a></li></ul></div></div></div><div class="col-xl-3 col-lg-2"></div></div><div class="row nav-footer w-100"><div class="col-xl-3 col-lg-2"></div><div class="col-xl-6 col-lg-8"></div><div class="col-xl-3 col-lg-2"></div></div></div></div></div></nav><style>header {
{{BITSPilani-Goa_India}}
+
    background-image:
<html>
+
        url(https://static.igem.org/mediawiki/2020/9/97/T--BITSPilani-Goa_India--img--WikiSync--header.jpg);
 
+
}</style><header class="d-flex justify-content-center"><div class="container d-flex align-items-end justify-content-between"><div id="heading"><h1>Software</h1></div><a href="https://unsplash.com/photos/lZ4xZZuk8iA" rel="noopener" target="_blank"><span data-placement="top" id="bg-attribution" title="Photo by Josh Withers on Unsplash"></span></a></div></header><main class="hello theme-green"><div class="container"><div class="row"><div class="sidebar"><div class="nav" id="contents"><ul></ul></div></div><div class="content"><article><p>One of the most important aspects of the iGEM experience is the team wiki, more so this year than ever. As it occured to us that the Jamboree this year was going to be online, we realized how important wikis were going to be, and decided to make it easier for teams across the world to build their wikis.</p><p>Currently, building iGEM wikis requires teams to write code in a text box in their browsers, due to which they miss out on the wide variety of features code editors and integration tools offer these days. These tools have become the de facto standard in the web development industry, optimizing various parts of the process and ultimately making it much easier and faster.</p><p>Over the years, iGEM teams have come up with several ways to improve this experience. These solutions have focused on multiple aspects of building wikis - from making it easier to write code to uploading it and even implementing continuous integration. iGEM Toronto 2015, Waterloo 2017 and Virginia 2018 did excellent work in this area, with their wiki generators, upload APIs and CI tools. Some of these tools allowed teams to write code locally, in a code editor of their choice, and then upload it to iGEM servers for deployment.</p><p>However, we felt that there was a need for a holistic solution - something that would cover every aspect of iGEM wikis. This solution had to be comprehensive enough that teams wouldn't need to find other software to build common components, but it would still allow teams to easily integrate other libraries, should they need to do so. We identified three key areas to focus on: content, design and deployment.</p><p>We wanted to design something in line with the latest trends and best practices in the web development industry, but we also realized that these things change rapidly. This is why the software that previous years' iGEM teams built got outdated so quickly. In order to get around this, we decided to split our software into modules.</p><p>The way teams design and add content to their wikis usually varies widely, but the deployment process is common, since all iGEM wikis are powered by the MediaWiki engine. They write code in a code editor, and then manually copy and paste it in the text box on the page where it belongs. A typical iGEM wiki is anywhere between 15 to 20 pages, so it can quickly become cumbersome to copy and paste for every small change, and sometimes a few changes might just be left out in a hurry.</p><p>Deployment is one of the parts of this process that we could automate, and this is something each team would need, irrespective of which frontend web development library they use. These days in the web development industry, it is common to set up a version control system like Git, and link that to an automatic deployment service, like Github Actions or Travis. This ensures that every time a change is made in the codebase, it is automatically pushed to servers for deployment.</p><p>Github Actions and Travis are free for open source repositories, and most website hosting services offer integration with these. However, in order for iGEM teams to use such a service, an integration tool was required, that would allow CI/CD software to upload files to iGEM servers, so we decided to make one!</p><h1>iGEM WikiSync</h1><p>Our Python package, iGEM WikiSync allows iGEM teams to set up and continuous deployment for their wikis, making the wiki freeze a little less dreadful. It lets teams work on their wiki locally, using whichever web development framework they're familiar with, and upload the code to iGEM servers for deployment, without uploading a single file manually.</p><p>It does this in the following way:</p><ol><li>WikiSync looks for all assets (images, videos, PDFs, etc.), renames them according to iGEM specification, and uploads them to iGEM servers.</li><li>It then goes through the code (HTML, CSS, JavaScript), scanning it for links.</li><li>It replaces all local links to iGEM.org URLs where the files have been uploaded.</li><li>Finally, all code files are also uploaded to iGEM servers and the team wiki is deployed.</li></ol><p>WikiSync keeps track of the files uploaded in each run, so only changes are uploaded the next time it runs. It also checks code for internal broken links and shows warnings.</p><p>In order to access files on iGEM servers, WikiSync requires the user ID and password of a team member. These credentials are taken in as environment variables, so that they never have to be stored in plain text, and are discarded when the terminal session ends. When run as part of a CI/CD workflow on Github Actions or Travis, user credentials are stored as "secrets" in the repository, and CI providers ensure that they are never displayed publicly and cannot be accessed by anyone apart from the user themselves.</p><p>WikiSync is available at the following links:</p><ul><li>Github repository: <a href="https://github.com/igembitsgoa/igem-wikisync">https://github.com/igembitsgoa/igem-wikisync</a></li><li>Documentation: <a href="https://igem-wikisync.readthedocs.io">https://igem-wikisync.readthedocs.io</a></li><li>PyPI package: <a href="https://pypi.org/project/igem-wikisync/">https://pypi.org/project/igem-wikisync/</a></li></ul><h1>iGEM WikiSync Github Action</h1><p>By automating uploads, iGEM WikiSync allows teams to save dozens of hours over the course of their iGEM experience. This is made possible by using WikiSync to set up a continuous integration and continuous deployment routine on the wiki's version control repository, such as on Github. For example, for our own wiki, we set up continuous deployment using a Github Action we wrote for iGEM WikiSync that runs every two days, or as requested manually.</p><p>iGEM WikiSync Github Action is a Github Actions plugin that allows teams to easily set up a Github Actions workflow and integrate iGEM WikiSync into their wiki, so that everytime changes are made in the codebase, they're automatically sent to iGEM servers. All that is required is a <code>git push</code>.</p><p>Setting it up is a really simple process. Teams can either write their own CI workflows and include the plugin in just a few lines of code, or they can use our readymade recipes for wikis built with webpack, such as those made with our iGEM Wiki Starter Pack. All they have to do is download and include a file in their wiki repository and enable Github Actions for their wiki.</p><p>Since this Actions plugin behind-the-scenes runs iGEM WikiSync itself, it also needs access to iGEM.org credentials of a team member. These credentials are stored as "secrets" in the Github repository, so that they are never accessible to anyone apart from the user themselves. In public build logs, they are replaced with asterisks (*).</p><p>The Action can be found <a href="https://github.com/marketplace/actions/igem-wikisync">here</a> along with usage instructions and common use cases.</p><h1>iGEM Wiki Starter Pack</h1></article><div class="d-flex justify-content-between my-5"><a class="button prev flex justify-content-end short" href="https://2020.igem.org/Team:BITSPilani-Goa_India"><span aria-hidden="" class="circle"><span class="icon arrow"></span></span><span class="button-text">Home</span></a><a class="button next short" href="https://2020.igem.org/Team:BITSPilani-Goa_India"><span aria-hidden="" class="circle"><span class="icon arrow"></span></span><span class="button-text"></span></a></div></div></div></div></main><footer><div id="footerNav"><div class="container"><div class="row justify-content-between"><div class="col-sm-6 col-md-4 col-lg-3 py-2"><a class="footer-heading">Project</a><ul><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Description">Description</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Design">Design</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Model">Model</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Engineering">Engineering</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Safety">Safety</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Implementation">Implementation</a></li></ul></div><div class="col-sm-6 col-md-4 col-lg-3 py-2"><a class="footer-heading">Human Practices</a><ul><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Human_Practices">Human-Centered Design</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Education">Science Communication</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Humans_of_iGEM">Humans of iGEM</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Accessibility">Accessibility</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/All_India_iGEM_Meet">All India iGEM Meet</a></li></ul></div><div class="col-sm-6 col-md-4 col-lg-3 py-2"><a class="footer-heading">Parts</a><ul><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Part_Collection">Part Collection</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Parts">Parts</a></li></ul></div><div class="col-sm-6 col-md-4 col-lg-3 py-2"><a class="footer-heading">Journal</a><ul><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Notebook">Notebook</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Experiments">Experiments</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Appendix">Appendix</a></li></ul></div><div class="col-sm-6 col-md-4 col-lg-3 py-2"><a class="footer-heading">Team</a><ul><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Team">Team</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Attributions">Attributions</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Collaborations">Collaborations</a></li></ul></div><div class="col-sm-6 col-md-4 col-lg-3 py-2"><a class="footer-heading">Contribution</a><ul><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Contribution">Overview</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Software">Software</a></li></ul></div><div class="col-sm-6 col-md-4 col-lg-3 py-2"><a class="footer-heading">Judging</a><ul><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Bronze">Bronze</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Silver">Silver</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Judging/Gold">Gold</a></li></ul></div><div class="col-sm-6 col-md-4 col-lg-3 py-2"><a class="footer-heading">Other Areas</a><ul><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Excellence">Overview</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Dance">Dance</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Policy">Policy</a></li><li class="py-1"><a href="https://2020.igem.org/Team:BITSPilani-Goa_India/Entrepreneurship">Entrepreneurship</a></li></ul></div></div></div></div><div id="footerBrand"><div class="container"><div class="row"><div id="footerLogo"></div></div><div class="row justify-content-center" id="footerIcons"><a class="gmail" href="mailto:igembitsgoa@gmail.com"></a><a class="insta" href="https://instagram.com/igem_bits" rel="noopener" target="_blank"></a><a class="twitter" href="https://twitter.com/igembitsgoa" rel="noopener" target="_blank"></a></div></div></div></footer><script src="https://2020.igem.org/Template:BITSPilani-Goa_India/content-bundleJS?action=raw&amp;ctype=text/javascript"></script></body></html>
 
+
<div class="column full_size judges-will-not-evaluate">
+
<h3>★  ALERT! </h3>
+
<p>This page is used by the judges to evaluate your team for the <a href="https://2020.igem.org/Judging/Medals">medal criterion</a> or <a href="https://2020.igem.org/Judging/Awards"> award listed below</a>. </p>
+
<p> Delete this box in order to be evaluated for this medal criterion and/or award. See more information at <a href="https://2020.igem.org/Judging/Pages_for_Awards"> Instructions for Pages for awards</a>.</p>
+
</div>
+
 
+
 
+
<div class="clear"></div>
+
 
+
 
+
<div class="column full_size">
+
<h1>Software</h1>
+
<p>For Software Track teams, while you are not eligible for the Software Tool Special Prize, you can use this page to document your work.</p>
+
 
+
</div>
+
<div class="column two_thirds_size">
+
<h3>Best Software Tool Special Prize</h3>
+
<p>Regardless of the topic, iGEM projects often create or adapt computational tools to move the project forward. Because they are born out of a direct practical need, these software tools (or new computational methods) can be surprisingly useful for other teams. Without necessarily being big or complex, they can make the crucial difference to a project's success.  
+
 
+
 
+
<br><br>
+
To compete for the <a href="https://2020.igem.org/Judging/Awards">Best Software Tool prize</a>, please describe your work on this page and also fill out the description on the <a href="https://2020.igem.org/Judging/Judging_Form">judging form</a>.
+
<br><br>
+
To be eligible, your software has to be documented and made available under an OSI approved open source license.  
+
<br><br>
+
For software resources, please visit the <a href="https://2020.igem.org/Resources">Resources Hub</a>.
+
</p>
+
 
+
 
+
</div>
+
 
+
<div class="column third_size">
+
<div class="highlight decoration_A_full">
+
<h3> Inspiration </h3>
+
<p>
+
Here are a few examples from previous teams:
+
</p>
+
<ul>
+
<li><a href="https://2016.igem.org/Team:BostonU_HW">2016 BostonU HW</a></li>
+
<li><a href="https://2016.igem.org/Team:Valencia_UPV">2016 Valencia UPV</a></li>
+
<li><a href="https://2014.igem.org/Team:Heidelberg/Software">2014 Heidelberg</a></li>
+
<li><a href="https://2014.igem.org/Team:Aachen/Project/Measurement_Device#Software">2014 Aachen</a></li>
+
</ul>
+
</div>
+
</div>
+
 
+
</html>
+

Revision as of 00:05, 7 October 2020

Software | SugarGain | iGEM BITS Goa

Software

One of the most important aspects of the iGEM experience is the team wiki, more so this year than ever. As it occured to us that the Jamboree this year was going to be online, we realized how important wikis were going to be, and decided to make it easier for teams across the world to build their wikis.

Currently, building iGEM wikis requires teams to write code in a text box in their browsers, due to which they miss out on the wide variety of features code editors and integration tools offer these days. These tools have become the de facto standard in the web development industry, optimizing various parts of the process and ultimately making it much easier and faster.

Over the years, iGEM teams have come up with several ways to improve this experience. These solutions have focused on multiple aspects of building wikis - from making it easier to write code to uploading it and even implementing continuous integration. iGEM Toronto 2015, Waterloo 2017 and Virginia 2018 did excellent work in this area, with their wiki generators, upload APIs and CI tools. Some of these tools allowed teams to write code locally, in a code editor of their choice, and then upload it to iGEM servers for deployment.

However, we felt that there was a need for a holistic solution - something that would cover every aspect of iGEM wikis. This solution had to be comprehensive enough that teams wouldn't need to find other software to build common components, but it would still allow teams to easily integrate other libraries, should they need to do so. We identified three key areas to focus on: content, design and deployment.

We wanted to design something in line with the latest trends and best practices in the web development industry, but we also realized that these things change rapidly. This is why the software that previous years' iGEM teams built got outdated so quickly. In order to get around this, we decided to split our software into modules.

The way teams design and add content to their wikis usually varies widely, but the deployment process is common, since all iGEM wikis are powered by the MediaWiki engine. They write code in a code editor, and then manually copy and paste it in the text box on the page where it belongs. A typical iGEM wiki is anywhere between 15 to 20 pages, so it can quickly become cumbersome to copy and paste for every small change, and sometimes a few changes might just be left out in a hurry.

Deployment is one of the parts of this process that we could automate, and this is something each team would need, irrespective of which frontend web development library they use. These days in the web development industry, it is common to set up a version control system like Git, and link that to an automatic deployment service, like Github Actions or Travis. This ensures that every time a change is made in the codebase, it is automatically pushed to servers for deployment.

Github Actions and Travis are free for open source repositories, and most website hosting services offer integration with these. However, in order for iGEM teams to use such a service, an integration tool was required, that would allow CI/CD software to upload files to iGEM servers, so we decided to make one!

iGEM WikiSync

Our Python package, iGEM WikiSync allows iGEM teams to set up and continuous deployment for their wikis, making the wiki freeze a little less dreadful. It lets teams work on their wiki locally, using whichever web development framework they're familiar with, and upload the code to iGEM servers for deployment, without uploading a single file manually.

It does this in the following way:

  1. WikiSync looks for all assets (images, videos, PDFs, etc.), renames them according to iGEM specification, and uploads them to iGEM servers.
  2. It then goes through the code (HTML, CSS, JavaScript), scanning it for links.
  3. It replaces all local links to iGEM.org URLs where the files have been uploaded.
  4. Finally, all code files are also uploaded to iGEM servers and the team wiki is deployed.

WikiSync keeps track of the files uploaded in each run, so only changes are uploaded the next time it runs. It also checks code for internal broken links and shows warnings.

In order to access files on iGEM servers, WikiSync requires the user ID and password of a team member. These credentials are taken in as environment variables, so that they never have to be stored in plain text, and are discarded when the terminal session ends. When run as part of a CI/CD workflow on Github Actions or Travis, user credentials are stored as "secrets" in the repository, and CI providers ensure that they are never displayed publicly and cannot be accessed by anyone apart from the user themselves.

WikiSync is available at the following links:

iGEM WikiSync Github Action

By automating uploads, iGEM WikiSync allows teams to save dozens of hours over the course of their iGEM experience. This is made possible by using WikiSync to set up a continuous integration and continuous deployment routine on the wiki's version control repository, such as on Github. For example, for our own wiki, we set up continuous deployment using a Github Action we wrote for iGEM WikiSync that runs every two days, or as requested manually.

iGEM WikiSync Github Action is a Github Actions plugin that allows teams to easily set up a Github Actions workflow and integrate iGEM WikiSync into their wiki, so that everytime changes are made in the codebase, they're automatically sent to iGEM servers. All that is required is a git push.

Setting it up is a really simple process. Teams can either write their own CI workflows and include the plugin in just a few lines of code, or they can use our readymade recipes for wikis built with webpack, such as those made with our iGEM Wiki Starter Pack. All they have to do is download and include a file in their wiki repository and enable Github Actions for their wiki.

Since this Actions plugin behind-the-scenes runs iGEM WikiSync itself, it also needs access to iGEM.org credentials of a team member. These credentials are stored as "secrets" in the Github repository, so that they are never accessible to anyone apart from the user themselves. In public build logs, they are replaced with asterisks (*).

The Action can be found here along with usage instructions and common use cases.

iGEM Wiki Starter Pack