73bfbf4b92
This allows for GCE consumers to easily detect the latest major version of FreeBSD when using the gcloud command line utility. To ensure snapshot builds do not conflict with release-style builds (ALPHA, BETA, RC, RELEASE), the '-snap' suffix is appended to the GCE image family name. MFC after: 3 days Sponsored by: The FreeBSD Foundation
76 lines
2.1 KiB
Makefile
76 lines
2.1 KiB
Makefile
#
|
|
# $FreeBSD$
|
|
#
|
|
#
|
|
# Makefile for uploading Google Compute Engine disk images.
|
|
#
|
|
|
|
GCE_IMG?= ${.OBJDIR}/gce.raw
|
|
GCE_UPLOAD_TGTS= gce-check-depends \
|
|
gce-do-package \
|
|
gce-do-upload
|
|
# I do not yet have a better way to deal with the "must be run interactively"
|
|
# thing, so this is a fail-safe "do not do anything."
|
|
.if !defined(GCE_LOGIN_SKIP) || empty(GCE_LOGIN_SKIP)
|
|
GCE_UPLOAD_TGTS= gce-do-login
|
|
.endif
|
|
CLEANFILES+= ${GCE_UPLOAD_TGTS}
|
|
|
|
GCE_BUCKET?=
|
|
|
|
.if !defined(GCE_FAMILY) || empty(GCE_FAMILY)
|
|
GCE_FAMILY= ${TYPE:tl}-${REVISION:S,.,-,}
|
|
.endif
|
|
|
|
.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
|
|
SNAPSHOT_DATE!= date +-%Y-%m-%d
|
|
GCE_FAMILY_SUFX= -snap
|
|
.endif
|
|
|
|
# Really? Uppercase characters are not allowed? Sigh...
|
|
# And don't even get me started on the '.'.
|
|
GCE_TARGET:= ${OSRELEASE:S,.raw,,:tl:S,.,-,g}${SNAPSHOT_DATE}
|
|
|
|
gce-upload: ${GCE_UPLOAD_TGTS}
|
|
|
|
gce-check-depends:
|
|
.for VAR in _BUCKET
|
|
. if !defined(GCE${VAR}) || empty(GCE${VAR})
|
|
@echo "Variable GCE${VAR} cannot be empty."
|
|
@false
|
|
. endif
|
|
.endfor
|
|
.if !exists(/usr/local/bin/gcloud)
|
|
. if !exists(${PORTSDIR}/net/google-cloud-sdk/Makefile)
|
|
. if !exists(/usr/local/sbin/pkg-static)
|
|
env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
|
|
. endif
|
|
env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk
|
|
. else
|
|
make -C ${PORTSDIR}/net/google-cloud-sdk BATCH=1 all install clean
|
|
. endif
|
|
.endif
|
|
|
|
gce-do-package:
|
|
@# Yes, really... Sigh.
|
|
cd ${.OBJDIR} && mv gce.raw disk.raw
|
|
cd ${.OBJDIR} && tar --format=gnutar -zcf \
|
|
${GCE_TARGET:S,${.OBJDIR}/,,}.tar.gz disk.raw
|
|
cd ${.OBJDIR} && mv disk.raw gce.raw
|
|
touch ${.OBJDIR}/${.TARGET}
|
|
|
|
gce-do-login:
|
|
@echo "This requires human interaction, which is not yet supported."
|
|
@true
|
|
|
|
gce-do-upload:
|
|
@# Fallthrough in case the bucket already exists.
|
|
/usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true
|
|
/usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET}.tar.gz \
|
|
gs://${GCE_BUCKET}/
|
|
/usr/local/bin/gcloud compute images create ${GCE_TARGET} \
|
|
--family=${GCE_FAMILY}${GCE_FAMILY_SUFX} \
|
|
--source-uri gs://${GCE_BUCKET}/${GCE_TARGET}.tar.gz
|
|
touch ${.OBJDIR}/${.TARGET}
|
|
|