-
Notifications
You must be signed in to change notification settings - Fork 3
/
action.yml
103 lines (89 loc) · 2.78 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
name: 'Vagrant-VirtualBox'
description: 'Run CI in VirtualBox for GitHub Actions'
inputs:
box:
description: 'the vagrant box name'
required: true
box-version:
required: false
default: '>= 0'
run:
description: 'the commands to run in vm'
required: true
mem:
description: 'the memory size of the vm'
required: false
default: '2048'
ncpu:
description: 'the cpu core counts of the vm'
required: false
default: '2'
log:
description: 'the log level of vagrant'
required: false
default: 'info'
sync-type:
description: 'the type of synced_folder'
required: false
default: 'rsync'
branding:
icon: 'activity'
color: 'green'
runs:
using: 'composite'
steps:
- run: |
COLOR_RED='\033[0;31m' # Red
COLOR_GREEN='\033[0;32m' # Green
COLOR_YELLOW='\033[0;33m' # Yellow
COLOR_BLUE='\033[0;94m' # Blue
COLOR_PURPLE='\033[0;35m' # Purple
COLOR_OFF='\033[0m' # Reset
die() {
printf '%b\n' "${COLOR_RED}💔 $*${COLOR_OFF}" >&2
exit 1
}
run() {
printf '%b\n' "${COLOR_PURPLE}==>${COLOR_OFF} ${COLOR_GREEN}$*${COLOR_OFF}"
eval "$*"
}
# https://www.vagrantup.com/docs/other/debugging
case ${{inputs.log}} in
info|debug|warn|error)
export VAGRANT_LOG=${{inputs.log}}
;;
'') die "log attribute must not be empty." ;;
*) die "unrecognized log level, reference: https://www.vagrantup.com/docs/other/debugging"
esac
# https://developer.hashicorp.com/vagrant/docs/other/environmental-variables#vagrant_cwd
VAGRANT_CWD=$(mktemp -d)
run cd "$VAGRANT_CWD"
printf '%s\n' "VAGRANT_CWD=$VAGRANT_CWD" >> $GITHUB_ENV
run vagrant --version
run vagrant init ${{inputs.box}}
echo 'set -e' > shell.sh
export -p | grep 'GITHUB_' >> shell.sh
echo "cd /home/vagrant/${GITHUB_REPOSITORY}" >> shell.sh
cat >> shell.sh <<'EOF'
run() {
printf "\033[0;35m==>\033[0m \033[0;32m%b\n\033[0m" "$*"
eval "$*"
}
${{inputs.run}}
EOF
cat > Vagrantfile <<EOF
Vagrant.configure("2") do |config|
config.vm.box = "${{inputs.box}}"
config.vm.box_version = "${{inputs.box-version}}"
config.vm.provider "virtualbox" do |vb|
vb.memory = "${{inputs.mem}}"
vb.cpus = "${{inputs.ncpu}}"
end
config.vm.synced_folder "${GITHUB_WORKSPACE}", "/home/vagrant/${GITHUB_REPOSITORY}", type: "${{inputs.sync-type}}"
config.vm.provision "shell", path: "shell.sh"
end
EOF
run cat Vagrantfile
run cat shell.sh
run vagrant up --provision
shell: bash