// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package history stores historical data for the Go project.
package history

import (
	"fmt"
	"html/template"
	"time"
)

// Release contains release metadata and a summary of release content.
type Release struct {
	// Release metadata.
	Date     Date // Date of the release.
	Security bool // Security release.
	Future   bool // Future is whether the release hasn't happened yet.

	// Release content summary.
	Quantifier    string          // Optional quantifier. Empty string for unspecified amount of fixes (typical), "a" for a single fix, "two", "three" for multiple fixes, etc.
	Components    []template.HTML // Components involved. For example, "cgo", "the <code>go</code> command", "the runtime", etc.
	Packages      []string        // Packages involved. For example, "net/http", "crypto/x509", etc.
	More          template.HTML   // Additional release content.
	CustomSummary template.HTML   // CustomSummary, if non-empty, replaces the entire release content summary with custom HTML.
}

// Releases summarizes the changes between official stable releases of Go.
//
// It contains entries for releases of Go 1.9 and newer.
// Older releases are listed in doc/devel/release.html.
var Releases = map[GoVer]Release{
	{1, 14, 3}: {
		Date: Date{2020, 5, 14},

		Components: []template.HTML{"cgo", "the compiler", "the runtime"},
		Packages:   []string{"go/doc", "math/big"},
	},
	{1, 13, 11}: {
		Date: Date{2020, 5, 14},

		Components: []template.HTML{"the compiler"},
	},

	{1, 14, 2}: {
		Date: Date{2020, 4, 8},

		Components: []template.HTML{"cgo", "the go command", "the runtime"},
		Packages:   []string{"os/exec", "testing"},
	},
	{1, 13, 10}: {
		Date: Date{2020, 4, 8},

		Components: []template.HTML{"the go command", "the runtime"},
		Packages:   []string{"os/exec", "time"},
	},

	{1, 14, 1}: {
		Date: Date{2020, 3, 19},

		Components: []template.HTML{"the go command", "tools", "the runtime"},
	},
	{1, 13, 9}: {
		Date: Date{2020, 3, 19},

		Components: []template.HTML{"the go command", "tools", "the runtime", "the toolchain"},
		Packages:   []string{"crypto/cypher"},
	},

	{1, 14, 0}: {
		Date: Date{2020, 2, 25},
	},

	{1, 13, 8}: {
		Date: Date{2020, 2, 12},

		Components: []template.HTML{"the runtime"},
		Packages:   []string{"crypto/x509", "net/http"},
	},
	{1, 12, 17}: {
		Date: Date{2020, 2, 12},

		Quantifier: "a",
		Components: []template.HTML{"the runtime"},
	},

	{1, 13, 7}: {
		Date:     Date{2020, 1, 28},
		Security: true,

		Quantifier: "two",
		Packages:   []string{"crypto/x509"},
	},
	{1, 12, 16}: {
		Date:     Date{2020, 1, 28},
		Security: true,

		Quantifier: "two",
		Packages:   []string{"crypto/x509"},
	},

	{1, 13, 6}: {
		Date: Date{2020, 1, 9},

		Components: []template.HTML{"the runtime"},
		Packages:   []string{"net/http"},
	},
	{1, 12, 15}: {
		Date: Date{2020, 1, 9},

		Components: []template.HTML{"the runtime"},
		Packages:   []string{"net/http"},
	},

	{1, 13, 5}: {
		Date: Date{2019, 12, 4},

		Components: []template.HTML{"the go command", "the runtime", "the linker"},
		Packages:   []string{"net/http"},
	},
	{1, 12, 14}: {
		Date: Date{2019, 12, 4},

		Quantifier: "a",
		Components: []template.HTML{"the runtime"},
	},

	{1, 13, 4}: {
		Date: Date{2019, 10, 31},

		Packages: []string{"net/http", "syscall"},
		More: `It also fixes an issue on macOS 10.15 Catalina
where the non-notarized installer and binaries were being
<a href="https://golang.org/issue/34986">rejected by Gatekeeper</a>.`,
	},
	{1, 12, 13}: {
		Date: Date{2019, 10, 31},

		CustomSummary: `fixes an issue on macOS 10.15 Catalina
where the non-notarized installer and binaries were being
<a href="https://golang.org/issue/34986">rejected by Gatekeeper</a>.
Only macOS users who hit this issue need to update.`,
	},

	{1, 13, 3}: {
		Date: Date{2019, 10, 17},

		Components: []template.HTML{"the go command", "the toolchain", "the runtime"},
		Packages:   []string{"syscall", "net", "net/http", "crypto/ecdsa"},
	},
	{1, 12, 12}: {
		Date: Date{2019, 10, 17},

		Components: []template.HTML{"the go command", "runtime"},
		Packages:   []string{"syscall", "net"},
	},

	{1, 13, 2}: {
		Date:     Date{2019, 10, 17},
		Security: true,

		Components: []template.HTML{"the compiler"},
		Packages:   []string{"crypto/dsa"},
	},
	{1, 12, 11}: {
		Date:     Date{2019, 10, 17},
		Security: true,

		Packages: []string{"crypto/dsa"},
	},

	{1, 13, 1}: {
		Date:     Date{2019, 9, 25},
		Security: true,

		Packages: []string{"net/http", "net/textproto"},
	},
	{1, 12, 10}: {
		Date:     Date{2019, 9, 25},
		Security: true,

		Packages: []string{"net/http", "net/textproto"},
	},

	{1, 13, 0}: {
		Date: Date{2019, 9, 3},
	},

	{1, 12, 9}: {
		Date: Date{2019, 8, 15},

		Components: []template.HTML{"the linker"},
		Packages:   []string{"os", "math/big"},
	},

	{1, 12, 8}: {
		Date:     Date{2019, 8, 13},
		Security: true,

		Packages: []string{"net/http", "net/url"},
	},
	{1, 11, 13}: {
		Date:     Date{2019, 8, 13},
		Security: true,

		Packages: []string{"net/http", "net/url"},
	},

	{1, 12, 7}: {
		Date: Date{2019, 7, 8},

		Components: []template.HTML{"cgo", "the compiler", "the linker"},
	},
	{1, 11, 12}: {
		Date: Date{2019, 7, 8},

		Components: []template.HTML{"the compiler", "the linker"},
	},

	{1, 12, 6}: {
		Date: Date{2019, 6, 11},

		Components: []template.HTML{"the compiler", "the linker", "the go command"},
		Packages:   []string{"crypto/x509", "net/http", "os"},
	},
	{1, 11, 11}: {
		Date: Date{2019, 6, 11},

		Quantifier: "a",
		Packages:   []string{"crypto/x509"},
	},

	{1, 12, 5}: {
		Date: Date{2019, 5, 6},

		Components: []template.HTML{"the compiler", "the linker", "the go command", "the runtime"},
		Packages:   []string{"os"},
	},
	{1, 11, 10}: {
		Date: Date{2019, 5, 6},

		Components: []template.HTML{"the runtime", "the linker"},
	},

	{1, 12, 4}: {
		Date: Date{2019, 4, 11},

		CustomSummary: `fixes an issue where using the prebuilt binary
releases on older versions of GNU/Linux
<a href="https://golang.org/issues/31293">led to failures</a>
when linking programs that used cgo.
Only Linux users who hit this issue need to update.`,
	},
	{1, 11, 9}: {
		Date: Date{2019, 4, 11},

		CustomSummary: `fixes an issue where using the prebuilt binary
releases on older versions of GNU/Linux
<a href="https://golang.org/issues/31293">led to failures</a>
when linking programs that used cgo.
Only Linux users who hit this issue need to update.`,
	},

	{1, 12, 3}: {
		Date: Date{2019, 4, 8},

		CustomSummary: `was accidentally released without its
intended fix. It is identical to go1.12.2, except for its version
number. The intended fix is in go1.12.4.`,
	},
	{1, 11, 8}: {
		Date: Date{2019, 4, 8},

		CustomSummary: `was accidentally released without its
intended fix. It is identical to go1.11.7, except for its version
number. The intended fix is in go1.11.9.`,
	},

	{1, 12, 2}: {
		Date: Date{2019, 4, 5},

		Components: []template.HTML{"the compiler", "the go command", "the runtime"},
		Packages:   []string{"doc", "net", "net/http/httputil", "os"},
	},
	{1, 11, 7}: {
		Date: Date{2019, 4, 5},

		Components: []template.HTML{"the runtime"},
		Packages:   []string{"net"},
	},

	{1, 12, 1}: {
		Date: Date{2019, 3, 14},

		Components: []template.HTML{"cgo", "the compiler", "the go command"},
		Packages:   []string{"fmt", "net/smtp", "os", "path/filepath", "sync", "text/template"},
	},
	{1, 11, 6}: {
		Date: Date{2019, 3, 14},

		Components: []template.HTML{"cgo", "the compiler", "linker", "runtime", "go command"},
		Packages:   []string{"crypto/x509", "encoding/json", "net", "net/url"},
	},

	{1, 12, 0}: {
		Date: Date{2019, 2, 25},
	},

	{1, 11, 5}: {
		Date:     Date{2019, 1, 23},
		Security: true,

		Quantifier: "a",
		Packages:   []string{"crypto/elliptic"},
	},
	{1, 10, 8}: {
		Date:     Date{2019, 1, 23},
		Security: true,

		Quantifier: "a",
		Packages:   []string{"crypto/elliptic"},
	},

	{1, 11, 4}: {
		Date: Date{2018, 12, 14},

		Components: []template.HTML{"cgo", "the compiler", "linker", "runtime", "documentation", "go command"},
		Packages:   []string{"net/http", "go/types"},
		More: `It includes a fix to a bug introduced in Go 1.11.3 that broke <code>go</code>
<code>get</code> for import path patterns containing "<code>...</code>".`,
	},
	{1, 10, 7}: {
		Date: Date{2018, 12, 14},

		// TODO: Modify to follow usual pattern, say it includes a fix to the go command.
		CustomSummary: `includes a fix to a bug introduced in Go 1.10.6
that broke <code>go</code> <code>get</code> for import path patterns containing
"<code>...</code>".
See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.10.7+label%3ACherryPickApproved">
Go 1.10.7 milestone</a> on our issue tracker for details.`,
	},

	{1, 11, 3}: {
		Date:     Date{2018, 12, 12},
		Security: true,

		Quantifier: "three",
		Components: []template.HTML{`"go get"`},
		Packages:   []string{"crypto/x509"},
	},
	{1, 10, 6}: {
		Date:     Date{2018, 12, 12},
		Security: true,

		Quantifier: "three",
		Components: []template.HTML{`"go get"`},
		Packages:   []string{"crypto/x509"},
		More:       "It contains the same fixes as Go 1.11.3 and was released at the same time.",
	},

	{1, 11, 2}: {
		Date: Date{2018, 11, 2},

		Components: []template.HTML{"the compiler", "linker", "documentation", "go command"},
		Packages:   []string{"database/sql", "go/types"},
	},
	{1, 10, 5}: {
		Date: Date{2018, 11, 2},

		Components: []template.HTML{"the go command", "linker", "runtime"},
		Packages:   []string{"database/sql"},
	},

	{1, 11, 1}: {
		Date: Date{2018, 10, 1},

		Components: []template.HTML{"the compiler", "documentation", "go command", "runtime"},
		Packages:   []string{"crypto/x509", "encoding/json", "go/types", "net", "net/http", "reflect"},
	},

	{1, 11, 0}: {
		Date: Date{2018, 8, 24},
	},
	{1, 10, 4}: {
		Date: Date{2018, 8, 24},

		Components: []template.HTML{"the go command", "linker"},
		Packages:   []string{"net/http", "mime/multipart", "ld/macho", "bytes", "strings"},
	},

	{1, 10, 3}: {
		Date: Date{2018, 6, 5},

		Components: []template.HTML{"the go command"},
		Packages:   []string{"crypto/tls", "crypto/x509", "strings"},
		More: `In particular, it adds <a href="https://go.googlesource.com/go/+/d4e21288e444d3ffd30d1a0737f15ea3fc3b8ad9">
minimal support to the go command for the vgo transition</a>.`,
	},
	{1, 9, 7}: {
		Date: Date{2018, 6, 5},

		Components: []template.HTML{"the go command"},
		Packages:   []string{"crypto/x509", "strings"},
		More: `In particular, it adds <a href="https://go.googlesource.com/go/+/d4e21288e444d3ffd30d1a0737f15ea3fc3b8ad9">
minimal support to the go command for the vgo transition</a>.`,
	},

	{1, 10, 2}: {
		Date: Date{2018, 5, 1},

		Components: []template.HTML{"the compiler", "linker", "go command"},
	},
	{1, 9, 6}: {
		Date: Date{2018, 5, 1},

		Components: []template.HTML{"the compiler", "go command"},
	},

	{1, 10, 1}: {
		Date: Date{2018, 3, 28},

		Components: []template.HTML{"the compiler", "runtime"},
		Packages:   []string{"archive/zip", "crypto/tls", "crypto/x509", "encoding/json", "net", "net/http", "net/http/pprof"},
	},
	{1, 9, 5}: {
		Date: Date{2018, 3, 28},

		Components: []template.HTML{"the compiler", "go command"},
		Packages:   []string{"net/http/pprof"},
	},

	{1, 10, 0}: {
		Date: Date{2018, 2, 16},
	},

	{1, 9, 4}: {
		Date:     Date{2018, 2, 7},
		Security: true,

		Quantifier: "a",
		Components: []template.HTML{`"go get"`},
	},

	{1, 9, 3}: {
		Date: Date{2018, 1, 22},

		Components: []template.HTML{"the compiler", "runtime"},
		Packages:   []string{"database/sql", "math/big", "net/http", "net/url"},
	},

	{1, 9, 2}: {
		Date: Date{2017, 10, 25},

		Components: []template.HTML{"the compiler", "linker", "runtime", "documentation", "<code>go</code> command"},
		Packages:   []string{"crypto/x509", "database/sql", "log", "net/smtp"},
		More: `It includes a fix to a bug introduced in Go 1.9.1 that broke <code>go</code> <code>get</code>
of non-Git repositories under certain conditions.`,
	},

	{1, 9, 1}: {
		Date:     Date{2017, 10, 4},
		Security: true,

		Quantifier: "two",
	},

	{1, 9, 0}: {
		Date: Date{2017, 8, 24},
	},
}

