Making a Kodi add-on repository
In this post I'll explain how to create your own Kodi add-on repository, deploy it on Netlify and automate that workflow.
Kodi
Kodi is a popular open source multimedia center. It has a huge add-ons ecosystem which can extend functionality significantly. Add-ons are distributed as regular zip archives and you can install it via Kodi UI just specifying a path in your filesystem. That approach has one disadvantage. If you want to update add-on version you have to do it manually. I mean you should follow updates of the add-on, download and install it every time.
In order to get rid off all of these manual actions we can create an add-ons repository and enable it in Kodi.
Repository add-on structure
According to Kodi wiki an add-on repo should have some add-ons, a master xml file and a checksum of that file. Directory structure should look like this:
repo_dir
├── addons.xml
├── addons.xml.md5
└── addon.id
└──addon.id-x.y.z.zip
...
└── addon2.id
└── addon2.id-x.y.z.zip
You can also put a repository add-on for distribution. This allows you to share your repository with others.
Hosting
Add-on repository should be hosted on some web server. Static content hosting services such as Github Pages or Netlify perfectly fit for this task. I prefer Netlify because it gives more control for the deployment and its starter tariff plan is more than enough for our purposes. By the way this blog is also hosted on Netlify.
Netlify provides a nice CLI tool for the deployment. First you should install netlify-cli
. It's
a javascript application so we use npm
here:
$ npm install netlify-cli
$
Then you can deploy a local folder to your site in the following way:
$ node_modules/netlify-cli/bin/run deploy --dir=your_directory \
--prod \
--auth="$NETLIFY_AUTH_TOKEN" \
--site="$NETLIFY_SITE_ID"
$
$NETLIFY_AUTH_TOKEN
and $NETLIFY_SITE_ID
you will find in Netlify settings. After that your
static files will be accessible via Internet. That's exactly what we need for making Kodi add-on
repository.
Live example
I created a Kodi add-on for one streaming service and in one day I decided to create an add-on repository. I already had configured Travis CI and build script. I was need to extend it a bit. A release pipeline is very simple:
git push origin some_tag -> lint -> test -> deploy
In deploy
stage an add-on archive is created and attached to Github Release as an asset. I
split it on deploy_github
and deploy_netlify
. In deploy_netlify
the build script generates a
repo directory, put required files there and uploads everything to Netlify using netlify-cli
.
Resulting pipeline:
git push origin some_tag -> lint -> test -> deploy_github -> deploy_netlify
And the build script make.sh
:
#!/bin/bash
# I omitted the body of functions to show the idea.
# Full source can be found in the references below.
function check_version() {
...
}
function build_video_addon() {
check_version $1
echo "Creating video.kino.pub add-on archive"
echo "======================================"
...
}
function build_repo_addon() {
echo "Creating repo.kino.pub add-on archive"
echo "====================================="
...
}
function create_repo() {
build_video_addon $1
build_repo_addon
echo "Creating repository add-on directory structure"
echo "=============================================="
...
}
function deploy() {
create_repo $1
echo "Deploying files to Netlify"
echo "=========================="
node_modules/netlify-cli/bin/run deploy --dir=repo \
--prod \
--auth="$NETLIFY_AUTH_TOKEN" \
--site="$NETLIFY_SITE_ID"
}
"$@"
In deploy_github
CI runs bash make.sh build_video_addon
and uploads the archive to Github. Then
in deploy_netlify
bash make.sh deploy
is called.
As you can see creating a Kodi add-on repository is a quite trivial task and updating it can be easily automated.