-
Notifications
You must be signed in to change notification settings - Fork 38
151 lines (134 loc) · 5.65 KB
/
build.yaml
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
---
name: Build kubeplay packages
on:
push:
tag:
- 'v*'
env:
IMAGE_REGISTRY: "ghcr.io"
REGISTRY_USER: "${{ github.repository_owner }}"
REGISTRY_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
IMAGE_REPO: "ghcr.io/${{ github.repository_owner }}"
KUBESPRAY_IMAGE: "ghcr.io/${{ github.repository_owner }}/kubespray"
KUBEPLAY_IMAGE_REPO: "ghcr.io/${{ github.repository_owner }}/kubeplay"
KUBESPRAY_FILES_IMAGE: "ghcr.io/${{ github.repository_owner }}/kubespray-files"
KUBESPRAY_IMAGES_IMAGE: "ghcr.io/${{ github.repository_owner }}/kubespray-images"
jobs:
build-package:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
include:
- name: os-packages
image_name: os-packages-all-os
package_name: resources
- name: centos-7
image_name: os-packages-centos7
package_name: kubeplay
- name: centos-8
image_name: os-packages-centos8
package_name: kubeplay
- name: fedora-33
image_name: os-packages-fedora33
package_name: kubeplay
- name: fedora-34
image_name: os-packages-fedora34
package_name: kubeplay
- name: debian-9
image_name: os-packages-debian9
package_name: kubeplay
- name: debian-10
image_name: os-packages-debian10
package_name: kubeplay
- name: ubuntu-1804
image_name: os-packages-ubuntu1804
package_name: kubeplay
- name: ubuntu-2004
image_name: os-packages-ubuntu2004
package_name: kubeplay
steps:
- name: Checkout
uses: actions/checkout@v2
with:
# fetch all git repo tag for define image tag
fetch-depth: 0
- name: Checkout kubespray repo
uses: actions/checkout@v2
with:
ref: main
fetch-depth: 0
path: kubespray
repository: ${{ github.repository_owner }}/kubespray
- name: Checkout os-packages repo
uses: actions/checkout@v2
with:
ref: main
fetch-depth: 0
path: os-packages
repository: ${{ github.repository_owner }}/os-packages
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Log in to GitHub Docker Registry
uses: docker/login-action@v1
with:
registry: ${{ env.IMAGE_REGISTRY }}
username: ${{ env.REGISTRY_USER }}
password: ${{ env.REGISTRY_TOKEN }}
- name: Prepare for build images
shell: bash
run: |
git describe --tags --always | sed 's/^/IMAGE_TAG=/' >> $GITHUB_ENV
cd kubespray && git describe --tags --always | sed 's/^/KUBESPRAY_VERSION=/' >> $GITHUB_ENV && cd ..
cd os-packages && git describe --tags --always | sed 's/^/OS_PACKAGE_REPO_TAG=/' >> $GITHUB_ENV && cd ..
cp -rf kubespray/config config/kubespray && rm -rf kubespray os-packages
source $GITHUB_ENV
echo "" >> Dockerfile
echo "COPY --from=${IMAGE_REPO}/${{ matrix.image_name }}:${OS_PACKAGE_REPO_TAG} / /" >> Dockerfile
echo "COPY --from=${KUBESPRAY_FILES_IMAGE}:${KUBESPRAY_VERSION} / /resources/nginx" >> Dockerfile
echo "COPY --from=${KUBESPRAY_IMAGES_IMAGE}:${KUBESPRAY_VERSION} / /resources/registry" >> Dockerfile
sed -n 's|image: nginx:|NGINX_VERSION=|p' compose.yaml | tr -d ' ' >> $GITHUB_ENV
sed -n 's|image: registry:|RERGISRRY_VERSION=|p' compose.yaml | tr -d ' ' >> $GITHUB_ENV
if [[ ${{ matrix.package_name }} == "resources" ]]; then
echo -e "FROM scratch\nCOPY --from=${IMAGE_REPO}/${{ matrix.image_name }}:${OS_PACKAGE_REPO_TAG} / /" > Dockerfile
fi
- name: Build kubeplay image to local
uses: docker/build-push-action@v2
with:
context: .
file: Dockerfile
platforms: linux/amd64,linux/arm64
build-args: |
NGINX_VERSION=${{ env.NGINX_VERSION }}
RERGISRRY_VERSION=${{ env.RERGISRRY_VERSION }}
KUBESPRAY_IMAGE=${{ env.KUBESPRAY_IMAGE }}
KUBESPRAY_VERSION=${{ env.KUBESPRAY_VERSION }}
outputs: type=local,dest=./
- name: Prepare for upload package
shell: bash
run: |
rm -rf linux_{amd64,arm64}/{Dockerfile,LICENSE}
mv linux_amd64 kubeplay
tar -I pigz -cf ${{ matrix.package_name }}-${{ env.IMAGE_TAG }}-${{ matrix.name }}-amd64.tar.gz kubeplay --remove-files
mv linux_arm64 kubeplay
tar -I pigz -cf ${{ matrix.package_name }}-${{ env.IMAGE_TAG }}-${{ matrix.name }}-arm64.tar.gz kubeplay --remove-files
sha256sum ${{ matrix.package_name }}-${{ env.IMAGE_TAG }}-${{ matrix.name }}-{amd64,arm64}.tar.gz > ${{ matrix.package_name }}-${{ env.IMAGE_TAG }}-${{ matrix.name }}.sha256sum.txt
- name: Release and upload packages
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: |
${{ matrix.package_name }}-${{ env.IMAGE_TAG }}-${{ matrix.name }}.sha256sum.txt
${{ matrix.package_name }}-${{ env.IMAGE_TAG }}-${{ matrix.name }}-amd64.tar.gz
${{ matrix.package_name }}-${{ env.IMAGE_TAG }}-${{ matrix.name }}-arm64.tar.gz