DOKK / manpages / debian 10 / devscripts / salsa.1.en
SALSA(1) SALSA(1)

salsa - tool to manipulate salsa repositories and group members

  # salsa <command> <args>
  salsa whoami
  salsa search_project devscripts
  salsa search_project qa/qa
  salsa search_group js-team
  salsa search_group perl-team/modules
  salsa search_user yadd
  salsa push_repo . --group js-team --kgb --irc devscripts --tagpending
  salsa update_repo node-mongodb --group js-team --disable-kgb --desc \
        --desc-pattern "Package %p"
  salsa update_repo js-team/node-mongodb --kgb --irc debian-js
  salsa update_safe --all --desc --desc-pattern "Debian package %p" \
        --group js-team
  salsa checkout node-mongodb --group js-team
  salsa checkout js-team/node-mongodb
  salsa add_user developer foobar --group-id 2665
  salsa update_user maintainer foobar --group js-team
  salsa del_user foobar --group js-team

salsa is a designed to create and configure repositories on <https://salsa.debian.org> and manage users of groups.

A Salsa token is required, except for search* commands, and must be set in command line (see below), or in your configuration file (~/.devscripts):

  SALSA_TOKEN=abcdefghi

or

  SALSA_TOKEN=`cat ~/.token`

or

  SALSA_TOKEN_FILE=~/.dpt.conf

If you choose to link another file using SALSA_TOKEN_FILE, it must contain a line with one of (no differences):

  <anything>SALSA_PRIVATE_TOKEN=xxxx
  <anything>SALSA_TOKEN=xxxx

This allows for example to use dpt(1) configuration file (~/.dpt.conf) which contains:

  DPT_SALSA_PRIVATE_TOKEN=abcdefghi

Add a user to a group.

  salsa --group js-group add_user guest foouser
  salsa --group-id 1234 add_user guest foouser
  salsa --group-id 1234 add_user maintainer 1245
    

First argument is the GitLab's access levels: guest, reporter, developer, maintainer, owner.

Remove a user from a group

  salsa --group js-team del_user foouser
  salsa --group-id=1234 del_user foouser
    
List sub groups of current one if group is set, groups of current user else.
Show group members.

  salsa --group js-team group
  salsa --group-id 1234 group
    
Search for a group using given string. Shows group id and other information.

  salsa search_group perl-team
  salsa search_group perl-team/modules
  salsa search_group 2666
    
Search for a user using given string. Shows user id and other information.

  salsa search_user yadd
    
Update user role in a group.

  salsa --group-id 1234 update_user guest foouser
  salsa --group js-team update_user maintainer 1245
    

First argument is the GitLab's access levels: guest, reporter, developer, maintainer, owner.

Gives information on the token owner

  salsa whoami
    

One of "--group", "--group-id", "--user" or "--user-id" is required to manage repositories. If both are set, salsa warns and only "--user"/"--user-id" is used. If none is given, salsa uses current user id (token owner).

Verify that repo(s) are well configured. It works exactly like update_repo except that it does not modify anything but just lists projects not well configured with found errors.

  salsa --user yadd --tagpending --kgb --irc=devscripts check_repo test
  salsa --group js-team check_repo --all
  salsa --group js-team --rename-head check_repo test1 test2 test3
    
Clone repo in current dir. If directory already exists, update local repo.

  salsa --user yadd co devscripts
  salsa --group js-team co node-mongodb
  salsa co js-team/node-mongodb
    

You can clone more than one repository or all repositories of a group or a user:

  salsa --user yadd co devscripts autodep8
  salsa co yadd/devscripts js-team/npm
  salsa --group js-team co --all           # All js-team repos
  salsa co --all                           # All your repos
    
Create public empty project. If "--group"/"--group-id" is set, project is created in group directory, else in user directory.

  salsa --user yadd create_repo test
  salsa --group js-team --kgb --irc-channel=devscripts create_repo test
    
