Challenges with gcloud Build
Whenever I try to submit a build using gcloud, I encounter an error. Oddly enough, the build works perfectly fine on my local machine and even when creating a docker image locally. Despite my initial assumption that a file might not be correctly copied into the tarball, my debugging efforts suggest otherwise.
The Error I'm Facing:
An issue arises with the type: 'Service' parameter implicitly has an 'any' type
This problem stems from code resembling the following snippet:
const {
firestore,
collections: {
rentals: { services },
},
} = useFirebaseCtx();
const newServiceEvents = services.map((service, index) => {
...
})
The function useFirebaseCtx is meticulously typed (without any implicit 'any' types within it)
The variable services is explicitly defined as
Organizations.Rentals.Services.Flat[]
Debugging Attempts So Far
No errors are reported when running
yarn run eslint . --ext .js,.jsx,.ts,.tsx
No errors occur during the execution of
(image builds successfully)docker build -t my-docker-image-name .
A check with
confirms that the type folder is indeed included in the tarball uploadgcloud meta list-files-for-upload
Summarized output of
gcloud meta list-files-for-upload
:
...
types/organizations/index.d.ts <- this is the file containing the type definition
...
Additional Configuration Files
.dockerignore
Dockerfile
.dockerignore
.gitignore
node_modules
npm-debug.log
README.md
.next
functions
fire*
jest*
__tests__
.gcloudignore
.gcloudignore
.git
.gitignore
node_modules
npm-debug.log
README.md
.next
functions
fire*
jest*
__tests__
!.env*
.env.development*
Dockerfile
# Install dependencies only when needed
FROM node:14-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
# COPY ./private/sitemap/generate-sitemap.mjs ./private/sitemap/generate-sitemap.mjs
RUN yarn install --frozen-lockfile
# Rebuild the source code only when needed
FROM node:14-alpine AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/node_modules ./node_modules
ENV NODE_ENV production
# Failing here
RUN yarn build
# Production image, copy all the files and run next
FROM node:14-alpine AS runner
WORKDIR /app
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
# You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/.env* ./
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/next.config.js ./next.config.js
USER nextjs
EXPOSE 3000
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry.
# ENV NEXT_TELEMETRY_DISABLED 1
CMD ["yarn", "start"]