🎲 Hacktoberfest

本项目正在参加 Hacktoberfest。如果您希望做出贡献,请查看我们的Hacktoberfest 参与者详细指南

🕐 什么是这个项目?

在开始之前,请先了解一下这个项目。打开endoflife.date并浏览一下。看看最近合并的一些 PR 以获得更好的了解。

✏️ 关于代码库

endoflife.date 是使用 Jekyll 构建的——Jekyll 是一个 Ruby 静态网站生成器,为 GitHub Pages 提供支持。该网站在 Netlify 上构建和部署。由于该网站主要是信息性的,因此您不需要编程技能即可为项目做出贡献

➕ 添加新产品

要向网站添加新页面,请创建一个包含 YAML Frontmatter 的新 markdown 文件。将文件名保留为 productname.md,并在创建拉取请求之前删除所有通用注释或不需要的键。尽可能使用 UTC 时区来表示所有日期。下面是一个您可以用来添加新产品的模板

---
# Name of the product (mandatory).
title: Timeturner

# Date when the product was added to endoflife.date (optional).
addedAt: 2019-05-27

# Category of the product (mandatory).
# Possible values are: app, database, device, framework, lang, os, server-app, service, standard.
# If you add a new value, please mention it in the PR description. Some rough guidelines:
# - app: end-user applications
# - database: all kinds of database
# - device: physical, hardware devices
# - framework: application libraries, SDKs, frameworks...
# - lang: programming languages
# - os: operating systems (and similar projects)
# - server-app: applications usually installed on the server-side
# - service: managed service offerings (SaaS/PaaS...)
# - standard: standards and protocols.
category: os

# Tags of the product (optional).
#
# Remember that no tag is better than a useless tag. So do not introduce new tags when adding a product
# and use one of the tags listed on https://endoflife.cn/tags/.
#
# Should you want to add a new tag, please open an issue first to discuss it with the team.
# Moreover, any new tag must be applied in a single PR to all products that should have it.
#
# Rules about tags are the following:
# - must match [a-z0-9\-]+,
# - must be declared with a space-separated string,
# - must be alphabetically ordered,
# - must use singular (for example web-server, not web-servers),
# - should not be an existing category (note that categories are automatically used as tags),
# - should be used at least three times, except for tags representing a vendor or a runtime dependency,
# - must be added for one of the following reasons :
#   - set a product family such as linux-distribution, web-browser, mobile-phone or web-server,
#   - set a product vendor such as adobe, amazon or apache,
#   - set a third-party extended support partner, or
#   - set a runtime dependency such as java-runtime, javascript-runtime or php-runtime.
tags: amazon linux-distribution

# Simple Icons icon slug (https://simpleicons.org/) for the product or its vendor (optional).
# Remove this property if no relevant icon is available on Simple Icons.
# As an example, https://simpleicons.org/?q=codemagic links to https://simpleicons.org/icons/codemagic.svg ,
# so the slug is `codemagic` (the SVG filename without extension).
# A list of all slugs is also available on https://github.com/simple-icons/simple-icons/blob/develop/slugs.md .
iconSlug: codemagic

# Main URL for the page (mandatory).
permalink: /timeturner

# Alternate URLs that will redirect to the permalink (optional).
# This is nice to let people use easier-to-remember URLs. For example, we redirect /golang to /go .
alternate_urls:
-   /hourglass

# Command that can be used to check the current product version (optional).
versionCommand: swish and flick

# The more information link (optional).
# If provided, this link is displayed after the product's description.
# This link should contain information about the release policy and schedule. This is NOT the product URL!
# Do not use a localized URL (such as one containing en-us) if possible.
releasePolicyLink: https://node.org.cn/about/releases/

# An image that shows a graphical representation of the releases (optional).
# If provided, this image will be displayed at the top of the product's page.
# This is not the product logo. Remove if you don't find a relevant image.
releaseImage: https://raw.githubusercontent.com/nodejs/Release/main/schedule.svg?sanitize=true

