|
| 1 | += GraphAcademy Course Content |
| 2 | + |
| 3 | +This repository holds the course curriculum for link:https://graphacademy.neo4j.com[GraphAcademy^]. |
| 4 | + |
| 5 | + |
| 6 | +== Prerequisites |
| 7 | + |
| 8 | +You will need the following software to run GraphAcademy locally: |
| 9 | + |
| 10 | +* link:https://www.docker.com/[Docker^] |
| 11 | +* link:https://aws.amazon.com/cli/[AWS CLI^] |
| 12 | +* link:https://nodejs.org/en/download[Node.js^] |
| 13 | +* link:https://git-scm.com/downloads[Git] |
| 14 | + |
| 15 | +Recommended: |
| 16 | + |
| 17 | +* link:https://code.visualstudio.com/Download[VS Code^] |
| 18 | + * Asciidoc extension |
| 19 | + |
| 20 | +== Setup |
| 21 | + |
| 22 | +This repository uses link:https://docs.docker.com/compose/install/[`docker-compose`] to create a local server using the latest production build of the GraphAcademy website (link:https://github.com/neo4j-graphacademy/website/[repo here^]). The docker image is stored on AWS ECR, so you will need credentials - talk to mailto:adam@neo4j.com[Adam]. |
| 23 | + |
| 24 | +1. Clone this repository |
| 25 | +2. Install the link:https://aws.amazon.com/cli/[AWS CLI^] |
| 26 | +3. Run `aws configure` to configure the AWS CLI |
| 27 | +4. Log in to docker using the credentials above: |
| 28 | + |
| 29 | + aws ecr get-login-password --region us-east-1 | docker login -u AWS --password-stdin 715633473519.dkr.ecr.us-east-1.amazonaws.com |
| 30 | + |
| 31 | +5. Install the dependencies using NPM |
| 32 | + |
| 33 | + npm install |
| 34 | + |
| 35 | +6. You will need to create a `.env` file in the project root with Auth0 configuration. You can get an example file from mailto:adam@neo4j.com[Adam] or mailto:martin.ohanlon@neo4j.com[Martin]. |
| 36 | + * `NEO4J_HOST` |
| 37 | + * `NEO4J_USERNAME` |
| 38 | + * `NEO4J_PASSWORD` |
| 39 | + * `AUTH0_CLIENT_ID` |
| 40 | + * `AUTH0_CLIENT_SECRET` |
| 41 | + * `AUTH0_ISSUER_BASE_URL` |
| 42 | + * `CDN_URL` |
| 43 | + |
| 44 | +7. Run `npm run dev` to start the server |
| 45 | + |
| 46 | + * The local server will be available at http://localhost:3000 + |
| 47 | + * A Neo4j instance will be available on http://localhost:7474 + |
| 48 | + * A process will listen for changes in the `asciidoc/` folder and sync the content to Neo4j |
| 49 | + |
| 50 | +=== Devcontainer |
| 51 | + |
| 52 | +If you are using VS Code, you can use the devcontainer to run the application in a container. |
| 53 | + |
| 54 | +You will need the link:https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers[Dev Containers^] extension installed and link:https://www.docker.com/[Docker^] running. |
| 55 | + |
| 56 | +When the devcontainer is started, it will: |
| 57 | + |
| 58 | +* Install all dependencies |
| 59 | +* Start the GraphAcademy application and Neo4j database. |
| 60 | + |
| 61 | +You can run the content update and sync by running the following command in a terminal: |
| 62 | + |
| 63 | +[source,sh] |
| 64 | +npm run dev:watch |
| 65 | + |
| 66 | +== File Structure |
| 67 | + |
| 68 | +All content lives in the `asciidoc/` directory. As you modify the content, a process will sync the course structure to Neo4j. |
| 69 | + |
| 70 | +* `categories/` - Category information |
| 71 | +* `courses/` - All courses are organised into the own folder structure with modules and lessons |
| 72 | +* `emails/` - The emails sent to users on enrolment, completion and a reminder email when the user has been inactive for 7 days |
| 73 | +* `languages/` - i18n phrases for courses in languages other than English. |
| 74 | +* `pages/` - "CMS" content displayed throughout the website, for example the `/certifications/` page |
| 75 | +* `shared/` - Content shared across courses |
| 76 | +* `statuses/` - Meta data around course statuses |
| 77 | + |
| 78 | + |
| 79 | +=== Course Structure |
| 80 | + |
| 81 | +[source] |
| 82 | +---- |
| 83 | +asciidoc |
| 84 | + + courses/ |
| 85 | + + {course-slug}/ - Course Folder |
| 86 | + + badge.svg - SVG badge used across the site |
| 87 | + | overview.adoc - Course meta data and content used on the course overview page |
| 88 | + + modules/ - Each course is split into modules |
| 89 | + + {module-slug}/ |
| 90 | + | overview.adoc |
| 91 | + + lessons/ - A module is split into lessons |
| 92 | + + {lesson-slug}/ |
| 93 | + | lesson.adoc |
| 94 | + + questions/ - A lesson can be optional, otherwise will have questions. |
| 95 | + | question-1.adoc |
| 96 | + | question-2.adoc |
| 97 | +---- |
| 98 | + |
| 99 | + |
| 100 | +== Workshops |
| 101 | + |
| 102 | +Workshops are instructor-led courses that are designed to be delivered in a classroom setting. They should not be used for self-study. The following workshops are available: |
| 103 | + |
| 104 | +* **Introduction to Graph Databases Workshop** (`workshop-fundamentals`) - Learn about Graph theory, Neo4j fundamentals, and how to read and write data using Cypher. + |
| 105 | + link:https://graphacademy.neo4j.com/courses/workshop-fundamentals[View Workshop] |
| 106 | +* **Importing Data into Neo4j Workshop** (`workshop-importing`) - Learn how to import your data into Neo4j + |
| 107 | + link:https://graphacademy.neo4j.com/courses/workshop-importing[View Workshop] |
| 108 | +* **Gen-AI - Hands-on Workshop** (`genai-workshop`) - GenAI Beyond Chat with RAG, Knowledge Graphs and Python + |
| 109 | + link:https://graphacademy.neo4j.com/courses/genai-workshop[View Workshop^] |
| 110 | +* **Mastering Retrieval-Augmented Generation (RAG)** (`genai-workshop-graphrag`) - Learn how to implement GraphRAG with the neo4j-graphrag Python Package + |
| 111 | + link:https://graphacademy.neo4j.com/courses/genai-workshop-graphrag[View Workshop^] |
| 112 | +// * **GenAI Workshop - TypeScript** (`genai-workshop-typescript`) - Build a Conference Chatbot with LangChain and Neo4j + |
| 113 | +// link:https://graphacademy.neo4j.com/courses/genai-workshop-typescript[View Workshop^] |
| 114 | + |
| 115 | + |
| 116 | +== QA |
| 117 | + |
| 118 | +A suite of tests have been setup to ensure courses meet the right standard. |
| 119 | + |
| 120 | +To open the test suite run: |
| 121 | + |
| 122 | +[source,sh] |
| 123 | +npm run test |
| 124 | + |
| 125 | +This will open up a UI. Select E2E testing > Chrome and then select the course. |
| 126 | + |
| 127 | +To create a test for your course, you can copy one of the existing files in the `cypress/e2e` folder to `cypress/e2e/{slug}.cy.js` and then change line 6 to `cy.getCourseDetails('{slug}')`/ |
| 128 | + |
| 129 | + |
| 130 | +== Contributing |
| 131 | + |
| 132 | +To create a new course or modify an existing course, please create a new branch and make your changes. |
| 133 | +Once you have finished, create a new PR and add `adam-cowley` as a reviewer. |
| 134 | + |
| 135 | + git checkout -b new-course |
| 136 | + mkdir asciidoc/courses/new-course/ |
| 137 | + echo "= New Course\n:status: draft" > asciidoc/courses/new-course/course.adoc |
| 138 | + |
| 139 | + git add asciidoc/courses/new-course/ |
| 140 | + git commit -m "Added new course" |
| 141 | + git push --set-upstream origin new-course |
| 142 | + |
| 143 | +Before creating the PR, please rebase your branch on the main branch. |
| 144 | + |
| 145 | + git fetch origin main |
| 146 | + git rebase main |
| 147 | + |
| 148 | + |
| 149 | +=== Creating a PR |
| 150 | + |
| 151 | +When you create a PR, select the correct template: |
| 152 | + |
| 153 | +* link:https://github.com/neo4j-graphacademy/courses/compare/main...other?template=course_draft.md[Course Draft Template^] |
| 154 | +* link:https://github.com/neo4j-graphacademy/courses/compare/main...other?template=course_release.md[Course Release Template^] |
| 155 | + |
| 156 | +The checklist must be completed before the PR can be merged. |
| 157 | + |
| 158 | + |
| 159 | +=== Generating a Banner |
| 160 | + |
| 161 | +To generate a banner image for a course, run the following command: |
| 162 | + |
| 163 | +[source] |
| 164 | +npm run generate:ogimages |
| 165 | + |
| 166 | +The command scans through the `asciidoc/` folder, finds all courses that don't include a `banner.png` image and attempts to create them. |
| 167 | + |
| 168 | +== Deploying Changes |
| 169 | + |
| 170 | +When a new application server is created, the latest tagged version of this repository is downloaded by the server. |
| 171 | + |
| 172 | +You can use the `npm version` command to create a new tag. First, run a `git pull --tags` to get the latest commits and tags from the server, then run the `npm version` command to create a new tag. Once you are done, run `git push --tags`. |
| 173 | + |
| 174 | + git pull --tags origin main |
| 175 | + npm version patch |
| 176 | + git push --tags origin main |
| 177 | + |
| 178 | + |
| 179 | +* `npm version patch` - To be used when minor fixes are made to an existing course |
| 180 | +* `npm version minor` - To be used when a new course is released |
| 181 | +* `npm version major` - To be used when a major change is made to the repository - for example, multiple course changes, or addition of a new category |
| 182 | + |
| 183 | +== Linking Certifications |
| 184 | + |
| 185 | +To link certifications from the certifications repository, create a symlink: |
| 186 | + |
| 187 | +[source,sh] |
| 188 | +ln -s ../certifications/asciidoc/certifications/neo4j-certification asciidoc/certifications/neo4j-certification |
| 189 | + |
| 190 | +== Documentation |
| 191 | + |
| 192 | +Additional documentation is located in the link:docs/[Docs folder]. |
0 commit comments