Forking and publishing#

The steps below are a walk-through to contribute to this repository, It ensures that GitHub Actions and GitHub Pages are enabled, so you can run continuous integration and see the pages live at <your_user>.github.io/documentation, and git-lfs artifacts are properly synced.

Note

Using the Python virtual environment (venv) is recommended, but if you wish to not use it, skip steps in green.

Preparing your origin#

There is three options to host your work, for users:

  • Fork: that want to use the GitHub flow (recommended).

  • Copy: that want to work privately first.

  • Branch: with write access to analogdevicesinc organization.

Fork#

Ensure git-lfs is installed with:

sudo apt install git-lfs -y

Fork the analogdevicesinc/documentation repo on your account.

Enable the workflows on the forked repo at github.com/<your_user>/documentation/actions by clicking the green button
“I understand my workflows, go ahead and enable them”.

Clone the repository:

~$
git clone https://github.com/<your_user>/documentation \
    --depth=10 -- documentation
~$
cd documentation

Copy#

Ensure git-lfs is installed with:

sudo apt install git-lfs -y

Clone mainland:

~$
git clone https://github.com/analogdevicesinc/documentation \
    --depth=10 -- documentation
~$
cd documentation

Setup both origins, for example, call analogdevicesinc public and your copy private at the .git/config, similar to:

[core]
     repositoryformatversion = 0
     filemode = true
     bare = false
     logallrefupdates = true
[remote "public"]
     url = https://github.com/analogdevicesinc/documentation.git
     fetch = +refs/heads/*:refs/remotes/public/*
[remote "private"]
     url = https://github.com/<your_user>/documentation.git
     fetch = +refs/heads/*:refs/remotes/private/*
[branch "main"]
     # Set your private copy as upstream
     remote = private
     merge = refs/heads/main

Push the working branch to your copy.

~/documentation$
git push private main:main

Fetch from analogdevicesinc and push to your copy the large files binaries:

~/documentation$
git lfs fetch --all public
~/documentation$
git lfs push --all private

Branch#

If you have write permission to the repository, you shall add your work to a branch at mainland, then just:

Ensure git-lfs is installed with:

sudo apt install git-lfs -y

Clone the repository

~$
git clone https://github.com/analogdevicesinc/documentation \
    --depth=10 \
    -- documentation
~$
cd documentation

Create and checkout a branch

~/documentation$
git checkout -b <your_branch>

Preparing your environment#

Clone and build the doc for the first time (working directory: repo root):

Ensure pip is up-to-date:

pip install pip --upgrade

Setup the virtual env at the repo root path:

~/documentation$
python -m venv ./venv

Activate the virtual env:

~/documentation$
source ./venv/scripts/activate

Install the requirements:

~/documentation$
(cd docs ; pip install -r requirements.txt --upgrade)

Build the doc (output at docs/_build/html):

~/documentation$
(cd docs ; make html)

Adding content#

Add a new topic and pages (working directory: docs).

On index.rst, add a new topic:

.. toctree::
   :caption: My new topic
   :maxdepth: 2

    my_topic/index

Or add to an existing, for example, in eval/index.rst.

Tip

Don’t overthink the location at this point, it can be easily moved later.

Create a new folder and file matching the entry from last step:

~/documentation/docs$
mkdir my_topic; touch my_topic/index.rst

Edit my_topic/index.rst, adding a title and some content.

Build the doc and see the changes.

Commit the changes.

For a extensive guide on adding content see Creating new pages.

Pushing and triggering the CI#

The CI (.github/workflows/top-level.yml) builds the doc and pushes to the gihub-pages branch and is triggered on push to main and on pull request (every time):

  • On pull request, the build doc target is run, which builds the doc and stores it as an artifact.

  • On push to main, the build doc and deploy targets are run, the latter commits the doc artifact to the gh-pages branch.

Tip

You can see the runs at github.com/<your_user>/documentation/actions.

Enable GitHub Pages to have the public website configure GitHub Pages at github.com/<your_user>/documentation/settings/pages:

  • Set Source as “deploy from branch”

  • Set the branch as “gh-pages”

Resuming work at a later time#

Reactivate the virtual environment with:

~/documentation$
source ./venv/scripts/activate

Ensure the tools are up to data from time to time with:

~/documentation$
(cd docs ; pip install -r requirements.txt --upgrade)

Edit, build, commit, push as usual.

Understanding git lfs#

Since git lfs is not that common in the wild, it may be tricky to get the hang of it.

First of all, the basics: lfs replaces binaries files with pointers, and stores the binaries outside the git repository, in an external server.

When you do git clone/pull, by default lfs will also download the binaries at the “smudge” step. You can change this behaviour by setting globally git lfs install --skip-smudge or temporally with GIT_LFS_SKIP_SMUDGE=1 environment variable.

If during a clone or pull you obtain the error:

Encountered n file(s) that should have been pointers

That simply means that someone pushed files to remote that should have been pointers (defined in the .gitattributes file). And to fix is simple:

~$
git add --renomalize .
~$
git commit -m "Convert binary files to pointers"
~$
git push

And advise the committer to ensure he has git lfs enabled with git lfs install.