generated from actions/typescript-action
-
Notifications
You must be signed in to change notification settings - Fork 0
/
action.yml
114 lines (94 loc) · 3.84 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
name: 'Deploy'
description: 'Deploy an application using Docker Swarm'
author: 'Simplificator AG'
# Add your action's branding here. This will appear on the GitHub Marketplace.
branding:
icon: 'activity'
color: 'black'
# Define your inputs here.
inputs:
compose-file:
description: 'Path to the docker-compose file'
required: true
environment:
description: "The name of the environment for the deployment"
required: false
environment-url:
description: "A URL to access your deployment"
required: false
secrets:
description: "Docker secrets to create during the stack"
required: false
stack-name:
description: 'Name of the stack to deploy'
required: true
ssh-user-at-host:
description: 'User@host to connect to'
required: true
ssh-port:
description: "Port to connect to with SSH"
required: false
default: "22"
runs:
using: "composite"
steps:
- uses: chrnorm/deployment-action@v2
name: Create GitHub deployment
id: deployment
with:
token: "${{ github.token }}"
environment-url: "${{ inputs.environment-url }}"
environment: "${{ inputs.environment }}"
initial-status: "in_progress"
if: "${{ inputs.environment != '' && inputs.environment-url != '' }}"
- name: Check if system is available through SSH
run: "ssh -o ConnectTimeout=5 -p ${{ inputs.ssh-port }} ${{ inputs.ssh-user-at-host }} exit"
shell: bash
- name: Create Docker context
run: |
docker context create target --docker "host=ssh://${{ inputs.ssh-user-at-host }}:${{ inputs.ssh-port }}"
docker context use target
shell: bash
- name: Initialising Swarm if required
run: docker node ls || docker swarm init
shell: bash
- name: Create secrets
run: |
echo "${{ inputs.secrets }}" | yq e '.[]' - | while IFS= read -r line; do
secret_name=$(echo "$line" | yq e '.name' -)
secret_value=$(echo "$line" | yq e '.value' -)
# Execute the Docker secret command
docker secret inspect "$secret_name" > /dev/null 2>&1 || echo "$secret_value" | docker secret create "$secret_name" -
done
shell: bash
if: "${{ inputs.secrets != '' }}"
- name: Pull docker-stack-wait image
run: docker pull sudobmitch/docker-stack-wait:v0.2.5
shell: bash
- name: Deploying stack
run: docker stack deploy --compose-file ${{ inputs.compose-file }} --prune --with-registry-auth ${{ inputs.stack-name }}
shell: bash
- name: Waiting for deployment to complete
run: docker run --rm -i -v $(pwd)/${{ inputs.compose-file }}:/docker-compose.yml -v /var/run/docker.sock:/var/run/docker.sock sudobmitch/docker-stack-wait:v0.2.5 -l "--since 2m" -t 120 ${{ inputs.stack-name }}
shell: bash
- name: Cleaning up
run: |
docker system prune -af --filter 'label!=org.opencontainers.image.source=git://github.com/sudo-bmitch/docker-stack-wait.git' --filter 'label!=org.opencontainers.image.version=v0.2.5'
docker context remove --force target
shell: bash
- name: Update deployment status (success)
uses: chrnorm/deployment-status@v2
with:
token: "${{ github.token }}"
environment-url: "${{ steps.deployment.outputs.environment_url }}"
deployment-id: "${{ steps.deployment.outputs.deployment_id }}"
state: "success"
if: "${{ inputs.environment != '' && inputs.environment-url != '' && success() }}"
- name: Update deployment status (failed)
uses: chrnorm/deployment-status@v2
with:
token: "${{ github.token }}"
environment-url: "${{ steps.deployment.outputs.environment_url }}"
deployment-id: "${{ steps.deployment.outputs.deployment_id }}"
state: "failure"
if: "${{ inputs.environment != '' && inputs.environment-url != '' && failure() }}"