Delete a repository.
Forks a project in group/user repository and set "upstream" to original project. Example:

  $ salsa fork js-team/node-mongodb --verbose
  ...
  salsa.pl info: node-mongodb ready in node-mongodb/
  $ cd node-mongodb
  $ git remote --verbose show
  origin          git@salsa.debian.org:me/node-mongodb (fetch)
  origin          git@salsa.debian.org:me/node-mongodb (push)
  upstream        git@salsa.debian.org:js-team/node-mongodb (fetch)
  upstream        git@salsa.debian.org:js-team/node-mongodb (push)
    

For a group:

  salsa fork --group js-team user/node-foo
    
List forks of project(s).

  salsa forks qa/qa debian/devscripts
    

Project can be set using full path or using --group/--group-id or --user/--user-id, else it is searched in current user namespace.

Shows projects owned by user or group. If second argument exists, search only matching projects

  salsa --group js-team list_repos
  salsa --user yadd list_repos foo*
    
Creates a merge request.

Suppose you created a fork using salsa fork, modify some things in a new branch using one commit and want to propose it to original project (branch "master"). You just have to launch this in source directory:

  salsa mr
    

Other example:

  salsa mr --mr-dst-project debian/foo --mr-dst-branch debian/master
    

or simply

  salsa mr debian/foo debian/master
    

Note that unless destination project has been set using command line, salsa merge_request will search it in the following order:

To force salsa to use source project as destination project, you can use "same":

  salsa mr --mr-dst-project same
  # or
  salsa mr same

New merge request will be created using last commit title and description.

See --mr-* options for more.

List opened merge requests for project(s)

  salsa mrs qa/qa debian/devscripts
    

Project can be set using full path or using --group/--group-id or --user/--user-id, else it is searched in current user namespace.

Protect/unprotect a branch.
  #                                    project      branch merge push
  salsa --group js-team protect_branch node-mongodb master m     d
    

"merge" and "push" can be one of:

  salsa --group js-team protect_branch node-mongodb master no
    
List protected branches

  salsa --group js-team protected_branches node-mongodb
    
Create a new project from a local Debian source directory configured with git.

push_repo executes the following steps:

Examples:

  salsa --user yadd push_repo ./test
  salsa --group js-team --kgb --irc-channel=devscripts push_repo .
Rename branch given in --source-branch with name given in --dest-branch. You can use --no-fail and --all options here.
Search for a project using given string. Shows name, owner id and other information.

  salsa search devscripts
  salsa search debian/devscripts
  salsa search 18475
    
Configure repo(s) using parameters given to command line. A repo name has to be given unless --all is set. Prefer to use update_safe.

  salsa --user yadd --tagpending --kgb --irc=devscripts update_repo test
  salsa --group js-team update_repo --all
  salsa --group js-team --rename-head update_repo test1 test2 test3
  salsa update_repo js-team/node-mongodb --kgb --irc debian-js
    

By default when using --all, salsa will fail on first error. If you want to continue, set --no-fail. In this case, salsa will display a warning for each project that has fail but continue with next project. Then to see full errors, set --verbose.

Launch check_repo and ask before launching update_repo (unless --yes).

  salsa --user yadd --tagpending --kgb --irc=devscripts update_safe test
  salsa --group js-team update_safe --all
  salsa --group js-team --rename-head update_safe test1 test2 test3
  salsa update_safe js-team/node-mongodb --kgb --irc debian-js
    

Empty local cache.

Change directory before launching command

  salsa -C ~/debian co debian/libapache2-mod-fcgid
    
File to store cached values. Default to ~/.cache/salsa.json. An empty value disables cache.

".devscripts" value: SALSA_CACHE_FILE

Disable cache usage. Same as --cache-file ''
Add or replace default configuration files ("/etc/devscripts.conf" and "~/.devscripts"). This can only be used as the first option given on the command-line.
  salsa --conf-file test.conf <command>...
  salsa --conf-file test.conf --conf-file test2.conf  <command>...
    
  salsa --conf-file +test.conf <command>...
  salsa --conf-file +test.conf --conf-file +test2.conf  <command>...
    