# Template to be used to generate a link for the releases (optional).
# Available variables inside the template are:
# - __RELEASE_CYCLE__: will be replaced by the value of `releaseCycle`,
# - __LATEST__: will be replaced by the value of `latest`,
# - __CODENAME__: will be replaced by the optional `codename`.
# You can even use Liquid Templating inside the template, such as:
#   https://godotengine.org/article/maintenance-release-godot-__LATEST__
# Do not use a localized URL (such as one containing en-us) if possible.
changelogTemplate: "https://link/of/the/__RELEASE_CYCLE__/and/__LATEST__/version"

# Template that generates names for every release (optional, default = "__RELEASE_CYCLE__").
# It supports the same variables as changelogTemplate.
releaseLabel: "MoM Timeturner __RELEASE_CYCLE__ (__CODENAME__)"

# The label that will be used alongside releases labelled with `lts: true`
# (optional, default = "<abbr title='Long Term Support'>LTS</abbr>" ).
# Only provide if the product has LTS releases that are not called LTS, but something else.
# Prefer using an HTML abbr tag, if possible.
LTSLabel: "<abbr title='Extra Long Support'>ELS</abbr>"

# Whether the "End Of Life" column should be displayed (optional, default = true).
# The value of this property can be set to any string to override the default column label.
eolColumn: Security Support

# Whether the "End Of Active Support" column should be displayed (optional, default = false).
# The value of this property can be set to any string to override the default column label.
eoasColumn: Active Support

# Whether the "Latest" column should be displayed (optional, default = true).
# The value of this property can be set to any string to override the default column label.
latestColumn: Latest

# Whether the "Released" column should be displayed (optional, default = true).
# The value of this property can be set to any string to override the default column label.
releaseDateColumn: Released

# Whether the "Discontinued" column should be displayed (optional, default = false).
# Set this to true for physical, hardware devices (as opposed to software projects).
# The value of this property can be set to any string to override the default column label.
discontinuedColumn: Discontinued

# Whether the "End Of Extended Support" column should be displayed (optional, default = false).
# The value of this property can be set to any string to override the default column label.
eoesColumn: Extended Support

# Custom fields configuration (optional).
# Custom fields are non-standard fields used for documenting things such as related runtime versions, custom dates that
# cannot be expressed using the standard fields, etc.
# They can be:
# - displayed in the release table,
# - made available in API responses,
# - used in table includes, such as in https://github.com/endoflife-date/endoflife.date/blob/master/products/ansible.md
#   (preferred this over release table when there are more than 2 or 3 custom fields),
# - or even just used for internal documentation.
# Search in the existing products source file to see how they are used.
customFields:

  # Name of the custom field (mandatory, unique).
  # If the release cycle does not declare this field, the label 'N/A' will be displayed instead.
  # Custom fields follow the camel-case syntax for naming.
  # Values must always be a string.
  - name: supportedIosVersions

    # Where the custom field should be displayed (mandatory). Allowed values are:
    # - none: do not display the custom field in API responses nor in release table.
    # - api-only: only display the custom field in API responses.
    # - after-release-column: display the custom field in API and in the release table after the release column.
    # - before-latest-column: display the custom field in API and in the release table before the latest column.
    # - after-latest-column: display the custom field in API and in the release table after the latest column.
    # If multiple columns have the same position, the order of the column in the customFields list will be respected.
    display: after-release-column

    # Label of the custom field (mandatory).
    # It will notably be used as the column's name in the release table.
    label: iOS

    # A description of what the custom column contains (optional).
    # It will notably be used as the column's tooltip in the release table.
    description: Supported iOS versions

    # A link that gives more information about what the custom field contains (optional).
    # It will notably transform the label into a link in the release table.
    link: https://en.wikipedia.org/wiki/IPhone#Models

