{"version":3,"kind":"Article","sha256":"2fd84045f541d92ef756237018deb0c3aa9ea80c84db7e6f156697a86f7b86d4","slug":"workflows","location":"/content/lessons/5_workflows.md","dependencies":[],"frontmatter":{"title":"Build online with GitHub","numbering":{"title":{"offset":0,"enabled":true},"start":{"start":6,"enabled":true}},"content_includes_title":false,"authors":[{"nameParsed":{"literal":"Freek Pols","given":"Freek","family":"Pols"},"name":"Freek Pols","id":"contributors-myst-generated-uid-0"},{"nameParsed":{"literal":"Luuk Fröling","given":"Luuk","family":"Fröling"},"name":"Luuk Fröling","id":"contributors-myst-generated-uid-1"},{"nameParsed":{"literal":"Robert Lanzafame","given":"Robert","family":"Lanzafame"},"name":"Robert Lanzafame","id":"contributors-myst-generated-uid-2"},{"nameParsed":{"literal":"Kirstie Whitaker","given":"Kirstie","family":"Whitaker"},"name":"Kirstie Whitaker","id":"contributors-myst-generated-uid-3"},{"nameParsed":{"literal":"Jim Madge","given":"Jim","family":"Madge"},"name":"Jim Madge","id":"contributors-myst-generated-uid-4"}],"date":"2025-11-02","license":{"content":{"id":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/","name":"Creative Commons Attribution 4.0 International","free":true,"CC":true}},"github":"https://github.com/jupyter-book/workshop-template","edit_url":null,"abbreviations":{"JB2":"Jupyter Book 2","CI/CD":"Continuous Integration/Continuous Deployment","GHA":"GitHub Actions","GH":"GitHub","IDE":"Integrated Development Environment","VSC":"Visual Studio Code","CLI":"commmand line interface"},"source_url":"https://github.com/jupyter-book/workshop-template/blob/main/content/lessons/5_workflows.md","enumerator":"7","exports":[{"format":"md","filename":"5_workflows.md","url":"/build/5_workflows-1b279acac9c1780e94faa8e2e98f556a.md"}]},"mdast":{"type":"root","children":[{"type":"div","class":"font-light text-sm mb-4 updated-date-container","children":[{"type":"text","value":"Updated: 03 Nov 2025","key":"Rrib1VBiRX"}],"key":"rPQiiUfsdG"},{"type":"block","children":[{"type":"paragraph","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"children":[{"type":"text","value":"You may be familiar with GitHub Actions: it is a widely used continuous integration tool which can easily and automatically publish your Jupyter Book as a website. This lesson is designed to get you familiar with GitHub Actions in your Jupyter Book and learn how to manipulate them.","position":{"start":{"line":10,"column":1},"end":{"line":10,"column":1}},"key":"a3108Pyr7g"}],"key":"XWxT3cMAgO"},{"type":"admonition","kind":"tip","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Tip 🌶","position":{"start":{"line":12,"column":1},"end":{"line":12,"column":1}},"key":"XN19V9rwfN"}],"key":"BrktAgHTse"},{"type":"paragraph","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"children":[{"type":"text","value":"The workflow file generated by ","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"baf91VJFBr"},{"type":"inlineCode","value":"jupyter-book init --gh-pages","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"RAh4sc9XrA"},{"type":"text","value":" by 🌶 users is different than that generated by this template, but you can still follow the exercises.","position":{"start":{"line":13,"column":1},"end":{"line":13,"column":1}},"key":"Djholc6M50"}],"key":"dTAF6oyrzF"}],"key":"YEoPtb6G81"},{"type":"admonition","kind":"tip","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"What is GitHub Actions?","position":{"start":{"line":16,"column":1},"end":{"line":16,"column":1}},"key":"vVgFjazm4V"}],"key":"r2IrxSh9lk"},{"type":"paragraph","position":{"start":{"line":19,"column":1},"end":{"line":20,"column":1}},"children":[{"type":"text","value":"If you have no idea, or are confused what an Action is, don’t despair! The most simple explanation is that ","key":"R4kbFHfDGi"},{"type":"abbreviation","title":"GitHub Actions","children":[{"type":"text","value":"GHA","key":"fxP7EiCpbl"}],"key":"Gaie7MZlA8"},{"type":"text","value":" is a tool for automating workflows.\nFor our purposes, everything you need to know is described in this dropdown tip.","key":"jvKoLATk37"}],"key":"h2UjUxEX9I"},{"type":"paragraph","position":{"start":{"line":22,"column":1},"end":{"line":23,"column":1}},"children":[{"type":"text","value":"“GitHub Actions” is GitHub’s product name for its Continuous Integration / Continuous Deployment (","key":"EyGGZLVi3y"},{"type":"abbreviation","title":"Continuous Integration/Continuous Deployment","children":[{"type":"text","value":"CI/CD","key":"Vwjbrps1Px"}],"key":"emQPjfb6Yx"},{"type":"text","value":") services: if this term is unfamiliar, it’s not important, as you can simply think of ","key":"yCzSr52OJ6"},{"type":"abbreviation","title":"Continuous Integration/Continuous Deployment","children":[{"type":"text","value":"CI/CD","key":"fJBBVkvUFn"}],"key":"DQQ4CRnqrO"},{"type":"text","value":" and ","key":"WhnB3KCnJk"},{"type":"abbreviation","title":"GitHub","children":[{"type":"text","value":"GH","key":"B6kgmhIftW"}],"key":"ymnVVOiUnd"},{"type":"text","value":" Actions as an algorithm that can be carried out on your GitHub repository automatically.\nIt is the “workflow automation” framework that sometimes seem like magic to the outside observer.","key":"sc3fSAc3At"}],"key":"l99Cf3N55Q"},{"type":"paragraph","position":{"start":{"line":25,"column":1},"end":{"line":28,"column":1}},"children":[{"type":"text","value":"Within ","key":"w4H4BEJtUa"},{"type":"abbreviation","title":"GitHub Actions","children":[{"type":"text","value":"GHA","key":"sROCJnMTfb"}],"key":"jqMGVAVsm3"},{"type":"text","value":", “workflows” are defined using ","key":"XCd8lA14Va"},{"type":"inlineCode","value":".yml","position":{"start":{"line":25,"column":1},"end":{"line":25,"column":1}},"key":"j7AWMKDLFT"},{"type":"text","value":" files in the ","position":{"start":{"line":25,"column":1},"end":{"line":25,"column":1}},"key":"cmNOqxTQEb"},{"type":"inlineCode","value":".github/workflows","position":{"start":{"line":25,"column":1},"end":{"line":25,"column":1}},"key":"Og2RqbVvss"},{"type":"text","value":" folder of a repository.\nEach workflow can be triggered by one or more events, for example, a commit is pushed to the repository.\nEach workflows can have multiple steps (e.g. install software, build the book, deploy the book), and as many steps are repeated, it is possible to find pre-built “actions” in an online ","position":{"start":{"line":25,"column":1},"end":{"line":25,"column":1}},"key":"L42O6UES2R"},{"type":"link","url":"https://github.com/marketplace?type=actions","position":{"start":{"line":25,"column":1},"end":{"line":25,"column":1}},"children":[{"type":"text","value":"marketplace","position":{"start":{"line":25,"column":1},"end":{"line":25,"column":1}},"key":"EjjON1P5NS"}],"urlSource":"https://github.com/marketplace?type=actions","error":true,"key":"bmWlzTOgoM"},{"type":"text","value":".\nIn addition, workflows can include arbitrary code (e.g., bash or Python scripts).","position":{"start":{"line":25,"column":1},"end":{"line":25,"column":1}},"key":"GG3CzZKKTV"}],"key":"XpIR8Syp6p"},{"type":"paragraph","position":{"start":{"line":30,"column":1},"end":{"line":30,"column":1}},"children":[{"type":"abbreviation","title":"GitHub Actions","children":[{"type":"text","value":"GHA","key":"VG0WtVVKfw"}],"key":"beWUCs1n7n"},{"type":"text","value":" is generally free for public repositories, with some limitations on usage for private repositories.","key":"Ai2drN4RoO"}],"key":"A2Tah4kyCF"},{"type":"paragraph","position":{"start":{"line":32,"column":1},"end":{"line":32,"column":1}},"children":[{"type":"text","value":"By the end of this workshop you will read and modify workflow files to customize the build and deployment of your Jupyter Book.","position":{"start":{"line":32,"column":1},"end":{"line":32,"column":1}},"key":"CGggaOeugj"}],"key":"Wwk7NGV39x"}],"class":"dropdown","key":"S7BdYM2W8H"},{"type":"heading","depth":2,"position":{"start":{"line":35,"column":1},"end":{"line":35,"column":1}},"children":[{"type":"text","value":"Read it","position":{"start":{"line":35,"column":1},"end":{"line":35,"column":1}},"key":"aA0BHy6Mz1"}],"identifier":"read-it","label":"Read it","html_id":"read-it","implicit":true,"key":"D63aRu9Xzc"},{"type":"paragraph","position":{"start":{"line":37,"column":1},"end":{"line":39,"column":1}},"children":[{"type":"text","value":"In your folder of the repository there is a hidden folder called ","position":{"start":{"line":37,"column":1},"end":{"line":37,"column":1}},"key":"Gzy5XWGKSJ"},{"type":"inlineCode","value":".github","position":{"start":{"line":37,"column":1},"end":{"line":37,"column":1}},"key":"YXUcx9akJD"},{"type":"text","value":", and inside that is another folder called ","position":{"start":{"line":37,"column":1},"end":{"line":37,"column":1}},"key":"CT6QJ9tanD"},{"type":"inlineCode","value":"workflows","position":{"start":{"line":37,"column":1},"end":{"line":37,"column":1}},"key":"UdGx6nKgJJ"},{"type":"text","value":".\nInside that folder is a file called ","position":{"start":{"line":37,"column":1},"end":{"line":37,"column":1}},"key":"YohZ4L1KuM"},{"type":"inlineCode","value":"deploy.yml","position":{"start":{"line":37,"column":1},"end":{"line":37,"column":1}},"key":"dBelR7R6qv"},{"type":"text","value":" (or similar).\nThis file defines the workflow that builds and deploys your Jupyter Book to GitHub Pages.","position":{"start":{"line":37,"column":1},"end":{"line":37,"column":1}},"key":"TuId4mo0mQ"}],"key":"tbuprJlzbp"},{"type":"exercise","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Explore the workflow file","position":{"start":{"line":41,"column":1},"end":{"line":41,"column":1}},"key":"QxECsDh3XQ"}],"key":"ZWn27eRKe9"},{"type":"paragraph","position":{"start":{"line":42,"column":1},"end":{"line":42,"column":1}},"children":[{"type":"text","value":"Find the workflow file and open it to see what is inside. See if you can answer the following questions:","position":{"start":{"line":42,"column":1},"end":{"line":42,"column":1}},"key":"nMTkIEjncq"}],"key":"UfxYAjvCUc"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":44,"column":1},"end":{"line":48,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":44,"column":1},"end":{"line":44,"column":1}},"children":[{"type":"paragraph","children":[{"type":"text","value":"What version of Python is being used?","position":{"start":{"line":44,"column":1},"end":{"line":44,"column":1}},"key":"D8iCSjb5iW"}],"key":"A6bDBni8dd"}],"key":"MNJ1KH2aYa"},{"type":"listItem","spread":true,"position":{"start":{"line":45,"column":1},"end":{"line":45,"column":1}},"children":[{"type":"paragraph","children":[{"type":"text","value":"What type of virtual environment is created, and how?","position":{"start":{"line":45,"column":1},"end":{"line":45,"column":1}},"key":"N8LBWws72J"}],"key":"LswfiD5rET"}],"key":"bs4vemrkh5"},{"type":"listItem","spread":true,"position":{"start":{"line":46,"column":1},"end":{"line":46,"column":1}},"children":[{"type":"paragraph","children":[{"type":"text","value":"What command is used to build the book?","position":{"start":{"line":46,"column":1},"end":{"line":46,"column":1}},"key":"tKBwW9ac4k"}],"key":"Ap7SYbQavI"}],"key":"WYEF9pTqE4"},{"type":"listItem","spread":true,"position":{"start":{"line":47,"column":1},"end":{"line":48,"column":1}},"children":[{"type":"paragraph","children":[{"type":"text","value":"Can you see where the HTML build files are uploaded as an artifact and deployed to a GitHub Pages server?","position":{"start":{"line":47,"column":1},"end":{"line":47,"column":1}},"key":"IfWEhPfkqu"}],"key":"cwwYxV5XhL"}],"key":"XHGbFm1fO7"}],"key":"GTDy4LGVBI"},{"type":"admonition","kind":"warning","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"do not change anything yet!","position":{"start":{"line":49,"column":1},"end":{"line":49,"column":1}},"key":"KzfvXhD5pE"}],"key":"SiRLwtmSRZ"},{"type":"paragraph","position":{"start":{"line":50,"column":1},"end":{"line":50,"column":1}},"children":[{"type":"text","value":"Changing the workflow file before you understand it may break your book build! Luckily, you can always revert changes using git.","position":{"start":{"line":50,"column":1},"end":{"line":50,"column":1}},"key":"EK1MYG0d43"}],"key":"gAtsl3Ypne"}],"key":"GK7VrInwp0"}],"enumerated":true,"label":"exercise-XH9L44Csd1","identifier":"exercise-xh9l44csd1","enumerator":"1","html_id":"exercise-xh9l44csd1","key":"EI09jIXYSI"},{"type":"heading","depth":2,"position":{"start":{"line":54,"column":1},"end":{"line":54,"column":1}},"children":[{"type":"text","value":"Observe it","position":{"start":{"line":54,"column":1},"end":{"line":54,"column":1}},"key":"YBg5yxJ9h8"}],"identifier":"observe-it","label":"Observe it","html_id":"observe-it","implicit":true,"key":"VE7Tb9zOS1"},{"type":"paragraph","position":{"start":{"line":56,"column":1},"end":{"line":56,"column":1}},"children":[{"type":"text","value":"Now that you have seen the “steps” of the workflow, it is good to see them “in action” in the Browser.","position":{"start":{"line":56,"column":1},"end":{"line":56,"column":1}},"key":"DHnUKnuOjZ"}],"key":"aBlI2baSOV"},{"type":"exercise","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Watch the workflow execute","position":{"start":{"line":58,"column":1},"end":{"line":58,"column":1}},"key":"KxUrT9Omi5"}],"key":"EzgyS0AQDH"},{"type":"paragraph","position":{"start":{"line":59,"column":1},"end":{"line":59,"column":1}},"children":[{"type":"text","value":"Make a commit and push it to your repository. Then visit the “Actions” tab and watch the workflow execute. Specifically, note:","position":{"start":{"line":59,"column":1},"end":{"line":59,"column":1}},"key":"GoDucIL1Hi"}],"key":"Zt3NqlMnDI"},{"type":"list","ordered":false,"spread":false,"position":{"start":{"line":61,"column":1},"end":{"line":64,"column":1}},"children":[{"type":"listItem","spread":true,"position":{"start":{"line":61,"column":1},"end":{"line":61,"column":1}},"children":[{"type":"paragraph","children":[{"type":"text","value":"the green, yellow or red “dot” indicating status of the workflow,","position":{"start":{"line":61,"column":1},"end":{"line":61,"column":1}},"key":"j3tpaGkkoR"}],"key":"p9ku0Sjp8o"}],"key":"fjfTi2GXUC"},{"type":"listItem","spread":true,"position":{"start":{"line":62,"column":1},"end":{"line":62,"column":1}},"children":[{"type":"paragraph","children":[{"type":"text","value":"when you click on the most recent workflow run, you will see a summary of the job,","position":{"start":{"line":62,"column":1},"end":{"line":62,"column":1}},"key":"gJVijcukkw"}],"key":"Vw488k0Arr"}],"key":"V9dBqU617K"},{"type":"listItem","spread":true,"position":{"start":{"line":63,"column":1},"end":{"line":63,"column":1}},"children":[{"type":"paragraph","children":[{"type":"text","value":"after clicking on the “box” in the workflow diagram, you can see all of the workflow steps,","position":{"start":{"line":63,"column":1},"end":{"line":63,"column":1}},"key":"jLQwuPNGQf"}],"key":"m60GXaW4M8"}],"key":"dXtRyeATDG"},{"type":"listItem","spread":true,"position":{"start":{"line":64,"column":1},"end":{"line":64,"column":1}},"children":[{"type":"paragraph","children":[{"type":"text","value":"you can investigate each step to see the command line output.","position":{"start":{"line":64,"column":1},"end":{"line":64,"column":1}},"key":"C02kqezaKN"}],"key":"TORVypsGJL"}],"key":"zXGZA4y6H4"}],"key":"nhjh16MEkk"}],"enumerated":true,"label":"exercise-uOg8frTiBg","identifier":"exercise-uog8frtibg","enumerator":"2","html_id":"exercise-uog8frtibg","key":"C0RIDxvwVO"},{"type":"paragraph","position":{"start":{"line":67,"column":1},"end":{"line":68,"column":1}},"children":[{"type":"text","value":"Understanding where this information is available in your repository is especially useful when debugging problems with your website and PDF build.\nIt is also important to know that this is where you can search for error logs (in the ","key":"CrNuZj6gmo"},{"type":"abbreviation","title":"commmand line interface","children":[{"type":"text","value":"CLI","key":"a8wP1z056O"}],"key":"gTf9b3joTx"},{"type":"text","value":"), especially when problems may not occur in your local setup, but your website is not deploying properly.","key":"QKviUXSPSo"}],"key":"QJNZOng5zT"},{"type":"heading","depth":2,"position":{"start":{"line":70,"column":1},"end":{"line":70,"column":1}},"children":[{"type":"text","value":"Break it","position":{"start":{"line":70,"column":1},"end":{"line":70,"column":1}},"key":"jF8f6iq5zu"}],"identifier":"break-it","label":"Break it","html_id":"break-it","implicit":true,"key":"ah5FCF7yIO"},{"type":"paragraph","position":{"start":{"line":72,"column":1},"end":{"line":72,"column":1}},"children":[{"type":"text","value":"To make sure you know what a “problem” looks like, we can intentionally break the workflow.","position":{"start":{"line":72,"column":1},"end":{"line":72,"column":1}},"key":"CLKk6s8QV6"}],"key":"thYMIJ3EvD"},{"type":"exercise","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Force an error in the workflow","position":{"start":{"line":74,"column":1},"end":{"line":74,"column":1}},"key":"kI6Wi8ugyo"}],"key":"FBI2g2N0pm"},{"type":"paragraph","position":{"start":{"line":75,"column":1},"end":{"line":75,"column":1}},"children":[{"type":"text","value":"Introduce an error in the workflow and watch the Actions and workflow pages to observe what it looks like when an error occurs.","position":{"start":{"line":75,"column":1},"end":{"line":75,"column":1}},"key":"EqAlZmaMwa"}],"key":"zZo4v8vg4V"},{"type":"paragraph","position":{"start":{"line":77,"column":1},"end":{"line":77,"column":1}},"children":[{"type":"text","value":"There are many ways to accomplish this; perhaps the easiest would be to modify the terminal commands in one of the workflow steps (e.g., replace ","position":{"start":{"line":77,"column":1},"end":{"line":77,"column":1}},"key":"BsvFk8wqDf"},{"type":"inlineCode","value":"jupyter book build","position":{"start":{"line":77,"column":1},"end":{"line":77,"column":1}},"key":"w2JYDX7tqN"},{"type":"text","value":" with ","position":{"start":{"line":77,"column":1},"end":{"line":77,"column":1}},"key":"eQZ70LBgVV"},{"type":"inlineCode","value":"jupyter book break","position":{"start":{"line":77,"column":1},"end":{"line":77,"column":1}},"key":"xbbs4PKEta"},{"type":"text","value":", which does not exist).","position":{"start":{"line":77,"column":1},"end":{"line":77,"column":1}},"key":"B2NXHxEc74"}],"key":"U6L3nApaLu"},{"type":"paragraph","position":{"start":{"line":79,"column":1},"end":{"line":79,"column":1}},"children":[{"type":"text","value":"Revert the error afterwards.","position":{"start":{"line":79,"column":1},"end":{"line":79,"column":1}},"key":"Jm0VBz2xtx"}],"key":"XdqReMHQZv"}],"enumerated":true,"label":"exercise-aATEqL9p7u","identifier":"exercise-aateql9p7u","enumerator":"3","html_id":"exercise-aateql9p7u","key":"uIFbFNlXSG"},{"type":"heading","depth":2,"position":{"start":{"line":82,"column":1},"end":{"line":82,"column":1}},"children":[{"type":"text","value":"Change it","position":{"start":{"line":82,"column":1},"end":{"line":82,"column":1}},"key":"EpRJHG1Sfh"}],"identifier":"change-it","label":"Change it","html_id":"change-it","implicit":true,"key":"ldEFkAMtP6"},{"type":"paragraph","position":{"start":{"line":84,"column":1},"end":{"line":84,"column":1}},"children":[{"type":"text","value":"Here we will modify the workflow to add a new feature: automatically updating the “last edited” date in our published book.","position":{"start":{"line":84,"column":1},"end":{"line":84,"column":1}},"key":"PgZE6iEex5"}],"key":"WOPMeY1S7V"},{"type":"paragraph","position":{"start":{"line":86,"column":1},"end":{"line":86,"column":1}},"children":[{"type":"text","value":"The following bash script will modify ","position":{"start":{"line":86,"column":1},"end":{"line":86,"column":1}},"key":"AiOmPfsnbf"},{"type":"inlineCode","value":"date:","position":{"start":{"line":86,"column":1},"end":{"line":86,"column":1}},"key":"XnFcQboV40"},{"type":"text","value":" field in the ","position":{"start":{"line":86,"column":1},"end":{"line":86,"column":1}},"key":"spoDifXzGD"},{"type":"inlineCode","value":"myst.yml","position":{"start":{"line":86,"column":1},"end":{"line":86,"column":1}},"key":"qBR2cfreZq"},{"type":"text","value":" file:","position":{"start":{"line":86,"column":1},"end":{"line":86,"column":1}},"key":"NkRWjzxY0C"}],"key":"T1N8BjYmiw"},{"type":"code","lang":"yaml","value":"- name: Add current date to myst.yml\n  shell: bash\n  run: |\n      BUILD_DATE=\"$(date +'%Y-%m-%d')\"\n      sed -i \"s|\\${BUILD_DATE}|${BUILD_DATE}|g\" myst.yml\n      echo \"myst.yml:\"\n      grep -nE '^\\s*date:' myst.yml","position":{"start":{"line":88,"column":1},"end":{"line":96,"column":1}},"key":"A4e7AnH2HK"},{"type":"paragraph","position":{"start":{"line":98,"column":1},"end":{"line":98,"column":1}},"children":[{"type":"text","value":"In addition, this simple script requires setting ","position":{"start":{"line":98,"column":1},"end":{"line":98,"column":1}},"key":"YjVskGTIbG"},{"type":"inlineCode","value":"${BUILD_DATE}","position":{"start":{"line":98,"column":1},"end":{"line":98,"column":1}},"key":"dL7D9moxkW"},{"type":"text","value":" for the ","position":{"start":{"line":98,"column":1},"end":{"line":98,"column":1}},"key":"IMKnd4kedV"},{"type":"inlineCode","value":"date","position":{"start":{"line":98,"column":1},"end":{"line":98,"column":1}},"key":"UcIn9DQiB9"},{"type":"text","value":" field value in ","position":{"start":{"line":98,"column":1},"end":{"line":98,"column":1}},"key":"e03AA3DUuA"},{"type":"inlineCode","value":"myst.yml","position":{"start":{"line":98,"column":1},"end":{"line":98,"column":1}},"key":"A1Yk1hVRRv"},{"type":"text","value":".","position":{"start":{"line":98,"column":1},"end":{"line":98,"column":1}},"key":"Rwujxl1WAB"}],"key":"drLKZdpNXl"},{"type":"exercise","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Modify the workflow file","position":{"start":{"line":100,"column":1},"end":{"line":100,"column":1}},"key":"v4Am35PrYJ"}],"key":"Puo2vKHOI8"},{"type":"paragraph","position":{"start":{"line":102,"column":1},"end":{"line":102,"column":1}},"children":[{"type":"text","value":"Modify ","position":{"start":{"line":102,"column":1},"end":{"line":102,"column":1}},"key":"MjpzokHypg"},{"type":"inlineCode","value":"deploy.yml","position":{"start":{"line":102,"column":1},"end":{"line":102,"column":1}},"key":"rt1538shmG"},{"type":"text","value":" to implement the feature.","position":{"start":{"line":102,"column":1},"end":{"line":102,"column":1}},"key":"ekkcD8xE8q"}],"key":"kIf6EfiFZ4"},{"type":"paragraph","position":{"start":{"line":104,"column":1},"end":{"line":104,"column":1}},"children":[{"type":"text","value":"Confirm this was done successfully by checking the rendered website online.","position":{"start":{"line":104,"column":1},"end":{"line":104,"column":1}},"key":"idWzPCQdOO"}],"key":"F7owAox0LM"}],"enumerated":true,"label":"exercise-tPZJVr4tVh","identifier":"exercise-tpzjvr4tvh","enumerator":"4","html_id":"exercise-tpzjvr4tvh","key":"HYrOjzOI3j"},{"type":"exercise","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Test your understanding","position":{"start":{"line":107,"column":1},"end":{"line":107,"column":1}},"key":"GRFnVBtFKz"}],"key":"Obxyaf3lL2"},{"type":"paragraph","position":{"start":{"line":109,"column":1},"end":{"line":109,"column":1}},"children":[{"type":"text","value":"Although the time is not displayed in our update, what is the actual date and time that is represented in the value ","position":{"start":{"line":109,"column":1},"end":{"line":109,"column":1}},"key":"lHF6gxQyRj"},{"type":"inlineCode","value":"BUILD_DATE","position":{"start":{"line":109,"column":1},"end":{"line":109,"column":1}},"key":"uNnxfFdWEf"},{"type":"text","value":"?","position":{"start":{"line":109,"column":1},"end":{"line":109,"column":1}},"key":"Qf77K9Ibh0"}],"key":"noTg7EJeeh"},{"type":"paragraph","position":{"start":{"line":111,"column":1},"end":{"line":114,"column":1}},"children":[{"type":"text","value":"A. time that file was edited","position":{"start":{"line":111,"column":1},"end":{"line":111,"column":1}},"key":"gi10tnqxVO"},{"type":"break","position":{"start":{"line":111,"column":1},"end":{"line":111,"column":1}},"key":"RewjbMAJgQ"},{"type":"text","value":"B. time of commit","position":{"start":{"line":111,"column":1},"end":{"line":111,"column":1}},"key":"X84Cjg7dp0"},{"type":"break","position":{"start":{"line":111,"column":1},"end":{"line":111,"column":1}},"key":"Zgv3wwMRez"},{"type":"text","value":"C. time of push","position":{"start":{"line":111,"column":1},"end":{"line":111,"column":1}},"key":"nqFQbBKikH"},{"type":"break","position":{"start":{"line":111,"column":1},"end":{"line":111,"column":1}},"key":"We8NNBj2fi"},{"type":"text","value":"D. other","position":{"start":{"line":111,"column":1},"end":{"line":111,"column":1}},"key":"sQMF3xvCZo"}],"key":"v1xMN0k6cV"},{"type":"admonition","kind":"tip","children":[{"type":"admonitionTitle","children":[{"type":"text","value":"Check your answer","position":{"start":{"line":116,"column":1},"end":{"line":116,"column":1}},"key":"FlRe4QuXJ8"}],"key":"tYVzF5IXMs"},{"type":"paragraph","position":{"start":{"line":118,"column":1},"end":{"line":118,"column":1}},"children":[{"type":"text","value":"The answer is D, other. The time represented by ","position":{"start":{"line":118,"column":1},"end":{"line":118,"column":1}},"key":"plNI6g0EUT"},{"type":"inlineCode","value":"BUILD_DATE","position":{"start":{"line":118,"column":1},"end":{"line":118,"column":1}},"key":"sEVPMqDK2D"},{"type":"text","value":" corresponds to the moment when the first line in the code snippet added to the workflow file was executed in the cloud. It is closest to the time of the push, plus the extra time needed to set up the virtual environment and start the book build process.","position":{"start":{"line":118,"column":1},"end":{"line":118,"column":1}},"key":"p3RSElOTBj"}],"key":"PO5pItFW4F"}],"class":"dropdown","key":"DaA4sqK90s"}],"enumerated":true,"label":"exercise-AmDE4fhLM0","identifier":"exercise-amde4fhlm0","enumerator":"5","html_id":"exercise-amde4fhlm0","key":"KbKaC9wXJj"}],"key":"WPYiIKuurj"}],"key":"XydKYd5V21"},"references":{"cite":{"order":[],"data":{}}},"footer":{"navigation":{"prev":{"title":"Executable content introduction","url":"/executable","group":"Jupyter Book 2 Workshop Template"},"next":{"title":"Create PDF output 🌶","url":"/pdfoverview","group":"Jupyter Book 2 Workshop Template"}}},"domain":"http://localhost:3000"}