If one --conf-file has no "+", default configuration files are ignored.

Don't read any configuration files. This can only be used as the first option given on the command-line.
Enable debugging output
Team to use. Use "salsa search_group name" to find it.

If you want to use a subgroup, you have to set its full path:

  salsa --group perl-team/modules/packages check_repo lemonldap-ng
    

".devscripts" value: SALSA_GROUP

Be careful when you use SALSA_GROUP in your ".devscripts" file. Every salsa command will be executed in group space, for example if you want to propose a little change in a project using salsa fork + salsa mr, this "fork" will be done in group space unless you set a --user/--user-id. Prefer to use an alias in your ".bashrc" file. Example:

  alias jsteam_admin="salsa --group js-team"
    

or

  alias jsteam_admin="salsa --conf-file ~/.js.conf
    

then you can fix SALSA_GROUP in "~/.js.conf"

Group id to use. Use "salsa search_group name" to find it.

".devscripts" value: SALSA_GROUP_ID

Be careful when you use SALSA_GROUP_ID in your ".devscripts" file. Every salsa command will be executed in group space, for example if you want to propose a little change in a project using salsa fork + salsa mr, this "fork" will be done in group space unless you set a --user/--user-id. Prefer to use an alias in your ".bashrc" file. Example:

  alias jsteam_admin="salsa --group-id 2666"
    

or

  alias jsteam_admin="salsa --conf-file ~/.js.conf
    

then you can fix SALSA_GROUP_ID in "~/.js.conf"

Prompt before sensible changes.

".devscripts" value: SALSA_INFO (yes/no)

Repo path. Default to group or user path.

".devscripts" value: SALSA_REPO_PATH

Token value (see above).
File to find token (see above).
Username to use. If neither --group, --group-id, --user or --user-id is set, salsa uses current user id (corresponding to salsa private token).
User id to use. Use "salsa search_user name" to find one. If neither --group, --group-id, --user or --user-id is set, salsa uses current user id (corresponding to salsa private token).

".devscripts" value: SALSA_USER_ID

Enable verbose output.
Never ask for consent.

".devscripts" value: SALSA_YES (yes/no)

When set, all project of group/user are affected by command.
  salsa update_repo --tagpending --all --skip qa --skip devscripts
    

".devscripts" value: SALSA_SKIP. To set multiples values, use spaces. Example

  SALSA_SKIP=qa devscripts
    
  salsa update_repo --tagpending --all --skip-file ~/.skip
    

".devscripts" value: SALSA_SKIP_FILE

Configure configuration file path of GitLab CI. Default: empty. Example:

  salsa update_safe --ci-config-path debian/.gitlab-ci.yml debian/devscripts
    

".devscripts" value: SALSA_CI_CONFIG_PATH

Configure repo description using pattern given in desc-pattern

".devscripts" value: SALSA_DESC (yes/no)

Repo description pattern. Default to "Debian package %p". "%p" is replaced by repo name, while "%P" is replaced by repo name given in command (may contains full path).

".devscripts" value: SALSA_DESC_PATTERN

Enable, ignore or disable email-on-push.

".devscripts" value: SALSA_EMAIL (yes/ignore/no, default: ignore)

Email-on-push recipient. Can be multi valued:

  $ salsa update_safe myrepo \
        --email-recipient foo@foobar.org \
        --email-recipient bar@foobar.org
    

If recipient value contains "%p", it is replaced by project name.

".devscripts" value: SALSA_EMAIL_RECIPIENTS (use spaces to separate multiples recipients)

Enable, ignore or disable issues.

".devscripts" values: SALSA_ENABLE_ISSUES (yes/ignore/no, default: ignore)

Enable, ignore or disable merge requests.

".devscripts" values: SALSA_ENABLE_MR (yes/ignore/no, default: ignore)

IRC channel for KGB or Irker. Can be used more than one time only with --irker.

Important: channel must not include the first "#". If salsa finds a channel starting with "#", it will consider that the channel starts with 2 "#"!

