1284882Sgjb#
2284882Sgjb# $FreeBSD: stable/10/release/Makefile.gce 334963 2018-06-11 17:22:27Z gjb $
3284882Sgjb#
4284882Sgjb#
5284882Sgjb# Makefile for uploading Google Compute Engine disk images.
6284882Sgjb#
7284882Sgjb
8284882SgjbGCE_IMG?=		${.OBJDIR}/gce.raw
9284882SgjbGCE_UPLOAD_TGTS=	gce-check-depends \
10284882Sgjb			gce-do-package \
11284882Sgjb			gce-do-upload
12284882Sgjb# I do not yet have a better way to deal with the "must be run interactively"
13284882Sgjb# thing, so this is a fail-safe "do not do anything."
14284882Sgjb.if !defined(GCE_LOGIN_SKIP) || empty(GCE_LOGIN_SKIP)
15284882SgjbGCE_UPLOAD_TGTS=	gce-do-login
16284882Sgjb.endif
17284882SgjbCLEANFILES+=		${GCE_UPLOAD_TGTS}
18284882Sgjb
19284882SgjbGCE_BUCKET?=
20333608SgjbGCE_LICENSE?=
21284882Sgjb
22331876Sgjb.if !defined(GCE_FAMILY) || empty(GCE_FAMILY)
23331876SgjbGCE_FAMILY=		${TYPE:tl}-${REVISION:S,.,-,}
24331876Sgjb.endif
25331876Sgjb
26284882Sgjb.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
27334963Sgjb_SNAPSHOT_DATE!=	date +%Y%m%d
28334963SgjbSNAPSHOT_DATE=		-v${_SNAPSHOT_DATE}
29331876SgjbGCE_FAMILY_SUFX=	-snap
30284882Sgjb.endif
31284882Sgjb
32284882Sgjb# Really?  Uppercase characters are not allowed?  Sigh...
33284882Sgjb# And don't even get me started on the '.'.
34284882SgjbGCE_TARGET:=		${OSRELEASE:S,.raw,,:tl:S,.,-,g}${SNAPSHOT_DATE}
35284882Sgjb
36284882Sgjbgce-upload:		${GCE_UPLOAD_TGTS}
37284882Sgjb
38284882Sgjbgce-check-depends:
39284882Sgjb.for VAR in _BUCKET
40284882Sgjb. if !defined(GCE${VAR}) || empty(GCE${VAR})
41284882Sgjb	@echo "Variable GCE${VAR} cannot be empty."
42284882Sgjb	@false
43284882Sgjb. endif
44284882Sgjb.endfor
45303917Sgjb.if !exists(/usr/local/bin/gcloud)
46285049Sgjb. if !exists(${PORTSDIR}/net/google-cloud-sdk/Makefile)
47284882Sgjb.  if !exists(/usr/local/sbin/pkg-static)
48284882Sgjb	env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
49284882Sgjb.  endif
50285049Sgjb	env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk
51284882Sgjb. else
52285049Sgjb	make -C ${PORTSDIR}/net/google-cloud-sdk BATCH=1 all install clean
53284882Sgjb. endif
54284882Sgjb.endif
55284882Sgjb
56284882Sgjbgce-do-package:
57284882Sgjb	@# Yes, really...  Sigh.
58284882Sgjb	cd ${.OBJDIR} && mv gce.raw disk.raw
59284882Sgjb	cd ${.OBJDIR} && tar --format=gnutar -zcf \
60284882Sgjb		${GCE_TARGET:S,${.OBJDIR}/,,}.tar.gz disk.raw
61284882Sgjb	cd ${.OBJDIR} && mv disk.raw gce.raw
62284882Sgjb	touch ${.OBJDIR}/${.TARGET}
63284882Sgjb
64284882Sgjbgce-do-login:
65284882Sgjb	@echo "This requires human interaction, which is not yet supported."
66284882Sgjb	@true
67284882Sgjb
68284882Sgjbgce-do-upload:
69284882Sgjb	@# Fallthrough in case the bucket already exists.
70284882Sgjb	/usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true
71284882Sgjb	/usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET}.tar.gz \
72284882Sgjb		gs://${GCE_BUCKET}/
73303917Sgjb	/usr/local/bin/gcloud compute images create ${GCE_TARGET} \
74333608Sgjb		--family=${GCE_FAMILY}${GCE_FAMILY_SUFX} ${GCE_LICENSE} \
75303917Sgjb		--source-uri gs://${GCE_BUCKET}/${GCE_TARGET}.tar.gz
76284882Sgjb	touch ${.OBJDIR}/${.TARGET}
77284882Sgjb
78