
Fellow developers and Sitecore lovers, summer is here! I hope you are enjoying your vacation! Here in Elounda(Crete), the weather(and view) is fantastic. If you have never been to Crete, I strongly recommend you to go there! Just look at the view:

In my previous post, Use Github Packages for storing Sitecore content as a nuget package, with the power of SITECORE CLI and GITHUB ACTIONS, we created a NuGet package containing an SCS package and stored it in GitHub Packages.
In today’s post, we will install the Sitecore Content Serialization package from the “created” NuGet package using GitHub Packages, with the power of SITECORE CLI and GITHUB ACTIONS.
Github Packages is great, it allows you to store all kinds of “package” types – Including NuGet packages 😉. We will grab a NuGet package containing an SCS package(Sitecore Content Serialization package).
GitHub Packages is a platform for hosting and managing packages, including containers and other dependencies. GitHub Packages combines your source code and packages in one place to provide integrated permissions management and billing, so you can centralize your software development on GitHub.
The powerful SITECORE CLI, Sitecore Command Line Interface, is a great command tool that allows you to administer your Sitecore items. We will use it to install an SCS package – Sitecore Content Serialization package to a Sitecore instance.
Sitecore Content Serialization (SCS) packages (file extension
.itempackage
) contain specified modules and all their serialized items. You use packages as build artifacts in your continuous integration pipeline by creating them in your build pipeline and installing them in your delivery pipeline.
The orchestrator behind it all will be the wonderful and powerful – GitHub Actions.
GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.
Ok friends, let’s begin!
First up is to set up the workflow in GitHub Actions. We will create a workflow file and put it in .github/workflows, let’s call it DeployContentPackage.yml. We want to run it manually, so we will go for the “workflow_dispatch”
name: Deploy content package to CM
on:
workflow_dispatch:
jobs:
Instead of having one big job, we will split the workflow into smaller jobs:
– Install NuGet package
– Deploy SCS package
The first job – Install NuGet package

The job will check out the repo code and install a NuGet package from Github packages.
install-nuget:
name: Install NuGet package
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v2
- name : Install NuGet package
shell: powershell
run: |
Invoke-Expression "./BackupContent/nuget.exe install SandboxSiteContent -Source https://nuget.pkg.github.com/VisionsInCode/Index.json -OutputDirectory BackupContent -x"
Let me break it down for you:
install-nuget:
name: Install NuGet package
runs-on: self-hosted
steps:
Here we set the job, and instruct it to use the self-hosted runner(which we created in the previous post).
- name: Checkout
uses: actions/checkout@v2
This step checks out the repo code
- name : Install NuGet package
shell: powershell
run: |
Invoke-Expression "./BackupContent/nuget.exe install SandboxSiteContent -Source https://nuget.pkg.github.com/VisionsInCode/Index.json -OutputDirectory BackupContent -x"
Here we install the NuGet package, it will be installed in the folder BackupContent. And the parameter -x installs the package with the name SandboxSiteContent only(no version):
No need to unpack and so on, look at the lovely SCS package – SandboxSite.itempackage. Ready to be installed to our Sitecore instance 😀
The final job – Deploy SCS package

Here we recreate the module.json file(it’s needed when installing the SCS package), login to the Sitecore site, and finally, deploy(install) the Sitecore Content Serialization package.
deploy-scs-package:
needs: install-nuget
name: Deploy SCS package
runs-on: self-hosted
steps:
- name : Create module.json file
id: create-json-module
uses: jsdaniell/create-json@1.1.2
with:
name: 'Content.module.json'
dir: 'VisionsInCode.Sitecore/src/Project/SandboxSite/'
json: '{"namespace": "Project.Content", "items":{"includes":[{"name":"Images","path":"/sitecore/media library/Project/VisionsInCode/Sites/SandboxSite","database": "master"},{"name": "Content","path": "/sitecore/content/VisionsInCode/Sites/SandboxSite","database": "master"}]}}'
- name : Deploy SCS package to CM
shell: powershell
run: |
# Add nuget source & install Sitecore CLI
dotnet nuget add source https://sitecore.myget.org/F/sc-packages/api/v3/index.json --name "Sitecore-Public-Nuget-Feed"
dotnet tool install --add-source=https://sitecore.myget.org/F/sc-packages/api/v3/index.json --version 2.0.0 sitecore.cli --local
# Login to ID Server
dotnet sitecore login --client-credentials true --auth https://id.visionsincode.localhost/ --cm https://cm.visionsincode.localhost/ --allow-write true --client-id "SANDBOXSITE_Automation" --client-secret "my_secret_garden"
# Install package
dotnet sitecore ser package install --package BackupContent/SandboxSiteContent/Sitecore/SandboxSite.itempackage --cm https://cm.visionsincode.localhost/ --client-id "SANDBOXSITE_Automation" --client-secret "my_secret_garden" -i Project.Content
Let me break it down for you:
deploy-scs-package:
needs: install-nuget
name: Deploy SCS package
runs-on: self-hosted
steps:
Create the job and instruct it to use the self-hosted runner. For the job to work, the previous job needs to be executed. Using “needs” will tell what job it depends on(install-nuget).
- name : Create module.json file
id: create-json-module
uses: jsdaniell/create-json@1.1.2
with:
name: 'Content.module.json'
dir: 'VisionsInCode.Sitecore/src/Project/SandboxSite/'
json: '{"namespace": "Project.Content", "items":{"includes":[{"name":"Images","path":"/sitecore/media library/Project/VisionsInCode/Sites/SandboxSite","database": "master"},{"name": "Content","path": "/sitecore/content/VisionsInCode/Sites/SandboxSite","database": "master"}]}}'
The next step will be to re-create the module.json file. (We don’t want it to be included in the Github repo, instead, we are creating it on the fly) The file will contain the paths to the content, which is needed for the next step.
- name : Deploy SCS package to CM
shell: powershell
run: |
# Add nuget source & install Sitecore CLI
dotnet nuget add source https://sitecore.myget.org/F/sc-packages/api/v3/index.json --name "Sitecore-Public-Nuget-Feed"
dotnet tool install --add-source=https://sitecore.myget.org/F/sc-packages/api/v3/index.json --version 2.0.0 sitecore.cli --local
# Login to ID Server
dotnet sitecore login --client-credentials true --auth https://id.visionsincode.localhost/ --cm https://cm.visionsincode.localhost/ --allow-write true --client-id "SANDBOXSITE_Automation" --client-secret "my_secret_garden"
# Install package
dotnet sitecore ser package install --package BackupContent/SandboxSiteContent/Sitecore/SandboxSite.itempackage --cm https://cm.visionsincode.localhost/ --client-id "SANDBOXSITE_Automation" --client-secret "my_secret_garden" -i Project.Content
The last step will install/deploy the Sitecore Content Serialization package to the Sitecore site:
1. First, we install Sitecore CLI, the command tool which allows us to administer Sitecore content(items).
2. But before the job can start deploying content, it needs to login – the non-interactive client login(we set up in the previous post).
3. The last part will be to install/deploy the Sitecore Content Serialization package – SandboxSite.itempackage , following “instructions” from the created module.json file (-i Project.Content).
Working with SCS package is great, it’s really powerful and I really recommend that you guys start using it. Here is some great documentation, read all about it:
https://doc.sitecore.com/en/developers/101/developer-tools/create-and-install-a-sitecore-content-serialization-package.html
And here is some great documentation on how to create NuGet packages:
https://doc.sitecore.com/en/developers/101/developer-tools/walkthrough–serializing-with-nuget-and-npm.html
That’s all for now folks 😀