# Auto-update release configuration (optional).
# This is used for automatically updating `releaseDate`, `latest`, and `latestReleaseDate` for every release.
# Multiple configurations are allowed.
# Please visit https://github.com/endoflife-date/endoflife.date/wiki/Automation for more details.
# The presence of such configuration modifies the product page so that users are informed that existing
# releases are automatically updated with latest versions.
auto:
  # Mark auto-update as being cumulative (optional, default = false).
  # This means that the data won't be deleted before fetching new data.
  # Activating cumulative updates is not recommended for most products, but could be useful for products that:
  # - have a long history of releases that is long to fetch,
  # - have a history of releases that is not available anymore.
  cumulative: true
  methods:
    # Configuration for auto-update based on git.
    # Any valid git clone URL will work, but support for partialClone is necessary
    # (GitHub and GitLab support it).
    # For example, for Apache Maven:
    - git: https://github.com/apache/maven.git

      # Python-compatible regex that defines how the tags above should translate to versions (optional).
      # The default regex can handle versions having at least 2 digits (ex. 1.2) and at most 4 digits (ex. 1.2.3.4),
      # with an optional leading "v"). Use named capturing groups to capture the version or version's parts.
      # Default value should work for most releases of the form a.b, a.b.c or 'v'a.b.c.
      # It should also skip over any special releases (such as nightly, beta, pre, rc...).
      regex: ^v(?P<major>\d+)_(?P<minor>\d+)_(?P<patch>\d{1,3})_?(?P<tiny>\d+)?$

      # Python-compatible regex that defines which tags should be excluded (optional).
      regex_exclude: ^v99.99.99$

      # A liquid template using the captured variables from the regex above that renders the final version
      # (optional, default can handle versions having a 'major', 'minor', 'patch' and 'tiny' version).
      # You can use liquid templating here.
      template: '..'

    # Configuration for auto-update based on Docker Hub.
    # The value must be the "owner/repo" combination for a docker hub public image.
    # Use "library" as the owner name for an official docker/community image.
    # For example, for PostgreSQL:
    - docker_hub: library/postgres

    # Configuration for auto-update based on the npm registry.
    # The value must be the package identifier on https://npmjs.net.cn .
    # For example, for Vue:
    - npm: vue

    # Configuration for auto-update based on DistroWatch.
    # The value must be the distribution ID. It can be found in the distribution URL.
    # For example, for https://distrowatch.com/index.php?distribution=debian , use "debian".
    - distrowatch: debian

      # The Python-compatible regex used to parse headlines (mandatory).
      # Use named capturing groups to capture the version or version's parts.
      # You can also pass a list of regexes here and matches for any of those will be considered.
      regex: 'Distribution Release: (?P<version>\d+.\d+)'

      # A liquid template using the captured variables from the regex above that renders the final version
      # (optional, default can be found on https://github.com/endoflife-date/release-data/blob/main/src/distrowatch.py#L13 ).
      # You can use liquid templating here.
      template: ''

    # Configuration for auto-update based on Maven Central ( https://search.maven.org ).
    # The value must be the maven coordinates of the artifact, in the form groupId/artifactId.
    # For example, for Apache Tomcat ( https://search.maven.org/artifact/org.apache.tomcat/tomcat ):
    - maven: org.apache.tomcat/tomcat

    # Configuration for auto-update based on a custom script in the release-data repository.
    # The value must be the script name in the release-data repository, without it's '.py' extension.
    - custom: script-name

# A list of identifiers that can be used to detect this product as being used,
# especially by SBOM tooling
# Please see https://endoflife.cn/help/identifiers-needed/ for more information
identifiers:
  # Each identifier is a way of linking this product to various methods of installing it

  # This is a shorthand to use repology as the source data
  # https://repology.org/project/:package-name-/versions
  # should return a valid list of packages linked to this product.
  - repology: package-name

  # See the PURL spec https://github.com/package-url/purl-spec
  # for details, and avoid packages that are already mentioned on
  # the repology page
  # Common examples would be to use
  # - pkg:os to document operating systems (https://github.com/package-url/purl-spec/pull/161)
  # - pkg:github to link to GitHub pages
  # - pkg:golang/pypi/gem/maven/npm etc for common package managers
  # - pkg:docker for linking to docker images on Docker Hub
  - purl: pkg:package-manager/package-name

# A list of releases, supported or not (mandatory).
# Releases must be sorted from the newest (on top of the list) to the oldest.
# Do not add releases that are not considered "stable" (such as RC/Alpha/Beta/Nightly).
releases:

    # Release cycle name (mandatory, unique, always put in quotes).
    # Only lowercase letters, numbers, dots, dashes, plus and underscores are allowed (/^[a-z0-9.\-_+]+$/).
    # This is usually major.minor. Do not prefix with "v" or suffix with ".x".
