As I understand ghost CLI makes it easy to update Ghost server & admin client. The cli sets up the following directory structure with a symlink from the current to the most up-to-date version:
content
current ---------|
versions |
2.25.8 <--- |
When I run ghost update I assume the cli will download and add a new version to the versions folder and update the symlink:
content
current ---------|
versions |
2.25.8 |
2.25.9 <----|
This makes an update a breath.
However, what if I’ve made changes to the core? This is where things become complicated.
I see two options:
The first option is to update through CLI and then manually make changes in the newest core.
Second option is to have a clone of the main Ghost core in git and perform merges after the new version is released. In that case I can’t use CLI for update.
What’s the recommended option? Is there an article to read about it? Thanks!
Your understanding of how Ghost updates your instance is spot on. Your assessment that making core changes can be difficult is exactly why it’s not suggested to make core changes, but you’re absolutely correct
The problem with option 2 is that the git repository is inherently designed to be used for development, not production - for example, the admin client is built in real time, rather than using the bundled version included in the latest release. Your best bet is option 1. You can probably streamline applying your changes by using patches - this article seems to be a good starting point for that:
Got it, thanks! Then we’ll probably go with the option 1 - manual patching. Do you know if there’s any tests suite that we can use to run our Ghost core against after the merge?
@Hannah In my case i disable the labs link from the admin, mainly because of the delete all content button. Don’t want an angry or naive admin to delete everything. And sometimes the whole design section, for example when i did the static mega menu then that design section will not work for an admin to add a section to the nav menu, so an admin user will ask why that section its there for him.
@Hannah sure, we’ll probably customize the core a lot, the big feature will be a membership system, I’ve seen it in the roadmap of Ghost. But at this point we’ll start by implementing featured article flag that can only be set by an administrator. This will mark articles featured on the main page. It will be different to featured articles marked by authors in that writers make featured articles shown on their stories page, not the landing.
I’m wondering what’s the best place to ask for questions about internals? This forum, github issues?
@lmuzquiz what’s your workflow for updating the core?
@maxkoretskyi i´m more into UI/UX and marketing, i’m no expert on web dev, but here’s basically what i do:
Install a previous version of Ghost on my server. Now this version is almost the latest but not the latest. Why? Cause when i upload my modified zipped version of Ghost to the server im gonna use the CLI ghost update command (from a zip file) which will not work (i think) if its not a newer version.
Install Ghost from source on my local machine
1.1 Run yarn to update dependencies.
Check if it works by running grunt dev
2.1 Create account & access the admin
Make my changes, in this case to some .hbs files for the admin client.
Check if changes reflect on the admin
After making changes, getting the zip file for the modified version using grunt release will almost always certainly throw errors, stopping the release process. So i always have to use the --force. (no pun intended) like this: grunt release --force
Upload zip file to the versions folder on the server and use this command: ghost update --zip /path/to/zipfile
Before running ghost update you might want to do a ghost doctor
On local machine stash my changes (i don’t do a git branch).
Finished!
Lets say later you want to update the ghost core:
7.1 Run grunt master, Apply stash, fix conflicts.
7.2 getting again the zipped version by running grunt release --force (to avoid being stopped by errors).
7.3 Stash changes again.
I think you have to make sure to use the stable branch when doing all this. Not master.
Again, im no expert, Im sure there’s a better way to do all this.