xref: /freebsd/release/Makefile.gce (revision 9978553d0199e7ec0bdd1c44fc7f6c7b0c11e43b)
1#
2# Makefile for uploading Google Compute Engine disk images.
3#
4
5GCE_UPLOAD_TGTS=	gce-check-depends \
6			gce-do-package \
7			gce-do-upload
8# I do not yet have a better way to deal with the "must be run interactively"
9# thing, so this is a fail-safe "do not do anything."
10.if !defined(GCE_LOGIN_SKIP) || empty(GCE_LOGIN_SKIP)
11GCE_UPLOAD_TGTS=	gce-do-login
12.endif
13CLEANFILES+=		${GCE_UPLOAD_TGTS}
14
15GCE_BUCKET?=
16GCE_LICENSE?=
17
18.if ${TARGET_ARCH} == "amd64"
19GCE_ARCH=		X86_64
20.elif ${TARGET_ARCH} == "aarch64"
21GCE_ARCH=		ARM64
22.else
23GCE_ARCH=		UNSUPPORTED_IN_GCE
24.endif
25
26.if !defined(GCE_FAMILY) || empty(GCE_FAMILY)
27GCE_FAMILY=		${TYPE:tl}-${REVISION:S,.,-,}-${TARGET}
28.endif
29
30.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
31SNAPSHOT_DATE=		-v${BUILDDATE}
32GCE_FAMILY_SUFX=	-snap
33.endif
34
35gce-upload:		${GCE_UPLOAD_TGTS}
36
37gce-check-depends:
38.for VAR in _BUCKET
39. if !defined(GCE${VAR}) || empty(GCE${VAR})
40	@echo "Variable GCE${VAR} cannot be empty."
41	@false
42. endif
43.endfor
44.if !exists(/usr/local/bin/gcloud)
45. if !exists(${PORTSDIR}/net/google-cloud-sdk/Makefile)
46.  if !exists(/usr/local/sbin/pkg-static)
47	env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
48.  endif
49	env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk \
50		lang/python
51. else
52	env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/google-cloud-sdk \
53	    BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
54	    all install clean
55	env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/lang/python \
56	    BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
57	    all install clean
58. endif
59.endif
60
61gce-do-login:
62	@echo "This requires human interaction, which is not yet supported."
63	@true
64
65.for _FS in ${GCE_FSLIST}
66GCE_IMG_${_FS}=		${.OBJDIR}/gce.${_FS}.raw
67# Really?  Uppercase characters are not allowed?  Sigh...
68# And don't even get me started on the '.'.
69GCE_TARGET_${_FS}=	${OSRELEASE:S,.raw,,:tl:S,.,-,g}-${_FS}${SNAPSHOT_DATE}
70
71gce-do-package-${_FS}:
72	@# Yes, really...  Sigh.
73	cd ${.OBJDIR} && mv ${GCE_IMG_${_FS}} disk.raw
74	cd ${.OBJDIR} && tar --format=gnutar -zcf \
75		${GCE_TARGET_${_FS}:S,${.OBJDIR}/,,}.tar.gz disk.raw
76	cd ${.OBJDIR} && mv disk.raw ${GCE_IMG_${_FS}}
77	touch ${.OBJDIR}/${.TARGET}
78
79gce-do-upload-${_FS}:
80	@# Fallthrough in case the bucket already exists.
81	/usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true
82	/usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET_${_FS}}.tar.gz \
83		gs://${GCE_BUCKET}/
84	/usr/local/bin/gcloud compute images create ${GCE_TARGET_${_FS}} \
85		--architecture=${GCE_ARCH} \
86		--family=${GCE_FAMILY}-${_FS}${GCE_FAMILY_SUFX} ${GCE_LICENSE} \
87		--guest-os-features=GVNIC,UEFI_COMPATIBLE \
88		--source-uri gs://${GCE_BUCKET}/${GCE_TARGET_${_FS}}.tar.gz
89	touch ${.OBJDIR}/${.TARGET}
90.endfor
91
92gce-do-package: gce-do-package-${VMFS}
93gce-do-upload: gce-do-upload-${VMFS}
94