// GoVer represents a Go release version.
//
// In contrast to Semantic Versioning 2.0.0,
// trailing zero components are omitted,
// a version like Go 1.14 is considered a major Go release,
// a version like Go 1.14.1 is considered a minor Go release.
//
// See proposal golang.org/issue/32450 for background, details,
// and a discussion of the costs involved in making a change.
type GoVer struct {
	X int // X is the 1st component of a Go X.Y.Z version. It must be 1 or higher.
	Y int // Y is the 2nd component of a Go X.Y.Z version. It must be 0 or higher.
	Z int // Z is the 3rd component of a Go X.Y.Z version. It must be 0 or higher.
}

// String returns the Go release version string,
// like "1.14", "1.14.1", "1.14.2", and so on.
func (v GoVer) String() string {
	switch {
	case v.Z != 0:
		return fmt.Sprintf("%d.%d.%d", v.X, v.Y, v.Z)
	case v.Y != 0:
		return fmt.Sprintf("%d.%d", v.X, v.Y)
	default:
		return fmt.Sprintf("%d", v.X)
	}
}

// IsMajor reports whether version v is considered to be a major Go release.
// For example, Go 1.14 and 1.13 are major Go releases.
func (v GoVer) IsMajor() bool { return v.Z == 0 }

// IsMinor reports whether version v is considered to be a minor Go release.
// For example, Go 1.14.1 and 1.13.9 are minor Go releases.
func (v GoVer) IsMinor() bool { return v.Z != 0 }

// Date represents the date (year, month, day) of a Go release.
//
// This type does not include location information, and
// therefore does not describe a unique 24-hour timespan.
type Date struct {
	Year  int        // Year (e.g., 2009).
	Month time.Month // Month of the year (January = 1, ...).
	Day   int        // Day of the month, starting at 1.
}
