-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaction.yml
More file actions
178 lines (145 loc) · 6.91 KB
/
action.yml
File metadata and controls
178 lines (145 loc) · 6.91 KB
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
name: Run MongoDB Server
description: Runs MongoDB Server using a method appropriate for the target platform
inputs:
connection-string-name:
description: Name of the output environment variable that will receive the connection string
required: false
default: "MongoDBConnectionString"
mongodb-replica-set:
description: "MongoDB replica set name (no replica set by default)"
required: false
default: ""
mongodb-version:
description: "MongoDB version (default 7.0.6)"
required: false
default: "7.0.6"
mongodb-port:
description: "MongoDB port to use (default 27017)"
required: false
default: 27017
runs:
using: "composite"
steps:
- name: Install MongoDB Server (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$databaseServiceName = "MongoDB$(Get-Random)"
$tempPath = [System.IO.Path]::GetTempPath()
$databaseRootDirectory = Join-Path $tempPath $databaseServiceName
$databaseDataDirectory = Join-Path $databaseRootDirectory "data"
$databaseLogsDirectory = Join-Path $databaseRootDirectory "logs"
$databaseLogFile = Join-Path $databaseLogsDirectory "logs.txt"
mkdir $databaseRootDirectory > $null
mkdir $databaseDataDirectory > $null
mkdir $databaseLogsDirectory > $null
$version = [Version]::new("${{ inputs.mongodb-version }}")
$databaseBinDirectory = "C:\Program Files\MongoDB\Server\$($version.Major).$($version.Minor)\bin"
echo "::group:: Installing MongoDB $version to $databaseBinDirectory"
choco install mongodb --version=""${{ inputs.mongodb-version }}"" -y --no-progress
echo "::endgroup::"
echo "::group:: Starting MongoDB $databaseServiceName on port ${{ inputs.mongodb-port }}"
$replicaSet = "${{ inputs.mongodb-replica-set }}"
if($replicaSet) {
echo "Starting MongoD with replica"
& "$databaseBinDirectory\mongod.exe" --dbpath $databaseDataDirectory --logpath $databaseLogFile --port ${{ inputs.mongodb-port }} --bind_ip 127.0.0.1 --install --serviceName $databaseServiceName --serviceDisplayName $databaseServiceName --replSet $replicaSet
}
else {
echo "Starting MongoD without replica"
& "$databaseBinDirectory\mongod.exe" --dbpath $databaseDataDirectory --logpath $databaseLogFile --port ${{ inputs.mongodb-port }} --bind_ip 127.0.0.1 --install --serviceName $databaseServiceName --serviceDisplayName $databaseServiceName
}
net start $databaseServiceName
echo "::endgroup::"
echo "::endgroup::"
echo "::group::Installing MongoDB Shell"
choco install mongodb-shell -y --no-progress
echo "::endgroup::"
Write-Output "::group::Testing connection"
$startDate = Get-Date
do {
try {
$output = & mongosh "mongodb://127.0.0.1:${{ inputs.mongodb-port }}" --eval "db.serverStatus()" --quiet
if(!$output.Contains('ECONNREFUSED')) {
Write-Output "Connection to MongoDB successful"
break
}
}
catch {
if ($startDate.AddSeconds(20) -lt (Get-Date)) {
throw "MongoDB did not initialize within 20 seconds. Exiting."
}
Start-Sleep -Seconds 1
Write-Output "Connection to MongoDB unsuccessful. Trying again"
}
} While ($True)
Write-Output "::endgroup::"
if($replicaSet) {
Write-Output "::group::Setting up the replica set"
$rsInitialize =
"rs.initiate(
{
_id: '${{ inputs.mongodb-replica-set }}',
members: [ { _id: 0, host: '127.0.0.1:${{ inputs.mongodb-port }}' } ]
}
);"
& mongosh "mongodb://127.0.0.1:${{ inputs.mongodb-port }}" --eval "$rsInitialize" --quiet
& mongosh "mongodb://127.0.0.1:${{ inputs.mongodb-port }}" --eval "rs.status()" --quiet
echo "::endgroup::"
}
- name: Start MongoDB Server (Linux)
if: runner.os == 'Linux'
shell: pwsh
run: |
$databaseServiceName = "MongoDB$(Get-Random)"
Write-Output "::group:: Starting MongoDB $databaseServiceName on port ${{ inputs.mongodb-port }}"
$replicaSet = "${{ inputs.mongodb-replica-set }}"
if($replicaSet) {
Write-Output "Starting MongoD with replica"
docker run --name $databaseServiceName --publish ${{ inputs.mongodb-port }}:${{ inputs.mongodb-port }} --detach mongo:${{ inputs.mongodb-version }} --replSet $replicaSet --port ${{ inputs.mongodb-port }}
}
else {
Write-Output "Starting MongoD without replica"
docker run --name $databaseServiceName --publish ${{ inputs.mongodb-port }}:${{ inputs.mongodb-port }} --detach mongo:${{ inputs.mongodb-version }} --port ${{ inputs.mongodb-port }}
}
Write-Output "::group::Testing connection"
$startDate = Get-Date
do {
try {
$output = & docker exec --tty $databaseServiceName mongosh "mongodb://127.0.0.1:${{ inputs.mongodb-port }}" --eval "db.serverStatus()" --quiet
if(!$output.Contains('ECONNREFUSED')) {
Write-Output "Connection to MongoDB successful"
break
}
}
catch {
if ($startDate.AddSeconds(20) -lt (Get-Date)) {
throw "MongoDB did not initialize within 20 seconds. Exiting."
}
Start-Sleep -Seconds 1
Write-Output "Connection to MongoDB unsuccessful. Trying again"
}
} While ($True)
Write-Output "::endgroup::"
if($replicaSet) {
Write-Output "::group::Setting up the replica set"
$rsInitialize =
"rs.initiate(
{
_id: '${{ inputs.mongodb-replica-set }}',
members: [ { _id: 0, host: '127.0.0.1:${{ inputs.mongodb-port }}' } ]
}
);"
docker exec --tty $databaseServiceName mongosh "mongodb://127.0.0.1:${{ inputs.mongodb-port }}" --eval "$rsInitialize" --quiet
docker exec --tty $databaseServiceName mongosh "mongodb://127.0.0.1:${{ inputs.mongodb-port }}" --eval "rs.status()" --quiet
Write-Output "::endgroup::"
}
- name: Setup Connection string
shell: pwsh
run: |
echo "Setting environment variable ${{ inputs.connection-string-name }} to MongoDB connection string..."
$connectionString = "${{ inputs.connection-string-name }}=mongodb://127.0.0.1:${{ inputs.mongodb-port }}"
$replicaSet = "${{ inputs.mongodb-replica-set }}"
if($replicaSet) {
$connectionString = $connectionString + "/?replicaSet=" + $replicaSet
}
echo $connectionString >> $Env:GITHUB_ENV