-
Notifications
You must be signed in to change notification settings - Fork 0
/
action.yml
119 lines (108 loc) · 4.11 KB
/
action.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
name: 'SM Ansible Action'
description: 'Ansible action that uses virtualenv and .netrc to configure authentication'
inputs:
python-version:
description: 'python version for setup-python action'
required: false
default: '3.9'
netrc-token:
description: 'netrc token'
required: false
default: 'not-set'
python-requirements:
description: 'requirements file to install ansible and other libs'
required: false
default: 'not-set'
ansible-roles:
description: 'Ansible roles file to install playbook dependencies'
required: false
default: 'not-set'
outputs:
venv-dir:
description: "virtualenv dir"
value: '${{ steps.set-venv-dir.outputs.dir }}'
ansible-bin:
description: "virtualenv ansible bin"
value: '${{ steps.set-venv-dir.outputs.dir }}/bin/ansible'
ansible-playbook-bin:
description: "virtualenv ansible playbook bin"
value: '${{ steps.set-venv-dir.outputs.dir }}/bin/ansible-playbook'
ansible-lint-bin:
description: "virtualenv ansible-lint bin"
value: '${{ steps.set-venv-dir.outputs.dir }}/bin/ansible-lint'
ansible-galaxy-bin:
description: "virtualenv ansible-galaxy bin"
value: '${{ steps.set-venv-dir.outputs.dir }}/bin/ansible-galaxy'
pip-bin:
description: "virtualenv pip bin"
value: '${{ steps.set-venv-dir.outputs.dir }}/bin/pip'
activate-script:
description: "virtualenv activate script"
value: '${{ steps.set-venv-dir.outputs.dir }}/bin/activate'
runs:
using: "composite"
steps:
- uses: actions/setup-python@v2
with:
python-version: ${{ inputs.python-version }}
- id: check-req-input
shell: bash
run: |
if [[ "x-${{ inputs.python-requirements }}" == "x-not-set" ]]
then
REQ_PATH=$(echo ${{ github.action_path }}/requirements.txt|sed -E 's|\.\/\/requirements|requirements|g')
echo "::set-output name=req-path::$REQ_PATH"
SHA256=$(sha256sum $REQ_PATH |awk '{print $1}')
else
echo "::set-output name=req-path::$(echo ${{ inputs.python-requirements }})"
SHA256=$(sha256sum ${{ inputs.python-requirements }} |awk '{print $1}')
fi
echo "::set-output name=req-sha256::$SHA256"
- id: set-venv-dir
run: echo "::set-output name=dir::$(echo ${{ github.workspace }}/venvansible)"
shell: bash
- name: Cache pip
uses: actions/cache@v2
with:
path: |
~/.cache/pip
${{ steps.set-venv-dir.outputs.dir }}
# Using step sha256 as we can't use hashfiles for files that aren't part of the repositories workspaces
# See https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles
key: ${{ runner.os }}-pip-${{ steps.check-req-input.outputs.req-sha256 }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Install virtualenv
run: pip install virtualenv
shell: bash
- name: Create virtualenv dir
run: virtualenv ${{ steps.set-venv-dir.outputs.dir }} || virtualenv --clear ${{ steps.set-venv-dir.outputs.dir }}
shell: bash
- name: Install libs from requirements file
run: ${{ steps.set-venv-dir.outputs.dir }}/bin/pip install -r '${{ steps.check-req-input.outputs.req-path }}'
shell: bash
- name: Config Github to use HTTPS
run: git config --global url."https://github.com/".insteadOf "[email protected]:"
shell: bash
- name: create netrc file
run: |
if [[ "x-${{ inputs.netrc-token }}" != "x-not-set" ]]
then
echo "machine github.com login github-ci password ${{ inputs.netrc-token }}" > ~/.netrc
chmod 600 ~/.netrc
fi
shell: bash
- name: Setting var
run: echo "ANSIBLE_PYTHON_INTERPRETER=python3" >> $GITHUB_ENV
shell: bash
- name: Install ansible roles
shell: bash
run: |
if [[ "x-${{ inputs.ansible-roles }}" != "x-not-set" ]]
then
source ${{ steps.set-venv-dir.outputs.dir }}/bin/activate
ansible-galaxy install -f -r ${{ inputs.ansible-roles }}
else
echo "Skipping exec"
fi