xref: /freebsd/release/Makefile.gce (revision 4757b351ea9d59d71d4a38b82506d2d16fcd560d)
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 !defined(GCE_FAMILY) || empty(GCE_FAMILY)
19GCE_FAMILY=		${TYPE:tl}-${REVISION:S,.,-,}
20.endif
21
22.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
23SNAPSHOT_DATE=		-v${BUILDDATE}
24GCE_FAMILY_SUFX=	-snap
25.endif
26
27gce-upload:		${GCE_UPLOAD_TGTS}
28
29gce-check-depends:
30.for VAR in _BUCKET
31. if !defined(GCE${VAR}) || empty(GCE${VAR})
32	@echo "Variable GCE${VAR} cannot be empty."
33	@false
34. endif
35.endfor
36.if !exists(/usr/local/bin/gcloud)
37. if !exists(${PORTSDIR}/net/google-cloud-sdk/Makefile)
38.  if !exists(/usr/local/sbin/pkg-static)
39	env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
40.  endif
41	env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk \
42		lang/python
43. else
44	env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/google-cloud-sdk \
45	    BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
46	    all install clean
47	env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/lang/python \
48	    BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
49	    all install clean
50. endif
51.endif
52
53gce-do-login:
54	@echo "This requires human interaction, which is not yet supported."
55	@true
56
57.for _FS in ${GCE_FSLIST}
58GCE_IMG_${_FS}=		${.OBJDIR}/gce.${_FS}.raw
59# Really?  Uppercase characters are not allowed?  Sigh...
60# And don't even get me started on the '.'.
61GCE_TARGET_${_FS}=	${OSRELEASE:S,.raw,,:tl:S,.,-,g}-${_FS}${SNAPSHOT_DATE}
62
63gce-do-package-${_FS}:
64	@# Yes, really...  Sigh.
65	cd ${.OBJDIR} && mv ${GCE_IMG_${_FS}} disk.raw
66	cd ${.OBJDIR} && tar --format=gnutar -zcf \
67		${GCE_TARGET_${_FS}:S,${.OBJDIR}/,,}.tar.gz disk.raw
68	cd ${.OBJDIR} && mv disk.raw ${GCE_IMG_${_FS}}
69	touch ${.OBJDIR}/${.TARGET}
70
71gce-do-upload-${_FS}:
72	@# Fallthrough in case the bucket already exists.
73	/usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true
74	/usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET_${_FS}}.tar.gz \
75		gs://${GCE_BUCKET}/
76	/usr/local/bin/gcloud compute images create ${GCE_TARGET_${_FS}} \
77		--family=${GCE_FAMILY}${GCE_FAMILY_SUFX} ${GCE_LICENSE} \
78		--guest-os-features=GVNIC,UEFI_COMPATIBLE \
79		--source-uri gs://${GCE_BUCKET}/${GCE_TARGET_${_FS}}.tar.gz
80	touch ${.OBJDIR}/${.TARGET}
81.endfor
82
83gce-do-package: gce-do-package-${VMFS}
84gce-do-upload: gce-do-upload-${VMFS}
85