-
Notifications
You must be signed in to change notification settings - Fork 0
/
action.yml
219 lines (201 loc) · 8.59 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
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
name: "Sync mod.io README and Images"
description: "Converts your README.md to HTML and uploads it to mod.io along with your images and logo. Optionally generates a logo from imejis.io"
author: "James Carter"
branding:
icon: "refresh-cw"
color: "gray-dark"
inputs:
logo-path:
description: "Path to the logo."
required: true
images-path:
description: "Path to the images."
required: true
readme-path:
description: "Path to the README file."
required: true
project-author:
description: "Author of the project."
required: true
project-name:
description: "Name of the project."
required: true
version:
description: "Optional - Version of the mod. Defaults to latest github release."
required: false
project-url:
description: "Homepage URL displayed on mod.io."
required: false
imejis-generate-image:
description: "Generate image from imejis.io."
required: false
default: "false"
imejis-design-id:
description: "Imejis Design ID."
required: false
modio-game:
description: "Mod.io Game Id."
required: true
modio-mod:
description: "Mod.io Mod Id."
required: true
background-color:
description: "Optional - Background color used to pad resized images."
required: false
default: "#0a1206"
image-size:
description: "Optional - ImageMagick resize image resolution."
required: false
default: "1920x1080"
logo-upload-path:
description: "Optional - Path to upload the logo."
required: false
default: "temp_upload/0001_Logo.png"
images-upload-path:
description: "Optional - Path to upload the images."
required: false
default: "temp_upload"
image-zip:
description: "Optional - Path to the zip file of the images."
required: false
default: "temp_upload/images.zip"
imejis-key:
description: "Imejis Key."
required: false
modio-token:
description: "Mod.io Token."
required: true
runs:
using: "composite"
steps:
- name: Set env
shell: bash
run: |
if [[ -z "${{ inputs.version }}" ]]; then
VERSION=$(curl --silent "https://api.github.com/repos/${{ github.repository }}/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
echo "Latest version is $VERSION"
else
VERSION="${{ inputs.version }}"
fi
if [[ -z "${{ inputs.project-url }}" ]]; then
PROJECT_URL="${{ github.server_url }}/${{ github.repository }}"
echo "Project URL not set. Using $PROJECT_URL"
else
PROJECT_URL="${{ inputs.project-url }}"
fi
if [[ -z $VERSION ]]; then
echo "Version not set. Exiting."
exit 1
fi
if [[ -z $PROJECT_URL ]]; then
echo "Project URL not set. Exiting."
exit 1
fi
echo "INPUT_VERSION=$VERSION" >> $GITHUB_ENV
echo "INPUT_PROJECT_URL=$PROJECT_URL" >> $GITHUB_ENV
echo "INPUT_LOGO_PATH=${{ inputs.logo-path }}" >> $GITHUB_ENV
echo "INPUT_IMAGES_PATH=${{ inputs.images-path }}" >> $GITHUB_ENV
echo "INPUT_README_PATH=${{ inputs.readme-path }}" >> $GITHUB_ENV
echo "INPUT_PROJECT_AUTHOR=${{ inputs.project-author }}" >> $GITHUB_ENV
echo "INPUT_PROJECT_NAME=${{ inputs.project-name }}" >> $GITHUB_ENV
echo "INPUT_IMEJIS_GENERATE_IMAGE=${{ inputs.imejis-generate-image }}" >> $GITHUB_ENV
echo "INPUT_IMEJIS_DESIGN_ID=${{ inputs.imejis-design-id }}" >> $GITHUB_ENV
echo "INPUT_IMEJIS_KEY=${{ inputs.imejis-key }}" >> $GITHUB_ENV
echo "INPUT_MODIO_GAME=${{ inputs.modio-game }}" >> $GITHUB_ENV
echo "INPUT_MODIO_MOD=${{ inputs.modio-mod }}" >> $GITHUB_ENV
echo "INPUT_MODIO_TOKEN=${{ inputs.modio-token }}" >> $GITHUB_ENV
echo "INPUT_BACKGROUND_COLOR=${{ inputs.background-color }}" >> $GITHUB_ENV
echo "INPUT_IMAGE_SIZE=${{ inputs.image-size }}" >> $GITHUB_ENV
echo "INPUT_LOGO_UPLOAD_PATH=${{ inputs.logo-upload-path }}" >> $GITHUB_ENV
echo "INPUT_IMAGES_UPLOAD_PATH=${{ inputs.images-upload-path }}" >> $GITHUB_ENV
echo "INPUT_IMAGE_ZIP=${{ inputs.image-zip }}" >> $GITHUB_ENV
- name: Install tools
shell: bash
run: |
sudo apt-get -qq install pandoc jq zip imagemagick -y
- name: Configure ImageMagick
shell: bash
run: |
sudo sed -n -i '/disable ghostscript format types/,+6d' /etc/ImageMagick-6/policy.xml
sudo sed -n -i -E 's/name="memory" value=".+"/name="memory" value="8GiB"/g' /etc/ImageMagick-6/policy.xml
sudo sed -n -i -E 's/name="map" value=".+"/name="map" value="8GiB"/g' /etc/ImageMagick-6/policy.xml
sudo sed -n -i -E 's/name="area" value=".+"/name="area" value="8GiB"/g' /etc/ImageMagick-6/policy.xml
sudo sed -n -i -E 's/name="disk" value=".+"/name="disk" value="8GiB"/g' /etc/ImageMagick-6/policy.xml
- name: Convert README.md to HTML
shell: bash
run: |
pandoc $INPUT_README_PATH -o README.html --quiet
readme_html_single_line=$(cat README.html | tr '\n' ' ')
readme_encoded=$(echo -n "$readme_html_single_line" | jq -s -R -r @uri)
echo "INPUT_README_HTML=$(printf '%q' "$readme_encoded")" >> $GITHUB_ENV
- name: Generate Logo
shell: bash
run: |
if [ -f "$INPUT_LOGO_PATH" ]; then
echo "Logo found at $INPUT_LOGO_PATH. Using existing logo."
elif [ "$INPUT_IMEJIS_GENERATE_IMAGE" == "false" ]; then
echo "No logo found at $INPUT_LOGO_PATH and imejisGenerateImage is false. Downloading basic image."
text="$INPUT_PROJECT_NAME"
colour=${INPUT_BACKGROUND_COLOR//#/}
wget -O "$INPUT_LOGO_PATH" "https://dummyimage.com/$INPUT_IMAGE_SIZE/${colour}/ffffff&text=${text}"
else
echo "Downloading logo from imejis.io"
printf -v JSON_DATA '
{
"project": "%s",
"author": "%s",
"version": "%s"
}' "$INPUT_PROJECT_NAME" "$INPUT_PROJECT_AUTHOR" "$INPUT_VERSION"
curl "https://api.imejis.io/api/designs/$INPUT_IMEJIS_DESIGN_ID" \
--header "dma-api-key: $INPUT_IMEJIS_KEY" \
--header 'Content-Type: application/json' \
--data "$JSON_DATA" \
--output "$INPUT_LOGO_PATH"
fi
- name: Resize images for mod.io
shell: bash
run: |
mkdir -p "$INPUT_IMAGES_UPLOAD_PATH"
rm -rf "$INPUT_IMAGES_UPLOAD_PATH"/*
convert "$INPUT_LOGO_PATH" -resize "$INPUT_IMAGE_SIZE" -background "$INPUT_BACKGROUND_COLOR" -gravity center -extent "$INPUT_IMAGE_SIZE" "$INPUT_LOGO_UPLOAD_PATH"
for file in $INPUT_IMAGES_PATH/*; do
if [[ -f $file ]]; then
filename=$(basename -- "$file")
if file --mime-type "$file" | grep -qE 'image/(jpeg|png|gif|tiff|bmp)'; then
if [[ $file == *.gif ]]; then
convert "${file}[0]" -resize "$INPUT_IMAGE_SIZE" -background "$INPUT_BACKGROUND_COLOR" -gravity center -extent "$INPUT_IMAGE_SIZE" "$INPUT_IMAGES_UPLOAD_PATH/${filename}.png"
else
convert "$file" -resize $INPUT_IMAGE_SIZE -background "$INPUT_BACKGROUND_COLOR" -gravity center -extent $INPUT_IMAGE_SIZE "$INPUT_IMAGES_UPLOAD_PATH/$filename"
fi
fi
fi
done
- name: Zip images
shell: bash
run: |
zip -r -j "$INPUT_IMAGE_ZIP" "$INPUT_IMAGES_UPLOAD_PATH" "$INPUT_LOGO_UPLOAD_PATH"
- name: Remove images from mod.io
shell: bash
run: |
response=$(curl -s -H "Authorization: Bearer $INPUT_MODIO_TOKEN" "https://api.mod.io/v1/games/$INPUT_MODIO_GAME/mods/$INPUT_MODIO_MOD")
jsonResponse=$(echo "$response" | jq -r '.media.images[] | @base64')
for image in $jsonResponse; do
filename=$(echo "$image" | base64 --decode | jq -r '.filename')
curl -X DELETE "https://api.mod.io/v1/games/$INPUT_MODIO_GAME/mods/$INPUT_MODIO_MOD/media" \
-H "Authorization: Bearer $INPUT_MODIO_TOKEN" \
-d "images[]=$filename"
done
- name: Upload images to mod.io
shell: bash
run: |
curl "https://api.mod.io/v1/games/$INPUT_MODIO_GAME/mods/$INPUT_MODIO_MOD/media" \
-H "Authorization: Bearer $INPUT_MODIO_TOKEN" \
-F "logo=@$INPUT_LOGO_UPLOAD_PATH" \
-F "images=@$INPUT_IMAGE_ZIP"
- name: Update modio mod description
shell: bash
run: |
curl -X PUT "https://api.mod.io/v1/games/$INPUT_MODIO_GAME/mods/$INPUT_MODIO_MOD" \
-H "Authorization: Bearer $INPUT_MODIO_TOKEN" \
-d "description=$INPUT_README_HTML" \
-d "homepage_url=$INPUT_PROJECT_URL"