".devscript" value: SALSA_IRC_CHANNEL.

Multiple values must be space separated.

Since configuration files are read using sh, be careful when using "#": you must enclose the channel with quotes, else sh will consider it as a comment and will ignore this value.

Enable, ignore or disable Irker service

".devscripts" values: SALSA_IRKER (yes/ignore/no, default: ignore)

Irker host. Default: ruprecht.snow-crash.org

".devscripts" value: SALSA_IRKER_HOST

Irker port. Default: empty (default value)

".devscripts" value: SALSA_IRKER_PORT

Enable, ignore or disable KGB webhook.

".devscripts" value: SALSA_KGB (yes/ignore/no, default: ignore)

List of KGB enabled options (comma separated). Default: issues_events, merge_requests_events, note_events, pipeline_events, push_events, tag_push_events, wiki_page_events

  $ salsa update_safe debian/devscripts --kgb --irc-channel devscripts \
    --kgb-options 'merge_requests_events,issues_events,enable_ssl_verification'
    

List of available options: confidential_comments_events, confidential_issues_events, confidential_note_events, enable_ssl_verification, issues_events, job_events, merge_requests_events, note_events, pipeline_events, tag_push_events, wiki_page_events

".devscripts" value: SALSA_KGB_OPTIONS

Don't stop on error when using update_repo with --all.

".devscripts" value: SALSA_NO_FAIL (yes/no)

Rename HEAD branch given by --source-branch into --dest-branch and change "default branch" of project. Works only with update_repo.

".devscripts" value: SALSA_RENAME_HEAD (yes/no)

".devscripts" value: SALSA_SOURCE_BRANCH
".devscripts" value: SALSA_DEST_BRANCH
Enable, ignore or disable "tagpending" webhook.

".devscripts" value: SALSA_TAGPENDING (yes/ignore/no, default: ignore)

Title for merge request. Default: last commit title.
Description of new MR. Default:
Destination branch. Default to "master".
Destination project. Default: project from which the current project was forked; or, if not found, "upstream" value found using git remote --verbose show; or using source project.

If --mr-dst-project is set to same, salsa will use source project as destination.

Source branch. Default: current branch.
Source project. Default: current project found using git remote --verbose show.
Allow upstream project to squash your commits, this is the default.

".devscripts" value: SALSA_MR_ALLOW_SQUASH (yes/no)

Remove source branch if merge request is accepted. Default: no.

".devscripts" value: SALSA_MR_REMOVE_SOURCE_BRANCH (yes/no)

GitLab API. Default: <https://salsa.debian.org/api/v4>.

".devscripts" value: SALSA_API_URL

Default to "git@salsa.debian.org:"

".devscripts" value: SALSA_GIT_SERVER_URL

Default to "ircs://irc.oftc.net:6697/"

".devscripts" value: SALSA_IRKER_SERVER_URL

Default to <http://kgb.debian.net:9418/webhook/?channel=>

".devscripts" value: SALSA_KGB_SERVER_URL

Default to <https://webhook.salsa.debian.org/tagpending/>

".devscripts" value: SALSA_TAGPENDING_SERVER_URL

Configuration file example

Example to use salsa with <https://gitlab.ow2.org> (group "lemonldap-ng"):

  SALSA_TOKEN=`cat ~/.ow2-gitlab-token`
  SALSA_API_URL=https://gitlab.ow2.org/api/v4
  SALSA_GIT_SERVER_URL=git@gitlab.ow2.org:
  SALSA_GROUP_ID=34

Then to use it, add something like this in your ".bashrc" file:

  alias llng_admin='salsa --conffile ~/.salsa-ow2.conf'

dpt-salsa

Xavier Guimard <yadd@debian.org>

Copyright (C) 2018, Xavier Guimard <yadd@debian.org>

It contains code formerly found in dpt-salsa (pkg-perl-tools) copyright 2018, gregor herrmann <gregoa@debian.org>.

This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.

2019-08-04 Debian Utilities