-   releaseCycle: "1.2"

    # Name displayed for the release (optional, default = global releaseLabel value).
    # Use this property if you need to override the release label on a per-release basis.
    # You can use templating here, though it is usually not required.
    # Template parameters are the same as the global releaseLabel property.
    releaseLabel: "Timeturner Firebolt (1.2)"

    # Codename of the release (optional, not displayed anywhere by default).
    # It can be used as __CODENAME__ in the releaseLabel and changelogTemplate.
    # It is also returned as-is in the API.
    codename: firebolt

    # Date of the release (mandatory).
    # Note that an approximate date is OK if the exact date is not known.
    releaseDate: 2017-03-12

    # Whether this is a "LTS" release (optional, default = false).
    # What LTS means may differ from product to product (see LTSLabel above).
    # Only provide for a release that will get much longer support than usual.
    # Alternatively, this can be set to a date
    # if the product is not labeled as LTS when it is released (ex. Angular)
    # or when normal versions are promoted LTS after their release (ex. Jenkins).
    lts: true

    # End Of Active Support date (mandatory if eoasColumn is true, else MUST NOT be set).
    # This can be either a date (must be valid and not quoted)
    # or a boolean value (when the date is not known or has not been decided yet).
    # - When a date is used, this is the date where bug fixes stop coming in.
    # - When a boolean is used, it must be set to true if the release cycle is not supported
    #   anymore, and false otherwise.
    eoas: 2018-01-31

    # End Of Life date (mandatory).
    # This can be either a date (must be valid and not quoted)
    # or a boolean value (when the date is not known or has not been decided yet).
    # - When a date is used, this is where all support stops, including security support.
    #   Note that this date reflects what is true for the majority of users (you may use the
    #   eoes field if possible/necessary).
    # - When a boolean is used, it must be set to true if the release cycle is End Of Life,
    #   and false otherwise.
    eol: 2019-01-01

    # End Of Extended/commercial Support date (optional if eoesColumn is true, else SHOULD NOT be set).
    # This can be either a date (must be valid and not quoted),
    # a boolean value (when the date is not known or has not been decided yet), or null.
    # - When a date is used, this is where the extended support period stops.
    # - When a boolean is used, it must be set to true if the extended support period is over,
    #   and false otherwise.
    # - When null is used, it means that there is no extended/commercial support for the given
    #   release cycle.
    eoes: 2020-01-01

    # Discontinuation date (mandatory if discontinuedColumn is true, else MUST NOT be set).
    # This is typically used for physical, hardware devices (as opposed to software projects),
    # to indicate when the device is no longer available for sale or is no longer being manufactured.
    # In contrast, the `eol` property indicates the end of support service for the device version.
    # This can be either a date (must be valid and not quoted)
    # or a boolean value (when the date is not known or has not been decided yet).
    # - When a date is used, this is the date where the release cycle is discontinued.
    # - When a boolean is used, it must be set to true if the release cycle is discontinued,
    #   and false otherwise.
    discontinued: true

    # Latest release for the release cycle (optional if latestColumn is false, else mandatory).
    # Usually this is the release cycle's latest "patch" release.
    # It should be removed if latestColumn is false.
    # Always add quotes around this value.
    latest: "1.2.3"

    # Latest release date (optional).
    # Use valid dates, and do not add quotes around dates.
    latestReleaseDate: 2022-01-23

    # A link to the changelog for the latest release in this cycle
    # (optional, default = the URL generated from changelogTemplate if it is provided).
    # Use this if the link is not predictable (i.e. you can't use changelogTemplate),
    # or if the changelogTemplate generated link must be overridden.
    # Do not use a localized URL (such as one containing en-us) if possible.
    # Use the special value 'null' (unquoted) if you want to disable the link
    # for a specific cycle of a product having a changelogTemplate.
    link: https://example.com/news/2021-12-25/release-1.2.3

# In the following markdown section, ensure that all the above are present:
# 1. A one-line statement about what the product is, with a link to the primary website (in a quote).
# 2. A short summary of the release policy, pointing out the EoL policy as well, if available.
# 3. Any additional information that may be of interest.
#
# See also the Guiding Principles on the wiki ( https://github.com/endoflife-date/endoflife.date/wiki/Guiding-Principles )
# for indication of the tone and voice to use for the text.


