// 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, 4}: {
		Date: Date{2020, 6, 1},

		Components: []template.HTML{"the <code>go</code> <code>doc</code> command", "the runtime"},
		Packages:   []string{"encoding/json", "os"},
	},
	{1, 13, 12}: {
		Date: Date{2020, 6, 1},

		Components: []template.HTML{"the runtime"},
		Packages:   []string{"go/types", "math/big"},
	},

	{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.
}
