.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SALSA 1" .TH SALSA 1 "2023-12-12" "Debian Utilities" " " .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" salsa \- tool to manipulate salsa projects, repositories and group members .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 10 \& # salsa \& salsa add_user developer foobar \-\-group\-id 2665 \& salsa delete_user foobar \-\-group js\-team \& salsa search_groups perl\-team/modules \& salsa search_projects qa/qa \& salsa search_users yadd \& salsa update_user maintainer foobar \-\-group js\-team \& salsa whoami \& salsa checkout node\-mongodb \-\-group js\-team \& salsa fork salsa fork \-\-group js\-team user/node\-foo \& salsa last_ci_status js\-team/nodejs \& salsa pipelines js\-team/nodejs \& salsa mr debian/foo debian/master \& salsa push_repo . \-\-group js\-team \-\-kgb \-\-irc devscripts \-\-tagpending \& salsa update_projects node\-mongodb \-\-group js\-team \-\-disable\-kgb \-\-desc \e \& \-\-desc\-pattern "Package %p" \& salsa update_safe \-\-all \-\-desc \-\-desc\-pattern "Debian package %p" \e \& \-\-group js\-team .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBsalsa\fR is designed to create and configure projects and repositories on as well as to manage group members. .PP A Salsa token is required, except for search* commands, and must be set in command line \fI(see below)\fR, or in your configuration file \fI(~/.devscripts)\fR: .PP .Vb 1 \& SALSA_TOKEN=abcdefghi .Ve .PP or .PP .Vb 1 \& SALSA_TOKEN=\`cat ~/.token\` .Ve .PP or .PP .Vb 1 \& SALSA_TOKEN_FILE=~/.dpt.conf .Ve .PP If you choose to link another file using \s-1SALSA_TOKEN_FILE,\s0 it must contain a line with one of (no differences): .PP .Vb 2 \& SALSA_PRIVATE_TOKEN=xxxx \& SALSA_TOKEN=xxxx .Ve .PP This allows for example to use \fBdpt\fR\|(1) configuration file (~/.dpt.conf) which contains: .PP .Vb 1 \& DPT_SALSA_PRIVATE_TOKEN=abcdefghi .Ve .SH "COMMANDS" .IX Header "COMMANDS" .SS "Managing users and groups" .IX Subsection "Managing users and groups" .IP "\fBadd_user\fR" 4 .IX Item "add_user" Add a user to a group. .Sp .Vb 3 \& salsa \-\-group js\-group add_user guest foouser \& salsa \-\-group\-id 1234 add_user guest foouser \& salsa \-\-group\-id 1234 add_user maintainer 1245 .Ve .Sp First argument is the GitLab's access levels: guest, reporter, developer, maintainer, owner. .IP "\fBdelete_user\fR or \fBdel_user\fR" 4 .IX Item "delete_user or del_user" Remove a user from a group. .Sp .Vb 2 \& salsa \-\-group js\-team delete_user foouser \& salsa \-\-group\-id=1234 delete_user foouser .Ve .IP "\fBjoin\fR" 4 .IX Item "join" Request access to a group. .Sp .Vb 3 \& salsa join js\-team \& salsa join \-\-group js\-team \& salsa join \-\-group\-id 1234 .Ve .IP "\fBlist_groups\fR" 4 .IX Item "list_groups" List the subgroups for current group if group is set, otherwise will do the current user. .IP "\fBlist_users\fR or \fBgroup\fR" 4 .IX Item "list_users or group" List users in a subgroup. Note, this does not include inherited or invited. .Sp .Vb 2 \& salsa \-\-group js\-team list_users \& salsa \-\-group\-id 1234 list_users .Ve .IP "\fBsearch_groups\fR" 4 .IX Item "search_groups" Search for a group using given string. Shows group \s-1ID\s0 and other information. .Sp .Vb 3 \& salsa search_groups perl\-team \& salsa search_groups perl\-team/modules \& salsa search_groups 2666 .Ve .IP "\fBsearch_users\fR" 4 .IX Item "search_users" Search for a user using given string. Shows user \s-1ID\s0 and other information. .Sp .Vb 1 \& salsa search_users yadd .Ve .IP "\fBupdate_user\fR" 4 .IX Item "update_user" Update a user's role in a group. .Sp .Vb 2 \& salsa \-\-group\-id 1234 update_user guest foouser \& salsa \-\-group js\-team update_user maintainer 1245 .Ve .Sp First argument is the GitLab's access levels: guest, reporter, developer, maintainer, owner. .IP "\fBwhoami\fR" 4 .IX Item "whoami" Gives information on the token owner. .Sp .Vb 1 \& salsa whoami .Ve .SS "Managing projects" .IX Subsection "Managing projects" One of \f(CW\*(C`\-\-group\*(C'\fR, \f(CW\*(C`\-\-group\-id\*(C'\fR, \f(CW\*(C`\-\-user\*(C'\fR or \f(CW\*(C`\-\-user\-id\*(C'\fR is required to manage projects. If both are set, salsa warns and only \&\f(CW\*(C`\-\-user\*(C'\fR/\f(CW\*(C`\-\-user\-id\*(C'\fR is used. If none is given, salsa uses current user \s-1ID\s0 \&\fI(token owner)\fR. .IP "\fBcheck_projects\fR or \fBcheck_repo\fR" 4 .IX Item "check_projects or check_repo" Verify that projects are configured as expected. It works exactly like \fBupdate_projects\fR except that it does not modify anything but just lists projects not well configured with found errors. .Sp .Vb 3 \& salsa \-\-user yadd \-\-tagpending \-\-kgb \-\-irc=devscripts check_projects test \& salsa \-\-group js\-team check_projects \-\-all \& salsa \-\-group js\-team \-\-rename\-head check_projects test1 test2 test3 .Ve .IP "\fBcheckout\fR or \fBco\fR" 4 .IX Item "checkout or co" Clone a project's repository in current directory. If the directory already exists, update local repository. .Sp .Vb 3 \& salsa \-\-user yadd checkout devscripts \& salsa \-\-group js\-team checkout node\-mongodb \& salsa checkout js\-team/node\-mongodb .Ve .Sp You can clone more than one repository or all repositories of a group or a user: .Sp .Vb 4 \& salsa \-\-user yadd checkout devscripts autodep8 \& salsa checkout yadd/devscripts js\-team/npm \& salsa \-\-group js\-team checkout \-\-all # All js\-team active repositories \& salsa checkout \-\-all\-archived # All your repositories, including archived .Ve .IP "\fBcreate_project\fR or \fBcreate_repo\fR" 4 .IX Item "create_project or create_repo" Create public empty project. If \f(CW\*(C`\-\-group\*(C'\fR/\f(CW\*(C`\-\-group\-id\*(C'\fR is set, project is created in group directory, else in user directory. .Sp .Vb 2 \& salsa \-\-user yadd create_project test \& salsa \-\-group js\-team \-\-kgb \-\-irc\-channel=devscripts create_project test .Ve .IP "\fBdelete_project\fR or \fBdel_repo\fR" 4 .IX Item "delete_project or del_repo" Delete a project. .IP "\fBfork\fR" 4 .IX Item "fork" Forks a project in group/user repository and set \*(L"upstream\*(R" to original project. Example: .Sp .Vb 9 \& $ 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) .Ve .Sp For a group: .Sp .Vb 1 \& salsa fork \-\-group js\-team user/node\-foo .Ve .IP "\fBforks\fR" 4 .IX Item "forks" List forks of project(s). .Sp .Vb 1 \& salsa forks qa/qa debian/devscripts .Ve .Sp Project can be set using full path or using \fB\-\-group\fR/\fB\-\-group\-id\fR or \&\fB\-\-user\fR/\fB\-\-user\-id\fR, else it is searched in current user namespace. .IP "\fBpush\fR" 4 .IX Item "push" Push relevant packaging refs to origin Git remote. To be run from packaging working directory. .Sp .Vb 1 \& salsa push .Ve .Sp It pushes the following refs to the configured remote for the debian-branch or, falling back, to the \*(L"origin\*(R" remote: .RS 4 .ie n .IP """master"" branch (or whatever is set to debian-branch in gbp.conf)" 4 .el .IP "``master'' branch (or whatever is set to debian-branch in gbp.conf)" 4 .IX Item "master branch (or whatever is set to debian-branch in gbp.conf)" .PD 0 .ie n .IP """upstream"" branch (or whatever is set to upstream-branch in gbp.conf)" 4 .el .IP "``upstream'' branch (or whatever is set to upstream-branch in gbp.conf)" 4 .IX Item "upstream branch (or whatever is set to upstream-branch in gbp.conf)" .ie n .IP """pristine-tar"" branch" 4 .el .IP "``pristine-tar'' branch" 4 .IX Item "pristine-tar branch" .ie n .IP "tags named ""debian/*"" (or whatever is set to debian-tag in gbp.conf)" 4 .el .IP "tags named ``debian/*'' (or whatever is set to debian-tag in gbp.conf)" 4 .IX Item "tags named debian/* (or whatever is set to debian-tag in gbp.conf)" .ie n .IP "tags named ""upstream/*"" (or whatever is set to upstream-tag in gbp.conf)" 4 .el .IP "tags named ``upstream/*'' (or whatever is set to upstream-tag in gbp.conf)" 4 .IX Item "tags named upstream/* (or whatever is set to upstream-tag in gbp.conf)" .ie n .IP "all tags, if the package's source format is ""3.0 (native)""" 4 .el .IP "all tags, if the package's source format is ``3.0 (native)''" 4 .IX Item "all tags, if the package's source format is 3.0 (native)" .RE .RS 4 .RE .IP "\fBlist_projects\fR or \fBlist_repos\fR or \fBls\fR" 4 .IX Item "list_projects or list_repos or ls" .PD Shows projects owned by user or group. If second argument exists, search only matching projects. .Sp .Vb 2 \& salsa \-\-group js\-team list_projects \& salsa \-\-user yadd list_projects foo* .Ve .IP "\fBlast_ci_status\fR" 4 .IX Item "last_ci_status" Displays the last continuous integration result. Use \fB\-\-verbose\fR to see \&\s-1URL\s0 of pipeline when result isn't \fBsuccess\fR. Unless \fB\-\-no\-fail\fR is set, \&\fBsalsa last_ci_status\fR will stop on first \*(L"failed\*(R" status. .Sp .Vb 3 \& salsa \-\-group js\-team last_ci_status \-\-all \-\-no\-fail \& salsa \-\-user yadd last_ci_status foo \& salsa last_ci_status js\-team/nodejs .Ve .Sp This commands returns the number of \*(L"failed\*(R" status found. \*(L"success\*(R" entries are displayed using \s-1STDOUT\s0 while other are displayed \fI(with details)\fR using \&\s-1STDERR.\s0 Then you can easily see only failures using: .Sp .Vb 1 \& salsa \-\-group js\-team last_ci_status \-\-all \-\-no\-fail >/dev/null .Ve .IP "\fBpipeline_schedule\fR or \fBschedule\fR" 4 .IX Item "pipeline_schedule or schedule" Control pipeline schedule. .IP "\fBpipeline_schedules\fR or \fBschedules\fR" 4 .IX Item "pipeline_schedules or schedules" Lists current pipeline schedule items. .Sp You can use \fB\-\-no\-fail\fR and \fB\-\-all\fR options here. .IP "\fBmerge_request\fR or \fBmr\fR" 4 .IX Item "merge_request or mr" Creates a merge request. .Sp Suppose you created a fork using \fBsalsa fork\fR, modify some things in a new branch using one commit and want to propose it to original project \&\fI(branch \*(L"master\*(R")\fR. You just have to launch this in source directory: .Sp .Vb 1 \& salsa merge_request .Ve .Sp Another example: .Sp .Vb 1 \& salsa merge_request \-\-mr\-dst\-project debian/foo \-\-mr\-dst\-branch debian/master .Ve .Sp Or simply: .Sp .Vb 1 \& salsa merge_request debian/foo debian/master .Ve .Sp Note that unless destination project has been set using command line, \&\fBsalsa merge_request\fR will search it in the following order: .RS 4 .IP "using GitLab \s-1API:\s0 salsa will detect from where this project was forked" 4 .IX Item "using GitLab API: salsa will detect from where this project was forked" .PD 0 .ie n .IP "using ""upstream"" origin" 4 .el .IP "using ``upstream'' origin" 4 .IX Item "using upstream origin" .IP "else salsa will use source project as destination project" 4 .IX Item "else salsa will use source project as destination project" .RE .RS 4 .PD .Sp To force salsa to use source project as destination project, you can use \&\*(L"same\*(R": .Sp .Vb 3 \& salsa merge_request \-\-mr\-dst\-project same \& # or \& salsa merge_request same .Ve .Sp New merge request will be created using last commit title and description. .Sp See \fB\-\-mr\-*\fR options for more. .RE .IP "\fBmerge_requests\fR or \fBmrs\fR" 4 .IX Item "merge_requests or mrs" List opened merge requests for project(s). .Sp .Vb 1 \& salsa merge_requests qa/qa debian/devscripts .Ve .Sp Project can be set using full path or using \fB\-\-group\fR/\fB\-\-group\-id\fR or \&\fB\-\-user\fR/\fB\-\-user\-id\fR, else it is searched in current user namespace. .IP "\fBprotect_branch\fR" 4 .IX Item "protect_branch" Protect/unprotect a branch. .RS 4 .IP "Protect" 4 .IX Item "Protect" .Vb 2 \& # project branch merge push \& salsa \-\-group js\-team protect_branch node\-mongodb master m d .Ve .Sp \&\*(L"merge\*(R" and \*(L"push\*(R" can be one of: .RS 4 .IP "\fBo\fR, \fBowner\fR: owner only" 4 .IX Item "o, owner: owner only" .PD 0 .IP "\fBm\fR, \fBmaintainer\fR: \fBo\fR + maintainers allowed" 4 .IX Item "m, maintainer: o + maintainers allowed" .IP "\fBd\fR, \fBdeveloper\fR: \fBm\fR + developers allowed" 4 .IX Item "d, developer: m + developers allowed" .IP "\fBr\fR, \fBreporter\fR: \fBd\fR + reporters allowed" 4 .IX Item "r, reporter: d + reporters allowed" .IP "\fBg\fR, \fBguest\fR: \fBr\fR + guest allowed" 4 .IX Item "g, guest: r + guest allowed" .RE .RS 4 .RE .IP "Unprotect" 4 .IX Item "Unprotect" .PD .Vb 1 \& salsa \-\-group js\-team protect_branch node\-mongodb master no .Ve .RE .RS 4 .RE .IP "\fBprotected_branches\fR" 4 .IX Item "protected_branches" List protected branches: .Sp .Vb 1 \& salsa \-\-group js\-team protected_branches node\-mongodb .Ve .IP "\fBpush_repo\fR" 4 .IX Item "push_repo" Create a new project from a local Debian source directory configured with git. .Sp \&\fBpush_repo\fR executes the following steps: .RS 4 .IP "gets project name using debian/changelog file;" 4 .IX Item "gets project name using debian/changelog file;" .PD 0 .IP "launches \fBgit remote add upstream ...\fR;" 4 .IX Item "launches git remote add upstream ...;" .IP "launches \fBcreate_project\fR;" 4 .IX Item "launches create_project;" .IP "pushes local repository." 4 .IX Item "pushes local repository." .RE .RS 4 .PD .Sp Examples: .Sp .Vb 2 \& salsa \-\-user yadd push_repo ./test \& salsa \-\-group js\-team \-\-kgb \-\-irc\-channel=devscripts push_repo . .Ve .RE .IP "\fBrename_branch\fR" 4 .IX Item "rename_branch" Rename branch given in \fB\-\-source\-branch\fR with name given in \fB\-\-dest\-branch\fR. You can use \fB\-\-no\-fail\fR, \fB\-\-all\fR and \fB\-\-all\-archived\fR options here. .IP "\fBsearch_projects\fR or \fBsearch_repo\fR or \fBsearch\fR" 4 .IX Item "search_projects or search_repo or search" Search for a project using given string. Shows name, owner \s-1ID\s0 and other information. .Sp .Vb 3 \& salsa search_projects devscripts \& salsa search_projects debian/devscripts \& salsa search_projects 18475 .Ve .IP "\fBupdate_projects\fR or \fBupdate_repo\fR" 4 .IX Item "update_projects or update_repo" Configure projects using parameters given to command line. A project name has to be given unless \fB\-\-all\fR or \fB\-\-all\-archived\fR is set. Prefer to use \&\fBupdate_safe\fR. .Sp .Vb 4 \& salsa \-\-user yadd \-\-tagpending \-\-kgb \-\-irc=devscripts update_projects test \& salsa \-\-group js\-team update_projects \-\-all \& salsa \-\-group js\-team \-\-rename\-head update_projects test1 test2 test3 \& salsa update_projects js\-team/node\-mongodb \-\-kgb \-\-irc debian\-js .Ve .Sp By default when using \fB\-\-all\fR, salsa will fail on first error. If you want to continue, set \fB\-\-no\-fail\fR. 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 \fB\-\-verbose\fR. .IP "\fBupdate_safe\fR" 4 .IX Item "update_safe" Launch \fBcheck_projects\fR and ask before launching \fBupdate_projects\fR (unless \fB\-\-yes\fR). .Sp .Vb 4 \& 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 .Ve .SS "Other" .IX Subsection "Other" .IP "\fBpurge_cache\fR" 4 .IX Item "purge_cache" Empty local cache. .SH "OPTIONS" .IX Header "OPTIONS" .SS "General options" .IX Subsection "General options" .IP "\fB\-\-chdir\fR or \fB\-C\fR" 4 .IX Item "--chdir or -C" Change directory before launching command: .Sp .Vb 1 \& salsa \-\-chdir ~/debian checkout debian/libapache2\-mod\-fcgid .Ve .IP "\fB\-\-cache\-file\fR" 4 .IX Item "--cache-file" File to store cached values. An empty value disables cache. Default: \f(CW\*(C`~/.cache/salsa.json\*(C'\fR. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_CACHE_FILE\s0\fR .IP "\fB\-\-no\-cache\fR" 4 .IX Item "--no-cache" Disable cache usage. Same as \fB\-\-cache\-file ''\fR .IP "\fB\-\-conf\-file\fR or \fB\-\-conffile\fR" 4 .IX Item "--conf-file or --conffile" Add or replace default configuration files. This can only be used as the first option given on the command-line. Default: \f(CW\*(C`/etc/devscripts.conf\*(C'\fR and \f(CW\*(C`~/.devscripts\*(C'\fR. .RS 4 .IP "replace:" 4 .IX Item "replace:" .Vb 2 \& salsa \-\-conf\-file test.conf ... \& salsa \-\-conf\-file test.conf \-\-conf\-file test2.conf ... .Ve .IP "add:" 4 .IX Item "add:" .Vb 2 \& salsa \-\-conf\-file +test.conf ... \& salsa \-\-conf\-file +test.conf \-\-conf\-file +test2.conf ... .Ve .Sp If one \fB\-\-conf\-file\fR has no \f(CW\*(C`+\*(C'\fR, default configuration files are ignored. .RE .RS 4 .RE .IP "\fB\-\-no\-conf\fR or \fB\-\-noconf\fR" 4 .IX Item "--no-conf or --noconf" Don't read any configuration files. This can only be used as the first option given on the command-line. .IP "\fB\-\-debug\fR" 4 .IX Item "--debug" Enable debugging output. .IP "\fB\-\-group\fR" 4 .IX Item "--group" Team to use. Use \f(CW\*(C`salsa search_groups name\*(C'\fR to find it. .Sp If you want to use a subgroup, you have to set its full path: .Sp .Vb 1 \& salsa \-\-group perl\-team/modules/packages check_projects lemonldap\-ng .Ve .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_GROUP\s0\fR .Sp Be careful when you use \fB\s-1SALSA_GROUP\s0\fR in your \f(CW\*(C`.devscripts\*(C'\fR file. Every \&\fBsalsa\fR command will be executed in group space, for example if you want to propose a little change in a project using \fBsalsa fork\fR + \fBsalsa merge_request\fR, this \&\*(L"fork\*(R" will be done in group space unless you set a \fB\-\-user\fR/\fB\-\-user\-id\fR. Prefer to use an alias in your \f(CW\*(C`.bashrc\*(C'\fR file. Example: .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-group js\-team" .Ve .Sp or .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-conf\-file ~/.js.conf .Ve .Sp or to use both .devscripts and .js.conf: .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-conf\-file +~/.js.conf .Ve .Sp then you can fix \fB\s-1SALSA_GROUP\s0\fR in \f(CW\*(C`~/.js.conf\*(C'\fR .Sp To enable bash completion for your alias, add this in your .bashrc file: .Sp .Vb 2 \& _completion_loader salsa \& complete \-F _salsa_completion jsteam_admin .Ve .IP "\fB\-\-group\-id\fR" 4 .IX Item "--group-id" Group \s-1ID\s0 to use. Use \f(CW\*(C`salsa search_groups name\*(C'\fR to find it. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_GROUP_ID\s0\fR .Sp Be careful when you use \fB\s-1SALSA_GROUP_ID\s0\fR in your \f(CW\*(C`.devscripts\*(C'\fR file. Every \&\fBsalsa\fR command will be executed in group space, for example if you want to propose a little change in a project using \fBsalsa fork\fR + \fBsalsa merge_request\fR, this \&\*(L"fork\*(R" will be done in group space unless you set a \fB\-\-user\fR/\fB\-\-user\-id\fR. Prefer to use an alias in your \f(CW\*(C`.bashrc\*(C'\fR file. Example: .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-group\-id 2666" .Ve .Sp or .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-conf\-file ~/.js.conf .Ve .Sp then you can fix \fB\s-1SALSA_GROUP_ID\s0\fR in \f(CW\*(C`~/.js.conf\*(C'\fR. .IP "\fB\-\-help\fR" 4 .IX Item "--help" Displays this manpage. .IP "\fB\-\-info\fR or \fB\-i\fR" 4 .IX Item "--info or -i" Prompt before sensible changes. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_INFO\s0\fR (yes/no) .IP "\fB\-\-path\fR" 4 .IX Item "--path" Repository path. Default to group or user path. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_REPO_PATH\s0\fR .IP "\fB\-\-token\fR" 4 .IX Item "--token" Token value (see above). .IP "\fB\-\-token\-file\fR" 4 .IX Item "--token-file" File to find token (see above). .IP "\fB\-\-user\fR" 4 .IX Item "--user" Username to use. If neither \fB\-\-group\fR, \fB\-\-group\-id\fR, \fB\-\-user\fR or \fB\-\-user\-id\fR is set, salsa uses current user \s-1ID\s0 (corresponding to salsa private token). .IP "\fB\-\-user\-id\fR" 4 .IX Item "--user-id" User \s-1ID\s0 to use. Use \f(CW\*(C`salsa search_users name\*(C'\fR to find one. If neither \&\fB\-\-group\fR, \fB\-\-group\-id\fR, \fB\-\-user\fR or \fB\-\-user\-id\fR is set, salsa uses current user \s-1ID\s0 (corresponding to salsa private token). .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_USER_ID\s0\fR .IP "\fB\-\-verbose\fR" 4 .IX Item "--verbose" Enable verbose output. .IP "\fB\-\-yes\fR" 4 .IX Item "--yes" Never ask for consent. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_YES\s0\fR (yes/no) .SS "List/search project options" .IX Subsection "List/search project options" .IP "\fB\-\-archived\fR, \fB\-\-no\-archived\fR" 4 .IX Item "--archived, --no-archived" Instead of looking to active projects, list or search in archived projects. Note that you can't have both archived and unarchived projects in the same request. Default: no \fI(ie \-\-no\-archived)\fR. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ARCHIVED\s0\fR (yes/no) .SS "Update/create project options" .IX Subsection "Update/create project options" .IP "\fB\-\-all\fR, \fB\-\-all\-archived\fR" 4 .IX Item "--all, --all-archived" When set, all projects of group/user are affected by command. \&\fB\-\-all\fR will filter all active projects, whereas \fB\-\-all\-archived\fR will include active and archived projects. .RS 4 .IP "\fB\-\-skip\fR, \fB\-\-no\-skip\fR" 4 .IX Item "--skip, --no-skip" Ignore project with \fB\-\-all\fR or \fB\-\-all\-achived\fR. Example: .Sp .Vb 1 \& salsa update_projects \-\-tagpending \-\-all \-\-skip qa \-\-skip devscripts .Ve .Sp To set multiples values, use spaces. Example: .Sp .Vb 1 \& SALSA_SKIP=qa devscripts .Ve .Sp Using \fB\-\-no\-skip\fR will ignore any projects to be skipped and include them. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_SKIP\s0\fR .IP "\fB\-\-skip\-file\fR" 4 .IX Item "--skip-file" Ignore projects in this file (1 project per line). .Sp .Vb 1 \& salsa update_projects \-\-tagpending \-\-all \-\-skip\-file ~/.skip .Ve .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_SKIP_FILE\s0\fR .RE .RS 4 .RE .IP "\fB\-\-build\-timeout\fR" 4 .IX Item "--build-timeout" The maximum amount of time, in seconds, that a job can run. Default: 3600 (60 minutes). .Sp .Vb 1 \& salsa update_safe myrepo \-\-build\-timeout 3600 .Ve .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_BUILD_TIMEOUT\s0\fR .IP "\fB\-\-avatar\-path\fR" 4 .IX Item "--avatar-path" Path to an image for the project's avatar. If path value contains \*(L"%p\*(R", it is replaced by project name. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_AVATAR_PATH\s0\fR .IP "\fB\-\-ci\-config\-path\fR" 4 .IX Item "--ci-config-path" Configure configuration file path of GitLab \s-1CI.\s0 Default: empty. Example: .Sp .Vb 1 \& salsa update_safe \-\-ci\-config\-path recipes/debian.yml@salsa\-ci\-team/pipeline debian/devscripts .Ve .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_CI_CONFIG_PATH\s0\fR .IP "\fB\-\-desc\fR, \fB\-\-no\-desc\fR" 4 .IX Item "--desc, --no-desc" Configure a project's description using pattern given in \fBdesc-pattern\fR. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_DESC\s0\fR (yes/no) .IP "\fB\-\-desc\-pattern\fR" 4 .IX Item "--desc-pattern" Project's description pattern. \*(L"%p\*(R" is replaced by project's name, while \*(L"%P\*(R" is replaced by project's name given in command (may contains full path). Default: \*(L"Debian package \f(CW%p\fR\*(R". .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_DESC_PATTERN\s0\fR .IP "\fB\-\-email\fR, \fB\-\-no\-email\fR, \fB\-\-disable\-email\fR" 4 .IX Item "--email, --no-email, --disable-email" Enable, ignore or disable email-on-push. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_EMAIL\s0\fR (yes/ignore/no, default: ignore) .IP "\fB\-\-email\-recipient\fR" 4 .IX Item "--email-recipient" Email-on-push recipient. Can be multi valued: .Sp .Vb 3 \& $ salsa update_safe myrepo \e \& \-\-email\-recipient foo@foobar.org \e \& \-\-email\-recipient bar@foobar.org .Ve .Sp If recipient value contains \*(L"%p\*(R", it is replaced by project name. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_EMAIL_RECIPIENTS\s0\fR (use spaces to separate multiples recipients) .IP "\fB\-\-analytics\fR" 4 .IX Item "--analytics" Set analytics feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_ANALYTICS\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-auto\-devops\fR" 4 .IX Item "--auto-devops" Set auto devops feature. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_AUTO_DEVOPS\s0\fR (yes/no, default: yes) .IP "\fB\-\-container\fR" 4 .IX Item "--container" Set container feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_CONTAINER\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-environments\fR" 4 .IX Item "--environments" Set environments feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_ENVIRONMENTS\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-feature\-flags\fR" 4 .IX Item "--feature-flags" Set feature flags feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_FEATURE_FLAGS\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-forks\fR" 4 .IX Item "--forks" Set forking a project feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_FORKS\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-infrastructure\fR" 4 .IX Item "--infrastructure" Set infrastructure feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_INFRASTRUCTURE\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-issues\fR" 4 .IX Item "--issues" Set issues feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_ISSUES\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-jobs\fR" 4 .IX Item "--jobs" Set jobs feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_JOBS\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-lfs\fR" 4 .IX Item "--lfs" Set Large File Storage (\s-1LFS\s0) feature. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_LFS\s0\fR (yes/no, default: yes) .IP "\fB\-\-mr\fR" 4 .IX Item "--mr" Set merge requests feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_MR\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-monitor\fR" 4 .IX Item "--monitor" Set monitor feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_MONITOR\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-packages\fR" 4 .IX Item "--packages" Set packages feature. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_PACKAGES\s0\fR (yes/no, default: yes) .IP "\fB\-\-pages\fR" 4 .IX Item "--pages" Set pages feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_PAGES\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-releases\fR" 4 .IX Item "--releases" Set releases feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_RELEASES\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-enable\-remove\-source\-branch\fR, \fB\-\-disable\-remove\-source\-branch\fR" 4 .IX Item "--enable-remove-source-branch, --disable-remove-source-branch" Enable or disable deleting source branch option by default for all new merge requests. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_REMOVE_SOURCE_BRANCH\s0\fR (yes/no, default: yes) .IP "\fB\-\-repo\fR" 4 .IX Item "--repo" Set the project's repository feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_REPO\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-request\-access\fR" 4 .IX Item "--request-access" Allow users to request member access. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_REQUEST_ACCESS\s0\fR (yes/no) .IP "\fB\-\-requirements\fR" 4 .IX Item "--requirements" Set requirements feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_REQUIREMENTS\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-security\-compliance\fR" 4 .IX Item "--security-compliance" Enable or disabled Security and Compliance feature. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_SECURITY_COMPLIANCE\s0\fR (yes/no) .IP "\fB\-\-service\-desk\fR" 4 .IX Item "--service-desk" Allow service desk feature. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_SERVICE_DESK\s0\fR (yes/no) .IP "\fB\-\-snippets\fR" 4 .IX Item "--snippets" Set snippets feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_SNIPPETS\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-wiki\fR" 4 .IX Item "--wiki" Set wiki feature with permissions. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ENABLE_WIKI\s0\fR (yes/private/no, default: yes) .IP "\fB\-\-irc\-channel\fR" 4 .IX Item "--irc-channel" \&\s-1IRC\s0 channel for \s-1KGB\s0 or Irker. Can be used more than one time only with \&\fB\-\-irker\fR. .Sp \&\fBImportant\fR: channel must not include the first \*(L"#\*(R". If salsa finds a channel starting with \*(L"#\*(R", it will consider that the channel starts with 2 \*(L"#\*(R"! .Sp \&\f(CW\*(C`.devscript\*(C'\fR value: \fB\s-1SALSA_IRC_CHANNEL\s0\fR .Sp Multiple values must be space separated. .Sp Since configuration files are read using \fBsh\fR, be careful when using \*(L"#\*(R": you must enclose the channel with quotes, else \fBsh\fR will consider it as a comment and will ignore this value. .IP "\fB\-\-irker\fR, \fB\-\-no\-irker\fR, \fB\-\-disable\-irker\fR" 4 .IX Item "--irker, --no-irker, --disable-irker" Enable, ignore or disable Irker service. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_IRKER\s0\fR (yes/ignore/no, default: ignore) .IP "\fB\-\-irker\-host\fR" 4 .IX Item "--irker-host" Irker host. Default: ruprecht.snow\-crash.org. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_IRKER_HOST\s0\fR .IP "\fB\-\-irker\-port\fR" 4 .IX Item "--irker-port" Irker port. Default: empty (default value). .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_IRKER_PORT\s0\fR .IP "\fB\-\-kgb\fR, \fB\-\-no\-kgb\fR, \fB\-\-disable\-kgb\fR" 4 .IX Item "--kgb, --no-kgb, --disable-kgb" Enable, ignore or disable \s-1KGB\s0 webhook. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_KGB\s0\fR (yes/ignore/no, default: ignore) .IP "\fB\-\-kgb\-options\fR" 4 .IX Item "--kgb-options" List of \s-1KGB\s0 enabled options (comma separated). Default: issues_events, merge_requests_events, note_events, pipeline_events, push_events, tag_push_events, wiki_page_events, enable_ssl_verification .Sp .Vb 2 \& $ salsa update_safe debian/devscripts \-\-kgb \-\-irc\-channel devscripts \e \& \-\-kgb\-options \*(Aqmerge_requests_events,issues_events,enable_ssl_verification\*(Aq .Ve .Sp 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 .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_KGB_OPTIONS\s0\fR .IP "\fB\-\-no\-fail\fR" 4 .IX Item "--no-fail" Don't stop on error when using \fBupdate_projects\fR with \fB\-\-all\fR or \fB\-\-all\-archived\fR when set to yes. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_NO_FAIL\s0\fR (yes/no, default: no) .IP "\fB\-\-rename\-head\fR, \fB\-\-no\-rename\-head\fR" 4 .IX Item "--rename-head, --no-rename-head" Rename \s-1HEAD\s0 branch given by \fB\-\-source\-branch\fR into \fB\-\-dest\-branch\fR and change \&\*(L"default branch\*(R" of project. Works only with \fBupdate_projects\fR. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_RENAME_HEAD\s0\fR (yes/no) .RS 4 .IP "\fB\-\-source\-branch\fR" 4 .IX Item "--source-branch" Default: \*(L"master\*(R". .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_SOURCE_BRANCH\s0\fR .IP "\fB\-\-dest\-branch\fR" 4 .IX Item "--dest-branch" Default: \*(L"debian/master\*(R". .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_DEST_BRANCH\s0\fR .RE .RS 4 .RE .IP "\fB\-\-tagpending\fR, \fB\-\-no\-tagpending\fR, \fB\-\-disable\-tagpending\fR" 4 .IX Item "--tagpending, --no-tagpending, --disable-tagpending" Enable, ignore or disable \*(L"tagpending\*(R" webhook. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_TAGPENDING\s0\fR (yes/ignore/no, default: ignore) .SS "Pipeline schedules" .IX Subsection "Pipeline schedules" .IP "\fB\-\-schedule\-desc\fR" 4 .IX Item "--schedule-desc" Description of the pipeline schedule. .IP "\fB\-\-schedule\-ref\fR" 4 .IX Item "--schedule-ref" Branch or tag name that is triggered. .IP "\fB\-\-schedule\-cron\fR" 4 .IX Item "--schedule-cron" Cron schedule. Example: .Sp .Vb 1 \& 0 1 * * *. .Ve .IP "\fB\-\-schedule\-tz\fR" 4 .IX Item "--schedule-tz" Time zone to run cron schedule. Default: \s-1UTC.\s0 .IP "\fB\-\-schedule\-enable\fR, \fB\-\-schedule\-disable\fR" 4 .IX Item "--schedule-enable, --schedule-disable" Enable/disable the pipeline schedule to run. Default: disabled. .IP "\fB\-\-schedule\-run\fR" 4 .IX Item "--schedule-run" Trigger \fB\-\-schedule\-desc\fR scheduled pipeline to run immediately. Default: false. .IP "\fB\-\-schedule\-delete\fR" 4 .IX Item "--schedule-delete" Delete \fB\-\-schedule\-desc\fR pipeline schedule. .SS "Merge requests options" .IX Subsection "Merge requests options" .IP "\fB\-\-mr\-title\fR" 4 .IX Item "--mr-title" Title for merge request. Default: last commit title. .IP "\fB\-\-mr\-desc\fR" 4 .IX Item "--mr-desc" Description of new \s-1MR.\s0 Default: .RS 4 .IP "empty if \fB\-\-mr\-title\fR is set" 4 .IX Item "empty if --mr-title is set" .PD 0 .IP "last commit description if any" 4 .IX Item "last commit description if any" .RE .RS 4 .RE .IP "\fB\-\-mr\-dst\-branch\fR (or second command line argument)" 4 .IX Item "--mr-dst-branch (or second command line argument)" .PD Destination branch. Default: \*(L"master\*(R". .IP "\fB\-\-mr\-dst\-project\fR (or first command line argument)" 4 .IX Item "--mr-dst-project (or first command line argument)" Destination project. Default: project from which the current project was forked; or, if not found, \*(L"upstream\*(R" value found using \fBgit remote \-\-verbose show\fR; or using source project. .Sp If \fB\-\-mr\-dst\-project\fR is set to \fBsame\fR, salsa will use source project as destination. .IP "\fB\-\-mr\-src\-branch\fR" 4 .IX Item "--mr-src-branch" Source branch. Default: current branch. .IP "\fB\-\-mr\-src\-project\fR" 4 .IX Item "--mr-src-project" Source project. Default: current project found using \&\fBgit remote \-\-verbose show\fR. .IP "\fB\-\-mr\-allow\-squash\fR, \fB\-\-no\-mr\-allow\-squash\fR" 4 .IX Item "--mr-allow-squash, --no-mr-allow-squash" Allow upstream project to squash your commits, this is the default. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_MR_ALLOW_SQUASH\s0\fR (yes/no) .IP "\fB\-\-mr\-remove\-source\-branch\fR, \fB\-\-no\-mr\-remove\-source\-branch\fR" 4 .IX Item "--mr-remove-source-branch, --no-mr-remove-source-branch" Remove source branch if merge request is accepted. Default: no. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_MR_REMOVE_SOURCE_BRANCH\s0\fR (yes/no) .SS "Options to manage other GitLab instances" .IX Subsection "Options to manage other GitLab instances" .IP "\fB\-\-api\-url\fR" 4 .IX Item "--api-url" GitLab \s-1API.\s0 Default: . .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_API_URL\s0\fR .IP "\fB\-\-git\-server\-url\fR" 4 .IX Item "--git-server-url" Default: \*(L"git@salsa.debian.org:\*(R". .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_GIT_SERVER_URL\s0\fR .IP "\fB\-\-irker\-server\-url\fR" 4 .IX Item "--irker-server-url" Default: \*(L"ircs://irc.oftc.net:6697/\*(R". .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_IRKER_SERVER_URL\s0\fR .IP "\fB\-\-kgb\-server\-url\fR" 4 .IX Item "--kgb-server-url" Default: . .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_KGB_SERVER_URL\s0\fR .IP "\fB\-\-tagpending\-server\-url\fR" 4 .IX Item "--tagpending-server-url" Default: . .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_TAGPENDING_SERVER_URL\s0\fR .PP \fIConfiguration file example\fR .IX Subsection "Configuration file example" .PP Example to use salsa with (group \*(L"lemonldap-ng\*(R"): .PP .Vb 4 \& 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 .Ve .PP Then to use it, add something like this in your \f(CW\*(C`.bashrc\*(C'\fR file: .PP .Vb 1 \& alias llng_admin=\*(Aqsalsa \-\-conffile ~/.salsa\-ow2.conf\*(Aq .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fBdpt-salsa\fR .SH "AUTHOR" .IX Header "AUTHOR" Xavier Guimard .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (C) 2018, Xavier Guimard .PP It contains code formerly found in dpt-salsa \fI(pkg-perl-tools)\fR copyright 2018, gregor herrmann . .PP This library is free software; you can redistribute it and/or modify it under the terms of the \s-1GNU\s0 General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. .PP This program is distributed in the hope that it will be useful, but \s-1WITHOUT ANY WARRANTY\s0; without even the implied warranty of \&\s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE.\s0 See the \&\s-1GNU\s0 General Public License for more details. .PP You should have received a copy of the \s-1GNU\s0 General Public License along with this program. If not, see .