# Please leave a new line both above and below the triple-dashes.

---

# All the product information text should be under triple-dashes.
# If you are adding any images in the text, they might get blocked due to our CSP,
# so prefer using releaseImage in such cases.
# Note that images on the same website as releaseImage will not be blocked.

> [Time Turner](https://jkrowling.com/time-turner) is a device that powers short-term time travel.

Time-turners are no longer released, and the last known stable release was in HP.5 release.

对于产品文本,请务必阅读网站的指导原则以匹配语气。提交一个包含此已创建文件的拉取请求,Netlify 将提供一个预览 URL。拉取请求合并后,更改将自动部署到网站上。请参阅下文了解如何验证您的更改。

您可以访问 https://github.com/endoflife-date/endoflife.date/new/master/products 直接创建文件。

✅ 验证您的更改

如果您使用像 vscodevim(或任何其他支持 JSON 模式验证的 IDE),您可以使用这个 jsonschema 来验证新产品。

对于 vscode,您需要 yaml-language-server 扩展和此配置,它会将 products 目录中的文件视为 yaml 文件并对其应用 jsonschema

  "files.associations": {
    "**/products/*.md": "yaml"
  },
  "yaml.schemas": {
    "../product-schema.json": "products/*.md"
  }

vim 中,您也可以使用 yaml-language-server,只需在产品文件顶部添加以下代码片段

# vim: set ft=yaml :
# yaml-language-server: $schema=../product-schema.json

提交拉取请求后,Netlify 将为您的更改提供一系列检查。如果其中一项检查失败,您可以单击“详细信息”查看错误,或者维护人员会为您提供帮助。

如果所有检查都通过,您可以单击“部署预览”状态检查上的“详细信息”链接,查看包含您的更改的网站预览。

image

单击并验证您的更改。单击您更改的页面上的所有链接,确保它们没有损坏。

在本地运行 endoflife.date

请阅读 HACKING 文档以获取有关如何在本地运行 endoflife.date 的说明。

测试 API 有效载荷

有一个 GitHub 工作流已经验证了 OpenAPI 规范(也可以在 https://pb33f.io/doctor/ 上检查)。但是要测试生成的 API 有效载荷,您可以执行以下操作

# In a first tab, run:
bundle exec jekyll serve

# In a second tab, run:
npx @pb33f/wiretap@latest -s https://:4000/docs/api/v1/openapi.yml -u https://:4000
# then open https://:9091/ in your browser

# In a third tab, run:
IFS="
"
for file in $(find _site/api/v1 -type f | grep -v releases | sort -n); do
  echo $(dirname $file | sed 's|_site|https://:9090|' | sed 's|v1$|v1/|' | sed 's| |%20|')
done | xargs -n1 -P20 curl -s -o /dev/null -w '%{url} %{http_code}\n'

Linting 和格式化文件

您可以使用 lint-product.sh 使用 markdownlint-cli2prettier 对产品文件进行 linting。

bin/lint-product.sh products/<product>.md

🆔 添加标识符

我们需要帮助添加更多标识符。请参阅此页面以获取缺少标识符的页面列表。

📑 建议阅读

我们有以下文档,应有助于您熟悉项目和代码库。您不需要阅读所有这些内容,并且在必须阅读其中任何内容的情况下,我们已在上面链接了这些文档。

  • HACKING.md 包含有关使用 Jekyll 在本地设置代码库的说明。如果您计划进行复杂的更改或在本地设置项目,请阅读此内容。
  • 指导原则 - 这些原则有助于我们就拥有的内容做出决策。如果您希望您的 PR 获得快速批准,请阅读这些原则以确保您的更改与其余内容保持一致。这对于处理内容或添加新产品的非平凡更改尤其重要
  • CONTRIBUTING.md - (此页面)。也可通过 https://endoflife.cn/contribute 访问

⚖️ 行为准则

请注意,本项目发布时附带贡献者行为准则。参与本项目即表示您同意遵守其条款。