bazelbuild / rules_docker

Rules for building and handling Docker images with Bazel
Apache License 2.0
1.07k stars 692 forks source link

Bad timezone for Marocco with @go_image_base//image #2246

Open engineering-this opened 1 year ago

engineering-this commented 1 year ago

🐞 bug report

Affected Rule

The issue is caused by the rule: go_image

Is this a regression?

Not regression

Description

A clear and concise description of the problem... I'm not really sure if its the right place to report issues related to image itself, however here this image is referenced here a lot, so I assume either you are responsible for image, or at least you can forward to however is. Golang resolves timezones using system files. In case of `@go_image_base//image` file `/usr/share/zoneinfo/` is used, and it return wrong date. According to wikipedia Marocco changed it's DST rules in 2018: https://en.wikipedia.org/wiki/Daylight_saving_time_in_Morocco According to https://www.timeanddate.com/time/zone/morocco/casablanca for `2023-04-26` Marocco uses UTC+01, meanwhile go program inside docker container with base as above resolves this date as UTC+00. ## 🔬 Minimal Reproduction
package main

import (
    "fmt"
    "time"
)

func main() {
    loc, err := time.LoadLocation("Africa/Casablanca")
    if err != nil || loc == nil {
        panic(err)
    }
    t, err := time.ParseInLocation("2006-01-02 15:04", "2023-04-26 22:05", loc)
    if err != nil {
        panic(err)
    }
    fmt.Printf("time: %s\n", t)
}
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
load("@io_bazel_rules_docker//container:container.bzl", "container_push")
load("@io_bazel_rules_docker//go:image.bzl", "go_image")

go_library(
    name = "go_default_library",
    srcs = [
        "main.go",
    ],
    importpath = "github.com/FatNinjas/SkyLane/src/scrapers/temp",
    visibility = ["//visibility:private"],
)

go_binary(
    name = "bin-dev",
    embed = [":go_default_library"],
    visibility = ["//visibility:public"],
)

go_image(
    name = "dev-img",
    base = "@go_image_base//image",
    binary = ":bin-dev",
)

container_push(
    name = "push-dev",
    format = "Docker",
    image = ":dev-img",
    registry = "gcr.io",
    repository = "my-repo/test",
    tag = "latest",
)

When running file locally correct timezone is printed:

2023-04-26 22:05:00 +0100 +01

However when running it inside docker container using base = "@go_image_base//image" wrong timezone is printed: 2023-04-26 22:05:00 +0000 +00

🔥 Exception or Error






🌍 Your Environment

Operating System:

  
lsb_release -a               
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.6 LTS
Release:        20.04
Codename:       focal
  

Output of bazel version:

  
Build label: 5.1.1
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Apr 8 15:49:48 2022 (1649432988)
Build timestamp: 1649432988
Build timestamp as int: 1649432988
  

Rules_docker version:

  

  

Anything else relevant?