-
Notifications
You must be signed in to change notification settings - Fork 0
179 lines (175 loc) · 7.39 KB
/
build.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
name: Build
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
concurrency:
group: build
cancel-in-progress: false
jobs:
build:
name: Build
runs-on: ubuntu-latest
permissions:
actions: write
packages: write
contents: read
steps:
-
name: Get latest version
run: |
#!/bin/bash
resp=$(curl -sS https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token -d grant_type=refresh_token -d client_id=rhsm-api -d refresh_token=${{ secrets.REDHAT_TOKEN }})
token=$(echo "$resp" | jq --raw-output .access_token)
offset=5000
limit=100
while ! echo "$resp" | grep -q 'name":"virtio-win'
do
resp=$(curl -s -H "Authorization: Bearer $token" -X GET "https://api.access.redhat.com/management/v1/packages/cset/rhel-9-for-x86_64-appstream-beta-rpms/arch/x86_64?limit=$limit&offset=$offset&filter=latest" -H "accept: application/json")
echo "$resp" | grep -q 'count":0}' && exit 34
offset=$((offset+limit))
sleep 0.2
done
pkg=$(echo "$resp" | jq --raw-output '.body[] | select(.name=="virtio-win").version')
release=$(echo "$resp" | jq --raw-output '.body[] | select(.name=="virtio-win").release')
checksum=$(echo "$resp" | jq --raw-output '.body[] | select(.name=="virtio-win").checksum')
pkg=$(echo "$pkg-$release")
resp=$(curl -s -H "Authorization: Bearer $token" -X GET "https://api.access.redhat.com/management/v1/packages/$checksum/download" -H "accept: application/json")
download=$(echo "$resp" | jq --raw-output '.body.href')
latest_tag="${pkg%.el*}"
[ -z "$latest_tag" ] && echo "Tag not found!" && exit 1
echo "Found tag: \"${latest_tag}\""
echo "latest_tag=$latest_tag" >> $GITHUB_ENV
base=$(echo "$latest_tag" | cut -f1 -d"-")
echo "latest_base=$base" >> $GITHUB_ENV
echo "latest_download=$download" >> $GITHUB_ENV
-
name: Check if the tag exists locally
uses: action-pack/tag-exists@v1
id: checkTag
with:
tag: 'v${{ env.latest_tag }}'
-
name: Finish when found
run: |
#!/bin/bash
val="${{ steps.checkTag.outputs.exists }}"
echo "exists=${val}" >> $GITHUB_ENV
-
name: Download package
if: env.exists == 'false'
id: rocky
run: |
#!/bin/bash
wget "${{ env.latest_download }}" -O "/tmp/latest.rpm" -q
-
name: Process package
if: env.exists == 'false'
id: process
run: |
#!/bin/bash
sudo apt install rdfind genisoimage libarchive-tools symlinks
rm -rf /tmp/rpm && mkdir /tmp/rpm
cd /tmp/rpm
rpm2cpio /tmp/latest.rpm | cpio -idmv 2> /dev/null
cp -L /tmp/rpm/usr/share/virtio-win/virtio-win.iso /tmp/latest.iso
rm -rf /tmp/iso && mkdir /tmp/iso
bsdtar -xf "/tmp/latest.iso" -C /tmp/iso/
-
name: Strip unnecessary bloat
if: env.exists == 'false'
id: strip
run: |
#!/bin/bash
cd /tmp/iso
# Remove bloat
sudo rm /tmp/iso/winfsp-*
sudo rm -rf /tmp/iso/spice-vdagent
sudo rm -rf /tmp/iso/qxl-wddm-dod
# Remove tools for other platforms
sudo rm -rf /tmp/iso/i386
sudo rm -rf /tmp/iso/tools
sudo rm -rf /tmp/iso/guest-agent
sudo rm -f /tmp/iso/virtio-win-gt-x86.msi
sudo rm -f /tmp/iso/virtio-win-guest-tools.exe
sudo rm -f /tmp/iso/guest-agent/qemu-ga-i386.msi
# Remove debug symbols
sudo find /tmp/iso -iname "*.pdb" -type f -delete
# Remove binaries for other platforms
sudo find /tmp/iso -iname "x86" -type d -exec rm -rf {} +
sudo find /tmp/iso -iname "arm64" -type d -exec rm -rf {} +
# Remove empty directories
sudo find . -type d -empty -delete
-
name: Add some legacy drivers
if: env.exists == 'false'
id: legacy
run: |
#!/bin/bash
url="https://github.com/qemus/virtiso-whql/releases/download/v1.9.40-0/legacy.zip"
wget "$url" -O "/tmp/legacy.zip" -q
sudo unzip -o /tmp/legacy.zip -d /tmp/iso >/dev/null
-
name: Create symbolic links
if: env.exists == 'false'
id: symlinks
run: |
#!/bin/bash
sudo cp -lpr /tmp/iso/viogpudo/w8.1 /tmp/iso/viogpudo/w8
# WDF installer DLL
sudo cp -lp /tmp/iso/vioserial/w7/amd64/WdfCoInstaller01009.dll /tmp/iso/Balloon/xp/amd64/WdfCoInstaller01009.dll
sudo cp -lp /tmp/iso/vioserial/w7/amd64/WdfCoInstaller01009.dll /tmp/iso/Balloon/2k3/amd64/WdfCoInstaller01009.dll
sudo cp -lp /tmp/iso/vioserial/w7/amd64/WdfCoInstaller01009.dll /tmp/iso/Balloon/2k8/amd64/WdfCoInstaller01009.dll
sudo cp -lp /tmp/iso/vioserial/w7/amd64/WdfCoInstaller01009.dll /tmp/iso/pvpanic/2k8/amd64/WdfCoInstaller01009.dll
sudo cp -lp /tmp/iso/vioserial/w7/amd64/WdfCoInstaller01009.dll /tmp/iso/vioserial/xp/amd64/WdfCoInstaller01009.dll
sudo cp -lp /tmp/iso/vioserial/w7/amd64/WdfCoInstaller01009.dll /tmp/iso/vioserial/2k3/amd64/WdfCoInstaller01009.dll
sudo cp -lp /tmp/iso/vioserial/w7/amd64/WdfCoInstaller01009.dll /tmp/iso/vioserial/2k8/amd64/WdfCoInstaller01009.dll
sudo rdfind -removeidentinode false -makehardlinks true /tmp/iso/
symlinks -orc /tmp/iso
-
name: Build minified ISO
if: env.exists == 'false'
id: build
run: |
#!/bin/bash
cd /tmp/iso
genisoimage -o /tmp/virtio-win-${{ env.latest_base }}.iso -r -iso-level 4 -input-charset iso8859-1 -V "virtio-win-${{ env.latest_base }}" /tmp/iso
sudo rm /tmp/iso/*.msi
echo & echo
tar -C /tmp/iso -cvzf /tmp/virtio-win-${{ env.latest_base }}.tar.gz * >/dev/null
echo & echo
XZ_OPT=-9 tar -C /tmp/iso -Jcvf /tmp/virtio-win-${{ env.latest_base }}.tar.xz * >/dev/null
-
name: Checkout
if: env.exists == 'false'
uses: actions/checkout@v4
with:
fetch-depth: 0
-
name: Create a release
if: env.exists == 'false'
uses: action-pack/github-release@v2
with:
tag: "v${{ env.latest_tag }}"
title: "v${{ env.latest_base }}"
token: ${{ secrets.REPO_ACCESS_TOKEN }}
-
name: Update release
if: env.exists == 'false'
uses: AButler/upload-release-assets@v3.0
with:
files: '/tmp/virtio-win-${{ env.latest_base }}.*'
release-tag: "v${{ env.latest_tag }}"
repo-token: ${{ secrets.REPO_ACCESS_TOKEN }}
-
name: Send mail
if: env.exists == 'false'
uses: action-pack/send-mail@v1
with:
to: ${{secrets.MAILTO}}
from: Github Actions <${{secrets.MAILTO}}>
connection_url: ${{secrets.MAIL_CONNECTION}}
subject: Build of ${{ github.event.repository.name }} v${{ env.latest_tag }} completed
body: |
The build job of ${{ github.event.repository.name }} v${{ env.latest_tag }} was completed successfully!
See https://github.com/${{ github.repository }}/actions for more information.