🎲 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 直接创建文件。
✅ 验证您的更改
如果您使用像 vscode 或 vim(或任何其他支持 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 将为您的更改提供一系列检查。如果其中一项检查失败,您可以单击“详细信息”查看错误,或者维护人员会为您提供帮助。
如果所有检查都通过,您可以单击“部署预览”状态检查上的“详细信息”链接,查看包含您的更改的网站预览。

单击并验证您的更改。单击您更改的页面上的所有链接,确保它们没有损坏。
在本地运行 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-cli2 和 prettier 对产品文件进行 linting。
bin/lint-product.sh products/<product>.md
🆔 添加标识符
我们需要帮助添加更多标识符。请参阅此页面以获取缺少标识符的页面列表。
📑 建议阅读
我们有以下文档,应有助于您熟悉项目和代码库。您不需要阅读所有这些内容,并且在必须阅读其中任何内容的情况下,我们已在上面链接了这些文档。
- HACKING.md 包含有关使用 Jekyll 在本地设置代码库的说明。如果您计划进行复杂的更改或在本地设置项目,请阅读此内容。
- 指导原则 - 这些原则有助于我们就拥有的内容做出决策。如果您希望您的 PR 获得快速批准,请阅读这些原则以确保您的更改与其余内容保持一致。这对于处理内容或添加新产品的非平凡更改尤其重要。
- CONTRIBUTING.md - (此页面)。也可通过 https://endoflife.cn/contribute 访问
⚖️ 行为准则
请注意,本项目发布时附带贡献者行为准则。参与本项目即表示您同意遵守其条款。