FreeBSD Manual Pages
Tutorial of GCLI - Generated Offline Version of https://her- gcli-tutorial(1) General Commands Manual gcli-tutorial(1) rhotzenplotz.de/gcli/tutorial Installing GCLI Through package manager If you're on FreeBSD you can just install gcli by running the following command: # pkg install gcli On NetBSD you can run: # pkgin install gcli On Ubuntu, Debian, Devuan and the like you can run: # apt install gcli On ArchLinux you can either use the AUR manually or use your favourite AUR helper: # yay -S gcli Compile the source code Other operating systems may currently require manual compilation and installation. Windows NT Notes It is entirely possible to build gcli on Windows using MSYS2 <https://msys2.org>. Please follow their instructions on how to set up a development environment. Generic build instructions For this purpose go to https://herrhotzenplotz.de/gcli/releases <https://herrhotzenplotz.de/gcli/releases> and choose the latest re- lease. Then download one of the tarballs. For version 1.1.0 this would be: <https://herrhotzenplotz.de/gcli/releases/gcli-1.1.0/gcli-1.1.0.tar.xz> Now that you have a link, you can download it, extract it, compile the code and install it: $ mkdir ~/build $ cd ~/build $ curl -4LO https://herrhotzenplotz.de/gcli/releases/gcli-1.1.0/gcli-1.1.0.tar.xz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 342k 100 342k 0 0 2739k 0 --:--:-- --:--:-- --:--:-- 2736k $ ls gcli-1.1.0.tar.xz $ Install the dependencies for building gcli: e.g. on Debian systems: # apt install libcurl4-openssl-dev pkgconf build-essential or on MSYS2: $ pacman -S libcurl-devel pkgconf Extract the tarball: $ tar xf gcli-1.1.0.tar.xz $ cd gcli-1.1.0 Configure, build and install gcli: $ ./configure ... $ make ... $ make install Check that the shell finds gcli: $ which gcli /usr/local/bin/gcli $ $ gcli version gcli 1.1.0 (amd64-unknown-freebsd13.2) Using libcurl/8.1.2 OpenSSL/1.1.1t zlib/1.2.13 libpsl/0.21.2 (+libidn2/2.3.4) libssh2/1.11.0 nghttp2/1.53.0 Using vendored pdjson library Report bugs at https://gitlab.com/herrhotzenplotz/gcli/. Copyright 2021, 2022, 2023 Nico Sonack <nsonack@herrhotzenplotz.de> and contributors. $ Advanced Windows Environment Setup In case you want to use the installed gcli from outside MSYS2 (e.g. in cmd.exe) you may wish to update the Path environment variable and add the C:\msys2\usr\bin directory to it. Make sure you have the library paths set up correctly. First steps Listing issues Let's start off by listing some issues - here for the curl project which is hosted on GitHub under curl/curl. To list issues for it one would run: $ gcli -t github issues -o curl -r curl You will see the list of the 30 most recent open issue tickets. The command above does the following: • invoke gcli • as a global option we switch it into GitHub-Mode • invoke the issues subcommand • operate on the repository owner curl (-o curl) • operate on the repository curl (-r curl) Note that the -t github option goes before the issues subcommand be- cause it is a global option for gcli that affects how all the following things like subcommands operate. However, now I also want to see closed issues: $ gcli -t github issues -o curl -r curl -a The -a option will disregard the status of the issue. Oh and the screen is a bit cluttered by all these tickets - let's only fetch the first 10 issues: $ gcli -t github issues -o curl -r curl -n10 Searching for issues Before reporting a bug or looking for solutions to a problem that you found in a program you may want to search for issues. Let's search for avast in curl/curl: $ gcli -t github issues -o curl -r curl -a avast NUMBER NOTES STATE TITLE 11383 9 open Issue with FileZilla server (GnuTLS) and close_notify 10551 7 closed Unable to use curl 7.87 for SSL connections on Windows 10 Pro 8848 2 closed CURL SSL certificate problem when AVAST HTTPS scanning enabled $ As you can see searching for something is just a matter of appending keywords to the issues subcommand. You can specify any amount of search terms - they will all be used in the query. Again, -a ignores the sta- tus of the issue such that we also see closed tickets. Examining issues As of now we only produced lists of issues. However, we may also want to look at the details of an issue such as: • the original post • labels • comments • assignees of the issue (that is someone who is working on the bug) Let's get a good summary of issue #11268 in the curl project: $ gcli -t github issues -o curl -r curl -i 11268 all As you can see most of the options are the same, however now we tell gcli with the -i 11268 option that we want to work with a single issue. Then we tell gcli what actions to perform on the issue. Another impor- tant action is comments. Guess what it does: $ gcli -t github issues -o curl -r curl -i 11268 comments I know a person that likes to post long verbose traces. Let's search for an issue authored by them on the OpenSSL GitHub page: $ gcli -t github issues -o openssl -r openssl -A blastwave -a NUMBER STATE TITLE 20379 open test "80-test_ssl_new.t" fails on Solaris 10 SPARCv9 10547 open Strict C90 CFLAGS results in sha.h:91 ISO C90 does not support long long 8048 closed OPENSSL_strnlen SIGSEGV in o_str.c line 76 $ The -A option lets you filter for specific authors. Let's look at the issue state of #10547: $ gcli -t github issues -o openssl -r openssl -i 10547 status NAME : 10547 TITLE : Strict C90 CFLAGS results in sha.h:91 ISO C90 does not support long long CREATED : 2019-12-01T04:35:23Z AUTHOR : blastwave STATE : open COMMENTS : 9 LOCKED : no LABELS : triaged: bug ASSIGNEES : none $ That's nine comments - let's read the original post and the comments in our favourite pager less: $ gcli -t github issues -o openssl -r openssl -i 10547 op comments | less As you can see gcli will accept multiple actions for an issue and exe- cutes them sequentially. How to find documentation When using gcli one may not always remember all the options and flags for every subcommand. gcli has lots of integrated help to guide you through its commands. Subcommand help You can list all available options for the issues subcommand by doing: $ gcli issues --help With your current knowledge you can also explore the gcli pulls subcom- mand. General usage Run the following command: $ gcli --help usage: gcli [options] subcommand OPTIONS: -a account Use the configured account instead of inferring it -r remote Infer account from the given git remote -t type Force the account type: - github (default: github.com) - gitlab (default: gitlab.com) - gitea (default: codeberg.org) -c Force colour and text formatting. -q Be quiet. (Not implemented yet) -v Be verbose. SUBCOMMANDS: ci Github CI status info comment Comment under issues and PRs config Configure forges forks Create, delete and list repository forks gists Create, fetch and list Github Gists issues Manage issues labels Manage issue and PR labels milestones Milestone handling pipelines Gitlab CI management pulls Create, view and manage PRs releases Manage releases of repositories repos Remote Repository management snippets Fetch and list Gitlab snippets status General user status and notifications api Fetch plain JSON info from an API (for debugging purposes) version Print version gcli 1.2.0 (amd64-unknown-freebsd13.2) Using libcurl/8.1.2 OpenSSL/1.1.1t zlib/1.2.13 libpsl/0.21.2 (+libidn2/2.3.4) libssh2/1.11.0 nghttp2/1.53.0 Using vendored pdjson library Report bugs at https://gitlab.com/herrhotzenplotz/gcli/. Copyright 2021, 2022, 2023 Nico Sonack <nsonack@herrhotzenplotz.de> and contributors. This gives you an overview over all the available subcommands. Each subcommand in turn allows you to get its usage by supplying the --help option to it. Manual pages Furthermore I recommend reading into the manual page gcli-issues(1) and gcli-pulls(1): $ man gcli-issues $ man gcli-pulls Setting up gcli for use with an account Creating issues on GitHub requires an account which we need to generate an authentication token for gcli. If you want to test this with a different forge than GitHub look at the tutorial for other forges <./08-Other-forges.html>. Log into your GitHub account and click on your account icon in the top right corner. Then choose the Settings option. Scroll down and choose Developer settings on the bottom of the left column. Under Personal ac- cess tokens choose Tokens (classic). Click on Generate new token (classic). Set a useful name such as gcli in the Note field, set the expiration to No expiration and allow the following Scopes: • repo • workflow • admin:public_key • gist Then create the token. It'll be printed in green. Do not share it! Now we need to tell gcli about this new token. To do this, create a configuration file for gcli - on Windows you need to do this from the MSYS2 Shell: $ mkdir -p ${HOME}/.config/gcli $ vi ${HOME}/.config/gcli/config Obviously, you can choose any other editor of your choice. Put the fol- lowing into this file: defaults { editor=vi github-default-account=my-github-account } my-github-account { token=<token-goes-here> account=<account-name> forge-type=github } Replace the <token-goes-here> with the previously generated token and the <account> with your account name. If you now run $ gcli -t github repos you should get a list of your repos. If not, check again that you did all the steps above correctly. Creating an issue Note: This assumes you have configured gcli with an account <./04-Account-Setup.html> for GitHub already. Preparation For this case I have a playground repository that you may as well use for testing with gcli. It is available at herrhotzenplotz/ghcli-play- ground. To see a list of issues, we can run: $ gcli -t github issues -o herrhotzenplotz -r ghcli-playground -a NUMBER NOTES STATE TITLE 13 0 open yet another issue 12 0 closed wat 11 0 closed blaaaaaaaaaaaaaaaaaaaah 10 0 closed "this is the quoted" issue title? anyone?" 9 0 closed test 8 0 closed foobar 7 0 closed foobar 5 0 closed test2 4 0 closed test $ Invoke gcli Let's create a bug report where we complain about things not working: $ gcli -t github issues create -o herrhotzenplotz -r ghcli-playground \ "Bug: Doesn't work on my machine" The message "Bug: doesn't work on my machine" is the title of the is- sue. Original Post You will see the default editor come up and instruct you to type in a message. This message is the "original post" or the body of the issue ticket that you're about to submit. You can use Markdown Syntax: I tried building this code on my machine but unfortunately it errors out with the following message: ```console $ make love make: don't know how to make love. Stop make: stopped in /tmp/wat $ ``` What am I doing wrong? ! ISSUE TITLE : Bug: Doesn't work on my machine ! Enter issue description above. ! All lines starting with '!' will be discarded. Submit the issue After you save and exit the editor gcli gives you a chance to check back and finally submit the issue. Type `y' and hit enter. You can check back if the issue was created and also view details about it as you learned earlier. Commenting Discussions on GitHub and the like are done through comments. You can comment on issues and pull requests. Reviewing a discussion Say you were looking at an issue in curl/curl: $ gcli issues -o curl -r curl -i 11461 comments Create the comment And now you wish to respond to this thread: $ gcli comment -o curl -r curl -i 11461 This will now open the editor and lets you type in your message. After saving and exiting gcli will ask you to confirm. Type `y' and hit en- ter: $ gcli -t github comment -o curl -r curl -i 11461 You will be commenting the following in curl/curl #11461: Is this okay? [yN] y $ Commenting on pull requests When you want to comment under a pull request use the -p flag instead of the -i flag to indicate the PR number. Creating a pull request Creating a pull request with gcli is usually as simple as running $ gcli pulls create Preparation Suppose you have a git repository forked and cloned: $ git clone git@github.com:contour-terminal/contour $ cd contour $ gcli forks create --into herrhotzenplotz Then you do some work on whatever feature you're planning to submit: $ git checkout -b my-amazing-feature <hackhackhack> $ git add -p $ git commit Push your changes You then push your changes to your fork: $ git push origin my-amazing-feature Create the pull request Now you can run the command to create the pull request: $ gcli pulls create From (owner:branch) [herrhotzenplotz:my-amazing-feature]: Owner [contour-terminal]: Repository [contour]: To Branch [master]: Title: Add new amazing feature Enable automerge? [yN]: Most of the defaults you should be able to simply accept. This assumes that you have the source branch checked out locally and remotes are configured appropriately. Otherwise you can just change the defaults by entering the correct val- ues. Enter original post After you entered all the meta data of the pull request gcli will drop you into your editor and lets you enter a message for the pull request. Submit After you saved and exit type y and hit enter to submit the pull re- quest. Other forges and bugtrackers gcli is capable of not only interacting with Github. It also currently supports: • GitLab • Gitea • Bugzilla Bugzilla Notes Bugzilla is commonly used as a bug tracker in various large open-source projects such as FreeBSD, the Linux Kernel, Mozilla and Gentoo. Searching Suppose you want to search for bug reports containing sparc in the Gen- too Bugzilla. In this case you need to configure an account that points at the cor- rect URL in $HOME/.config/gcli/config by adding: gentoo { forge-type=bugzilla api-base=https://bugs.gentoo.org/ } Now you can search the Gentoo Bugs: $ gcli -a gentoo issues sparc NUMBER NOTES STATE TITLE 924443 0 UNCONFIRMED Add keyword ~sparc for app-misc/fastfetch 924430 0 RESOLVED media-libs/assimp-5.3.1 fails tests on sparc 924215 0 CONFIRMED dev-libs/libbson dev-libs/mongo-c-driver: alpha arm ia64 mips ppc ppc64 s390 sparc keyword req 924191 0 CONFIRMED media-libs/exempi: unaligned access causes dev-python/python-xmp-toolkit-2.0.2 to fails tests on sparc (test_file_to_dict (test.test_core_unit.UtilsTestCase.test_file_to_dict) ... Bus error) 924180 0 CONFIRMED dev-python/psycopg-3.1.17[native-extensions] fails tests on sparc: tests/test_copy_async.py::test_read_rows[asyncio-names-1] Fatal Python error: Bus error 924031 0 IN_PROGRESS sys-apps/bfs: ~arm ~arm64 ~ppc ~ppc64 ~sparc keywording 923968 0 CONFIRMED dev-python/pyarrow-15.0.0 fails to configure on sparc: CMake Error at cmake_modules/SetupCxxFlags.cmake:42 (message): Unknown system processor 921245 0 CONFIRMED media-video/rav1e-0.6.6 fails to compile on sparc: Assertion `DT.dominates(RHead, LHead) && "No dominance between recurrences used by one SCEV?"' failed. 920956 0 CONFIRMED dev-python/pygame-2.5.2: pygame.tests.font_test SIGBUS on sparc 920737 0 CONFIRMED sparc64-solaris Prefix no longer supported <snip> Issue details Furthermore we can look at single issues: $ gcli -a gentoo issues -i 920737 all comments NUMBER : 920737 TITLE : sparc64-solaris Prefix no longer supported CREATED : 2023-12-26T19:20:58Z PRODUCT : Gentoo Linux COMPONENT : Profiles AUTHOR : Tom Williams STATE : CONFIRMED LABELS : none ASSIGNEES : prefix ORIGINAL POST Resurrecting a Prefix install on Solaris 11.4 SPARC. It was working rather well for me; after a hiatus I had hoped to use it again but my first emerge --sync has removed the profile needed to merge any updates or new packages. I note commit 8e006b67e06a19fae10c6059c7fc5ede88834601 in May 2023 removed the profile and keywording for prefixed installs. There is no associated comment. There doesn't seem to be a bug report in regards to the change (I'm quite sure almost nobody uses it, so probably fair enough) Any easy way to restore the profile for now? Eventually Solaris/SPARC and thus Prefix will be gone anyway, but useful for now. Thanks for your continued efforts. AUTHOR : sam DATE : 2023-12-26T19:21:33Z I think at the very least, when removing Prefix support in future, a 'deprecated' file should be added to the relevant profiles asking if anyone is using it to step forward. AUTHOR : grobian DATE : 2023-12-26T22:58:12Z Solaris 11.4 itself is a problem. I doubt you ever had it "working". AUTHOR : grobian DATE : 2023-12-26T22:59:57Z Linux sparc team is not relevant here $ GitLab Configuring an account for use with a token First you need to generate a token: 1. Click on your avatar in the top left corner 2. Choose Preferences in the popup menu 3. Select Access tokens in the preference menu 4. Click the Add new token button 5. Choose some reasonable values • The token name can be your hostname e.g. gcli $(hostname) • Clear the expiration date. It will be defaulted to some high value by GitLab. • Select the api scope Now click Create personal access token. Save this token - do not share it with anyone else. You can now update your gcli config in $HOME/.config/gcli/config: defaults { gitlab-default-account=gitlab-com ... } gitlab-com { account=<your-username-at-gitlab> token=<the-token-you-just-created> forge-type=gitlab } After that you should be able to run the following command: $ gcli -t gitlab issues -o herrhotzenplotz -r gcli If this process errors out check the above steps. If you believe this is a bug, please report it at our issue tracker! Gitea The steps here are roughly the same as with GitLab. To generate a token: 1. Click your avatar in the top-right corner 2. Choose Settings in the popup menu 3. Select Applications in the menu on the left 4. Under Generate new token enter a reasonable token name 5. Click the Generate token button 6. Save the token - do not share it with anyone else. You can now update your gcli config file in $HOME/.config/gcli/config: defaults { gitea-default-account=codeberg-org ... } codeberg-org { account=<your-username-at-gitea> token=<the-token-you-just-created> forge-type=gitea api-base=https://codeberg.org/api/v1 } The example here uses Codeberg. Update these fields as needed for your own use case. 04-Oct-2025 gcli-tutorial(1)
Installing GCLI | First steps | How to find documentation | Setting up gcli for use with an account | Creating an issue | Commenting | Creating a pull request | Other forges and bugtrackers
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=gcli-tutorial&sektion=1&manpath=FreeBSD+Ports+15.0>
