mirror of
https://github.com/saltstack/salt-bootstrap.git
synced 2025-04-16 09:40:21 +00:00
Merge pull request #1325 from s0undt3ch/stable
Merge develop into stable for release
This commit is contained in:
commit
0b16d1eb7e
8 changed files with 209 additions and 177 deletions
54
.drone.jsonnet
Normal file
54
.drone.jsonnet
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
local distros = [
|
||||||
|
{ name: 'amazon', version: '1' },
|
||||||
|
{ name: 'amazon', version: '2' },
|
||||||
|
// { name: 'centos', version: '6' },
|
||||||
|
{ name: 'centos', version: '7' },
|
||||||
|
{ name: 'debian', version: '8' },
|
||||||
|
{ name: 'debian', version: '9' },
|
||||||
|
// { name: 'ubuntu', version: '1404' },
|
||||||
|
// { name: 'ubuntu', version: '1604' },
|
||||||
|
{ name: 'ubuntu', version: '1804' },
|
||||||
|
];
|
||||||
|
|
||||||
|
local Shellcheck() = {
|
||||||
|
kind: 'pipeline',
|
||||||
|
name: 'run-shellcheck',
|
||||||
|
|
||||||
|
steps: [
|
||||||
|
{
|
||||||
|
name: 'build',
|
||||||
|
image: 'koalaman/shellcheck-alpine',
|
||||||
|
commands: [
|
||||||
|
'shellcheck -s sh -f checkstyle bootstrap-salt.sh',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
local Build(os, os_version) = {
|
||||||
|
kind: 'pipeline',
|
||||||
|
name: std.format('build-%s-%s', [os, os_version]),
|
||||||
|
|
||||||
|
steps: [
|
||||||
|
{
|
||||||
|
name: 'build',
|
||||||
|
privileged: true,
|
||||||
|
image: 'saltstack/drone-plugin-kitchen',
|
||||||
|
settings: {
|
||||||
|
target: std.format('%s-%s', [os, os_version]),
|
||||||
|
requirements: 'tests/requirements.txt',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
depends_on: [
|
||||||
|
'run-shellcheck',
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
[
|
||||||
|
Shellcheck(),
|
||||||
|
] + [
|
||||||
|
Build(distro.name, distro.version)
|
||||||
|
for distro in distros
|
||||||
|
]
|
133
.drone.yml
Normal file
133
.drone.yml
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: run-shellcheck
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: koalaman/shellcheck-alpine
|
||||||
|
commands:
|
||||||
|
- shellcheck -s sh -f checkstyle bootstrap-salt.sh
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build-amazon-1
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: saltstack/drone-plugin-kitchen
|
||||||
|
settings:
|
||||||
|
requirements: tests/requirements.txt
|
||||||
|
target: amazon-1
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- run-shellcheck
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build-amazon-2
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: saltstack/drone-plugin-kitchen
|
||||||
|
settings:
|
||||||
|
requirements: tests/requirements.txt
|
||||||
|
target: amazon-2
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- run-shellcheck
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build-centos-7
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: saltstack/drone-plugin-kitchen
|
||||||
|
settings:
|
||||||
|
requirements: tests/requirements.txt
|
||||||
|
target: centos-7
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- run-shellcheck
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build-debian-8
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: saltstack/drone-plugin-kitchen
|
||||||
|
settings:
|
||||||
|
requirements: tests/requirements.txt
|
||||||
|
target: debian-8
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- run-shellcheck
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build-debian-9
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: saltstack/drone-plugin-kitchen
|
||||||
|
settings:
|
||||||
|
requirements: tests/requirements.txt
|
||||||
|
target: debian-9
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- run-shellcheck
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build-ubuntu-1804
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: saltstack/drone-plugin-kitchen
|
||||||
|
settings:
|
||||||
|
requirements: tests/requirements.txt
|
||||||
|
target: ubuntu-1804
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- run-shellcheck
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: signature
|
||||||
|
hmac: 563c4cb4cefd58c08143192bd72c5a25c5d0edbe4a6d1f5f89c87d3ca2024246
|
||||||
|
|
||||||
|
...
|
|
@ -8,6 +8,7 @@ driver:
|
||||||
cap_add:
|
cap_add:
|
||||||
- sys_admin
|
- sys_admin
|
||||||
disable_upstart: false
|
disable_upstart: false
|
||||||
|
use_internal_docker_network: true
|
||||||
|
|
||||||
provisioner:
|
provisioner:
|
||||||
name: salt_solo
|
name: salt_solo
|
||||||
|
@ -118,4 +119,4 @@ suites:
|
||||||
verifier:
|
verifier:
|
||||||
name: shell
|
name: shell
|
||||||
remote_exec: false
|
remote_exec: false
|
||||||
command: pytest -v tests/integration/
|
command: pytest --cache-clear -v tests/integration/
|
||||||
|
|
55
.travis.yml
55
.travis.yml
|
@ -1,55 +0,0 @@
|
||||||
language: ruby
|
|
||||||
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- curl
|
|
||||||
- git
|
|
||||||
- shellcheck
|
|
||||||
- python-pip
|
|
||||||
|
|
||||||
rvm:
|
|
||||||
- ruby
|
|
||||||
|
|
||||||
env:
|
|
||||||
matrix:
|
|
||||||
- PLATFORM=fedora
|
|
||||||
- PLATFORM=centos-7
|
|
||||||
- PLATFORM=centos-6
|
|
||||||
- PLATFORM=amazon-1
|
|
||||||
- PLATFORM=amazon-2
|
|
||||||
- PLATFORM=ubuntu-1804
|
|
||||||
- PLATFORM=ubuntu-1604
|
|
||||||
- PLATFORM=ubuntu-1404
|
|
||||||
- PLATFORM=debian-8
|
|
||||||
- PLATFORM=debian-9
|
|
||||||
- PLATFORM=arch
|
|
||||||
- PLATFORM=opensuse
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
allow_failures:
|
|
||||||
- env: PLATFORM=ubuntu-1804
|
|
||||||
- env: PLATFORM=ubuntu-1604
|
|
||||||
- env: PLATFORM=debian-8
|
|
||||||
- env: PLATFORM=debian-9
|
|
||||||
- env: PLATFORM=centos-6
|
|
||||||
|
|
||||||
sudo: true
|
|
||||||
dist: trusty
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- pip install --user -r tests/requirements.txt
|
|
||||||
|
|
||||||
script:
|
|
||||||
# Check shell scripts
|
|
||||||
- shellcheck -s sh -f checkstyle bootstrap-salt.sh
|
|
||||||
# Run test-kitchen with docker driver:
|
|
||||||
- bundle exec kitchen create -l warn -c 6 "$PLATFORM"
|
|
||||||
- bundle exec kitchen verify "$PLATFORM"
|
|
||||||
|
|
||||||
after_script:
|
|
||||||
- bundle exec kitchen list $PLATFORM
|
|
||||||
- bundle exec kitchen destroy "$PLATFORM"
|
|
|
@ -96,7 +96,7 @@ a bug fix or feature implementation can be merged in.
|
||||||
|
|
||||||
### PR Tests
|
### PR Tests
|
||||||
|
|
||||||
There are several Jenkins jobs that run on each Pull Request. Most of these are
|
There are several build jobs that run on each Pull Request. Most of these are
|
||||||
CI jobs that set up different steps, such as setting up the job, cloning the
|
CI jobs that set up different steps, such as setting up the job, cloning the
|
||||||
repo from the PR, etc.
|
repo from the PR, etc.
|
||||||
|
|
||||||
|
|
114
Jenkinsfile
vendored
114
Jenkinsfile
vendored
|
@ -1,114 +0,0 @@
|
||||||
import java.util.Random
|
|
||||||
|
|
||||||
Random rand = new Random()
|
|
||||||
|
|
||||||
// ONLY CHANGE THIS BIT PLEASE
|
|
||||||
def baseDistros = ["debian8",
|
|
||||||
"suse",
|
|
||||||
"centos6",
|
|
||||||
"arch",
|
|
||||||
"ubuntu-14.04",
|
|
||||||
"ubuntu-18.04",
|
|
||||||
"windows",
|
|
||||||
]
|
|
||||||
def versions = ["stable", "git", "stable-old"]
|
|
||||||
|
|
||||||
def basePrDistros = ["ubuntu-16.04",
|
|
||||||
"centos7"]
|
|
||||||
|
|
||||||
def prVersions = ["stable", "git"]
|
|
||||||
|
|
||||||
// You probably shouldn't be messing with this stuff down here
|
|
||||||
|
|
||||||
def distros = (baseDistros + basePrDistros).unique()
|
|
||||||
|
|
||||||
def notifySuccessful(String stageName) {
|
|
||||||
slackSend (color: '#00FF00', message: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})" + "\n Stage -- " + stageName)
|
|
||||||
}
|
|
||||||
|
|
||||||
def notifyFailed(String stageName) {
|
|
||||||
slackSend (color: '#FF0000', message: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})" + "\n Stage -- " + stageName)
|
|
||||||
}
|
|
||||||
|
|
||||||
def runKitchen(String distro) {
|
|
||||||
echo "kitchen create ${distro}"
|
|
||||||
echo "kitchen converge ${distro}"
|
|
||||||
echo "kitchen destroy ${distro}"
|
|
||||||
}
|
|
||||||
|
|
||||||
def distroversions = []
|
|
||||||
for (d in distros) {
|
|
||||||
for (v in versions) {
|
|
||||||
distroversions = distroversions + ["${d}-${v}"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def prDistros = (basePrDistros + distros[rand.nextInt(baseDistros.size())]).unique()
|
|
||||||
|
|
||||||
def prDistroversions = []
|
|
||||||
for (d in prDistros) {
|
|
||||||
for (v in prVersions) {
|
|
||||||
prDistroversions = prDistroversions + ["${d}-${v}"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def makeSetupRuns(dv) {
|
|
||||||
return {
|
|
||||||
node {
|
|
||||||
runKitchen("${dv}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def setupRuns = distroversions.collectEntries {
|
|
||||||
["kitchen-${it}" : makeSetupRuns("${it}")]
|
|
||||||
}
|
|
||||||
|
|
||||||
def prSetupRuns = prDistroversions.collectEntries {
|
|
||||||
["kitchen-${it}" : makeSetupRuns("${it}")]
|
|
||||||
}
|
|
||||||
|
|
||||||
node ('bootstrap') {
|
|
||||||
timestamps {
|
|
||||||
ansiColor('xterm') {
|
|
||||||
stage('checkout') { checkout scm }
|
|
||||||
stage('shellcheck') {
|
|
||||||
sh 'stack exec -- shellcheck -s sh -f checkstyle bootstrap-salt.sh | tee checkstyle.xml'
|
|
||||||
checkstyle canComputeNew: false, defaultEncoding: '', healthy: '', pattern: '**/checkstyle.xml', unHealthy: '', unstableTotalAll: '0'
|
|
||||||
archiveArtifacts artifacts: '**/checkstyle.xml'
|
|
||||||
}
|
|
||||||
// if (env.CHANGE_ID) {
|
|
||||||
// // Running for a PR only runs against 4 random distros from a shorter list
|
|
||||||
// stage('kitchen-pr') {
|
|
||||||
// parallel prSetupRuns
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// // If we're not running for a pr we run *everything*
|
|
||||||
// stage('kitchen-all') {
|
|
||||||
// parallel setupRuns
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO:
|
|
||||||
* 1. Tests for each supported distro in bootstrap + branch shellcheck test (Shellcheck should be done)
|
|
||||||
* 2. Each distro needs a "stable" install (installs stable packages from our repo) and a "git" install (installs off of a git tag)
|
|
||||||
* 3. Running against each branch (stable, develop)
|
|
||||||
* 4. And probably a small subset against each pull request (similar to what we do in salt)
|
|
||||||
*
|
|
||||||
* Distros to check:
|
|
||||||
* Debian 8
|
|
||||||
* Suse 42.1
|
|
||||||
* CentOS 7
|
|
||||||
* CentOS 6
|
|
||||||
* Arch
|
|
||||||
* Ubuntu 16.04
|
|
||||||
* Ubuntu 14.04
|
|
||||||
* Windows
|
|
||||||
*
|
|
||||||
* Runs each against develop and stable
|
|
||||||
*
|
|
||||||
*/
|
|
10
README.rst
10
README.rst
|
@ -2,7 +2,7 @@
|
||||||
Bootstrapping Salt
|
Bootstrapping Salt
|
||||||
==================
|
==================
|
||||||
|
|
||||||
|windows_build|
|
|build|
|
||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
:local:
|
:local:
|
||||||
|
@ -28,6 +28,7 @@ sum** of the downloaded ``bootstrap-salt.sh`` file.
|
||||||
|
|
||||||
The SHA256 sum of the ``bootstrap-salt.sh`` file, per release, is:
|
The SHA256 sum of the ``bootstrap-salt.sh`` file, per release, is:
|
||||||
|
|
||||||
|
- 2019.01.08: ``ab7f29b75711da4bb79aff98d46654f910d569ebe3e908753a3c5119017bb163``
|
||||||
- 2018.08.15: ``6d414a39439a7335af1b78203f9d37e11c972b3c49c519742c6405e2944c6c4b``
|
- 2018.08.15: ``6d414a39439a7335af1b78203f9d37e11c972b3c49c519742c6405e2944c6c4b``
|
||||||
- 2018.08.13: ``98284bdc2b5ebaeb619b22090374e42a68e8fdefe6bff1e73bd1760db4407ed0``
|
- 2018.08.13: ``98284bdc2b5ebaeb619b22090374e42a68e8fdefe6bff1e73bd1760db4407ed0``
|
||||||
- 2018.04.25: ``e2e3397d6642ba6462174b4723f1b30d04229b75efc099a553e15ea727877dfb``
|
- 2018.04.25: ``e2e3397d6642ba6462174b4723f1b30d04229b75efc099a553e15ea727877dfb``
|
||||||
|
@ -424,9 +425,8 @@ Salt components, custom configurations, and even `pre-accepted Minion keys`_ alr
|
||||||
.. _`Ubuntu's release schedule`: https://wiki.ubuntu.com/Releases
|
.. _`Ubuntu's release schedule`: https://wiki.ubuntu.com/Releases
|
||||||
.. _Vagrant: http://www.vagrantup.com
|
.. _Vagrant: http://www.vagrantup.com
|
||||||
|
|
||||||
|
.. |build| image:: https://drone.saltstack.com/api/badges/saltstack/salt-bootstrap/status.svg
|
||||||
.. |windows_build| image:: https://ci.appveyor.com/api/projects/status/github/saltstack/salt-bootstrap?branch=develop&svg=true
|
:target: https://drone.saltstack.com/saltstack/salt-bootstrap
|
||||||
:target: https://ci.appveyor.com/project/saltstack-public/salt-bootstrap
|
:alt: Build status on Linux
|
||||||
:alt: Build status of the develop branch on Windows
|
|
||||||
|
|
||||||
.. vim: fenc=utf-8 spell spl=en cc=100 tw=99 fo=want sts=2 sw=2 et
|
.. vim: fenc=utf-8 spell spl=en cc=100 tw=99 fo=want sts=2 sw=2 et
|
||||||
|
|
|
@ -1431,7 +1431,7 @@ __debian_derivatives_translation() {
|
||||||
# If the file does not exist, return
|
# If the file does not exist, return
|
||||||
[ ! -f /etc/os-release ] && return
|
[ ! -f /etc/os-release ] && return
|
||||||
|
|
||||||
DEBIAN_DERIVATIVES="(cumulus_.+|devuan|kali|linuxmint|raspbian)"
|
DEBIAN_DERIVATIVES="(cumulus_.+|devuan|kali|linuxmint|raspbian|bunsenlabs|turnkey)"
|
||||||
# Mappings
|
# Mappings
|
||||||
cumulus_2_debian_base="7.0"
|
cumulus_2_debian_base="7.0"
|
||||||
cumulus_3_debian_base="8.0"
|
cumulus_3_debian_base="8.0"
|
||||||
|
@ -1441,6 +1441,8 @@ __debian_derivatives_translation() {
|
||||||
linuxmint_1_debian_base="8.0"
|
linuxmint_1_debian_base="8.0"
|
||||||
raspbian_8_debian_base="8.0"
|
raspbian_8_debian_base="8.0"
|
||||||
raspbian_9_debian_base="9.0"
|
raspbian_9_debian_base="9.0"
|
||||||
|
bunsenlabs_9_debian_base="9.0"
|
||||||
|
turnkey_9_debian_base="9.0"
|
||||||
|
|
||||||
# Translate Debian derivatives to their base Debian version
|
# Translate Debian derivatives to their base Debian version
|
||||||
match=$(echo "$DISTRO_NAME_L" | grep -E ${DEBIAN_DERIVATIVES})
|
match=$(echo "$DISTRO_NAME_L" | grep -E ${DEBIAN_DERIVATIVES})
|
||||||
|
@ -1467,6 +1469,14 @@ __debian_derivatives_translation() {
|
||||||
_major=$(echo "$DISTRO_VERSION" | sed 's/^\([0-9]*\).*/\1/g')
|
_major=$(echo "$DISTRO_VERSION" | sed 's/^\([0-9]*\).*/\1/g')
|
||||||
_debian_derivative="raspbian"
|
_debian_derivative="raspbian"
|
||||||
;;
|
;;
|
||||||
|
bunsenlabs)
|
||||||
|
_major=$(echo "$DISTRO_VERSION" | sed 's/^\([0-9]*\).*/\1/g')
|
||||||
|
_debian_derivative="bunsenlabs"
|
||||||
|
;;
|
||||||
|
turnkey)
|
||||||
|
_major=$(echo "$DISTRO_VERSION" | sed 's/^\([0-9]*\).*/\1/g')
|
||||||
|
_debian_derivative="turnkey"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
_debian_version=$(eval echo "\$${_debian_derivative}_${_major}_debian_base" 2>/dev/null)
|
_debian_version=$(eval echo "\$${_debian_derivative}_${_major}_debian_base" 2>/dev/null)
|
||||||
|
@ -2778,6 +2788,7 @@ install_ubuntu_git_deps() {
|
||||||
__PACKAGES="${__PACKAGES} python${PY_PKG_VER}-msgpack python${PY_PKG_VER}-requests"
|
__PACKAGES="${__PACKAGES} python${PY_PKG_VER}-msgpack python${PY_PKG_VER}-requests"
|
||||||
__PACKAGES="${__PACKAGES} python${PY_PKG_VER}-tornado python${PY_PKG_VER}-yaml"
|
__PACKAGES="${__PACKAGES} python${PY_PKG_VER}-tornado python${PY_PKG_VER}-yaml"
|
||||||
__PACKAGES="${__PACKAGES} python${PY_PKG_VER}-zmq"
|
__PACKAGES="${__PACKAGES} python${PY_PKG_VER}-zmq"
|
||||||
|
__PACKAGES="${__PACKAGES} python-concurrent.futures"
|
||||||
|
|
||||||
if [ "$_INSTALL_CLOUD" -eq $BS_TRUE ]; then
|
if [ "$_INSTALL_CLOUD" -eq $BS_TRUE ]; then
|
||||||
# Install python-libcloud if asked to
|
# Install python-libcloud if asked to
|
||||||
|
@ -5226,6 +5237,8 @@ install_freebsd_git_deps() {
|
||||||
SALT_DEPENDENCIES=$(/usr/local/sbin/pkg search ${FROM_FREEBSD} -R -d sysutils/py-salt | grep -i origin | sed -e 's/^[[:space:]]*//' | tail -n +2 | awk -F\" '{print $2}' | tr '\n' ' ')
|
SALT_DEPENDENCIES=$(/usr/local/sbin/pkg search ${FROM_FREEBSD} -R -d sysutils/py-salt | grep -i origin | sed -e 's/^[[:space:]]*//' | tail -n +2 | awk -F\" '{print $2}' | tr '\n' ' ')
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
/usr/local/sbin/pkg install ${FROM_FREEBSD} -y ${SALT_DEPENDENCIES} || return 1
|
/usr/local/sbin/pkg install ${FROM_FREEBSD} -y ${SALT_DEPENDENCIES} || return 1
|
||||||
|
# install python meta package
|
||||||
|
/usr/local/sbin/pkg install -y lang/python || return 1
|
||||||
|
|
||||||
if ! __check_command_exists git; then
|
if ! __check_command_exists git; then
|
||||||
/usr/local/sbin/pkg install -y git || return 1
|
/usr/local/sbin/pkg install -y git || return 1
|
||||||
|
|
Loading…
Add table
Reference in a new issue