Compare commits

...

6 Commits

Author SHA1 Message Date
Ale Mohamad ⌘ 88f9863487
Merge d42ceb9153 into d6eb192bd8 2025-06-05 17:22:51 +02:00
TheHandyOwl d6eb192bd8
Refactor: model.es.md translation to Spanish (#1082) 2025-06-01 00:51:22 +02:00
TheHandyOwl a2977762e1
NEW: Spanish translation reviewed - docs/security/authentication.es.md (#1080) 2025-05-24 19:24:14 +02:00
TheHandyOwl 68f2a91630
NEW: Remove English text from the Spanish translation (#700) (#1079) 2025-05-24 13:32:38 +02:00
Gwynne Raskind 12b0114882
.time is not actually supported, stop claiming it is (#1078)
Pretty much what it says on the tin. Since the only change is a
deletion, no separate translation is needed.
2025-05-05 09:51:07 -05:00
Ale Mohamad d42ceb9153 Update Release Notes Workflow 2025-01-22 13:51:14 +01:00
12 changed files with 601 additions and 176 deletions

218
.github/release-notes.template.md vendored Normal file
View File

@ -0,0 +1,218 @@
# Vapor Release Notes
Because it is hard, if not impossible to keep the documentation up-to-date constantly, here you will find release notes of various different packages linked to the Vapor ecosystem.
## [vapor](https://github.com/vapor/vapor)
[**{{VAPOR_RELEASE}}**](https://github.com/vapor/vapor/releases/tag/{{VAPOR_ID}})
{{VAPOR_DESCRIPTION}}
---
## [fluent](https://github.com/vapor/fluent)
[**{{FLUENT_RELEASE}}**](https://github.com/vapor/fluent/releases/tag/{{FLUENT_ID}})
{{FLUENT_DESCRIPTION}}
---
## [fluent-kit](https://github.com/vapor/fluent-kit)
[**{{FLUENT_KIT_RELEASE}}**](https://github.com/vapor/fluent-kit/releases/tag/{{FLUENT_KIT_ID}})
{{FLUENT_KIT_DESCRIPTION}}
---
## [leaf](https://github.com/vapor/leaf)
[**{{LEAF_RELEASE}}**](https://github.com/vapor/leaf/releases/tag/{{LEAF_ID}})
{{LEAF_DESCRIPTION}}
---
## [leaf-kit](https://github.com/vapor/leaf-kit)
[**{{LEAF_KIT_RELEASE}}**](https://github.com/vapor/leaf-kit/releases/tag/{{LEAF_KIT_ID}})
{{LEAF_KIT_DESCRIPTION}}
---
## [fluent-postgres-driver](https://github.com/vapor/fluent-postgres-driver)
[**{{FLUENT_POSTGRES_DRIVER_RELEASE}}**](https://github.com/vapor/fluent-postgres-driver/releases/tag/{{FLUENT_POSTGRES_DRIVER_ID}})
{{FLUENT_POSTGRES_DRIVER_DESCRIPTION}}
---
## [fluent-mysql-driver](https://github.com/vapor/fluent-mysql-driver)
[**{{FLUENT_MYSQL_DRIVER_RELEASE}}**](https://github.com/vapor/fluent-mysql-driver/releases/tag/{{FLUENT_MYSQL_DRIVER_ID}})
{{FLUENT_MYSQL_DRIVER_DESCRIPTION}}
---
## [fluent-sqlite-driver](https://github.com/vapor/fluent-sqlite-driver)
[**{{FLUENT_SQLITE_DRIVER_RELEASE}}**](https://github.com/vapor/fluent-sqlite-driver/releases/tag/{{FLUENT_SQLITE_DRIVER_ID}})
{{FLUENT_SQLITE_DRIVER_DESCRIPTION}}
---
## [fluent-mongo-driver](https://github.com/vapor/fluent-mongo-driver)
[**{{FLUENT_MONGO_DRIVER_RELEASE}}**](https://github.com/vapor/fluent-mongo-driver/releases/tag/{{FLUENT_MONGO_DRIVER_ID}})
{{FLUENT_MONGO_DRIVER_DESCRIPTION}}
---
## [postgres-nio](https://github.com/vapor/postgres-nio)
[**{{POSTGRES_NIO_RELEASE}}**](https://github.com/vapor/postgres-nio/releases/tag/{{POSTGRES_NIO_ID}})
{{POSTGRES_NIO_DESCRIPTION}}
---
## [mysql-nio](https://github.com/vapor/mysql-nio)
[**{{MYSQL_NIO_RELEASE}}**](https://github.com/vapor/mysql-nio/releases/tag/{{MYSQL_NIO_ID}})
{{MYSQL_NIO_DESCRIPTION}}
---
## [sqlite-nio](https://github.com/vapor/sqlite-nio)
[**{{SQLITE_NIO_RELEASE}}**](https://github.com/vapor/sqlite-nio/releases/tag/{{SQLITE_NIO_ID}})
{{SQLITE_NIO_DESCRIPTION}}
---
## [postgres-kit](https://github.com/vapor/postgres-kit)
[**{{POSTGRES_KIT_RELEASE}}**](https://github.com/vapor/postgres-kit/releases/tag/{{POSTGRES_KIT_ID}})
{{POSTGRES_KIT_DESCRIPTION}}
---
## [mysql-kit](https://github.com/vapor/mysql-kit)
[**{{MYSQL_KIT_RELEASE}}**](https://github.com/vapor/mysql-kit/releases/tag/{{MYSQL_KIT_ID}})
{{MYSQL_KIT_DESCRIPTION}}
---
## [sqlite-kit](https://github.com/vapor/sqlite-kit)
[**{{SQLITE_KIT_RELEASE}}**](https://github.com/vapor/sqlite-kit/releases/tag/{{SQLITE_KIT_ID}})
{{SQLITE_KIT_DESCRIPTION}}
---
## [sql-kit](https://github.com/vapor/sql-kit)
[**{{SQL_KIT_RELEASE}}**](https://github.com/vapor/sql-kit/releases/tag/{{SQL_KIT_ID}})
{{SQL_KIT_DESCRIPTION}}
---
## [apns](https://github.com/vapor/apns)
[**{{APNS_RELEASE}}**](https://github.com/vapor/apns/releases/tag/{{APNS_ID}})
{{APNS_DESCRIPTION}}
---
## [queues](https://github.com/vapor/queues)
[**{{QUEUES_RELEASE}}**](https://github.com/vapor/queues/releases/tag/{{QUEUES_ID}})
{{QUEUES_DESCRIPTION}}
---
## [queues-redis-driver](https://github.com/vapor/queues-redis-driver)
[**{{QUEUES_REDIS_DRIVER_RELEASE}}**](https://github.com/vapor/queues-redis-driver/releases/tag/{{QUEUES_REDIS_DRIVER_ID}})
{{QUEUES_REDIS_DRIVER_DESCRIPTION}}
---
## [redis](https://github.com/vapor/redis)
[**{{REDIS_RELEASE}}**](https://github.com/vapor/redis/releases/tag/{{REDIS_ID}})
{{REDIS_DESCRIPTION}}
---
## [jwt](https://github.com/vapor/jwt)
[**{{JWT_RELEASE}}**](https://github.com/vapor/jwt/releases/tag/{{JWT_ID}})
{{JWT_DESCRIPTION}}
---
## [jwt-kit](https://github.com/vapor/jwt-kit)
[**{{JWT_KIT_RELEASE}}**](https://github.com/vapor/jwt-kit/releases/tag/{{JWT_KIT_ID}})
{{JWT_KIT_DESCRIPTION}}
---
## [websocket-kit](https://github.com/vapor/websocket-kit)
[**{{WEBSOCKET_KIT_RELEASE}}**](https://github.com/vapor/websocket-kit/releases/tag/{{WEBSOCKET_KIT_ID}})
{{WEBSOCKET_KIT_DESCRIPTION}}
---
## [routing-kit](https://github.com/vapor/routing-kit)
[**{{ROUTING_KIT_RELEASE}}**](https://github.com/vapor/routing-kit/releases/tag/{{ROUTING_KIT_ID}})
{{ROUTING_KIT_DESCRIPTION}}
---
## [console-kit](https://github.com/vapor/console-kit)
[**{{CONSOLE_KIT_RELEASE}}**](https://github.com/vapor/console-kit/releases/tag/{{CONSOLE_KIT_ID}})
{{CONSOLE_KIT_DESCRIPTION}}
---
## [async-kit](https://github.com/vapor/async-kit)
[**{{ASYNC_KIT_RELEASE}}**](https://github.com/vapor/async-kit/releases/tag/{{ASYNC_KIT_ID}})
{{ASYNC_KIT_DESCRIPTION}}
---
## [multipart-kit](https://github.com/vapor/multipart-kit)
[**{{MULTIPART_KIT_RELEASE}}**](https://github.com/vapor/multipart-kit/releases/tag/{{MULTIPART_KIT_ID}})
{{MULTIPART_KIT_DESCRIPTION}}
---
## [toolbox](https://github.com/vapor/toolbox)
[**{{TOOLBOX_RELEASE}}**](https://github.com/vapor/toolbox/releases/tag/{{TOOLBOX_ID}})
{{TOOLBOX_DESCRIPTION}}
---
## [core](https://github.com/vapor/core)
[**{{CORE_RELEASE}}**](https://github.com/vapor/core/releases/tag/{{CORE_ID}})
{{CORE_DESCRIPTION}}
---
## [swift-codecov-action](https://github.com/vapor/swift-codecov-action)
[**{{SWIFT_CODECOV_ACTION_RELEASE}}**](https://github.com/vapor/swift-codecov-action/releases/tag/{{SWIFT_CODECOV_ACTION_ID}})
{{SWIFT_CODECOV_ACTION_DESCRIPTION}}
---
## [api-docs](https://github.com/vapor/api-docs)
[**{{API_DOCS_RELEASE}}**](https://github.com/vapor/api-docs/releases/tag/{{API_DOCS_ID}})
{{API_DOCS_DESCRIPTION}}

View File

@ -6,6 +6,8 @@ on:
push:
branches:
- main
repository_dispatch:
types: [deploy-trigger]
jobs:
deploy:

View File

@ -0,0 +1,287 @@
name: Update Vapor Release Notes
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
schedule:
# - cron: '0 0 * * *' # Daily at Midnight
# - cron: '0 0 * * 0' # Weekly every Sunday at Midnight
- cron: '0 0 */14 * 0' # Every two weeks on Sunday at Midnight
# - cron: '0 0 1 * *' # Every first of the month at Midnight
workflow_dispatch:
jobs:
fetch-release-notes:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- id: vapor_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/vapor
- id: fluent_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/fluent
- id: fluent_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/fluent-kit
- id: leaf_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/leaf
- id: leaf_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/leaf-kit
- id: fluent_postgres_driver_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/fluent-postgres-driver
- id: fluent_mysql_driver_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/fluent-mysql-driver
- id: fluent_sqlite_driver_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/fluent-sqlite-driver
- id: fluent_mongo_driver_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/fluent-mongo-driver
- id: postgres_nio_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/postgres-nio
- id: mysql_nio_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/mysql-nio
- id: sqlite_nio_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/sqlite-nio
- id: postgres_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/postgres-kit
- id: mysql_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/mysql-kit
- id: sqlite_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/sqlite-kit
- id: sql_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/sql-kit
- id: apns_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/apns
- id: queues_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/queues
- id: queues_redis_driver_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/queues-redis-driver
- id: redis_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/redis
- id: jwt_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/jwt
- id: jwt_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/jwt-kit
- id: websocket_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/websocket-kit
- id: routing_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/routing-kit
- id: console_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/console-kit
- id: async_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/async-kit
- id: multipart_kit_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/multipart-kit
- id: toolbox_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/toolbox
- id: core_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/core
- id: swift_codecov_action_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/swift-codecov-action
- id: api_docs_release
uses: pozetroninc/github-action-get-latest-release@master
with:
repository: vapor/api-docs
- name: Generate Release Notes from Template
run: |
sed \
-e "s/{{VAPOR_RELEASE}}/${{ steps.vapor_release.outputs.release }}/g" \
-e "s/{{VAPOR_ID}}/${{ steps.vapor_release.outputs.id }}/g" \
-e "s/{{VAPOR_DESCRIPTION}}/${{ steps.vapor_release.outputs.description }}/g" \
-e "s/{{FLUENT_RELEASE}}/${{ steps.fluent_release.outputs.release }}/g" \
-e "s/{{FLUENT_ID}}/${{ steps.fluent_release.outputs.id }}/g" \
-e "s/{{FLUENT_DESCRIPTION}}/${{ steps.fluent_release.outputs.description }}/g" \
-e "s/{{FLUENT_KIT_RELEASE}}/${{ steps.fluent_kit_release.outputs.release }}/g" \
-e "s/{{FLUENT_KIT_ID}}/${{ steps.fluent_kit_release.outputs.id }}/g" \
-e "s/{{FLUENT_KIT_DESCRIPTION}}/${{ steps.fluent_kit_release.outputs.description }}/g" \
-e "s/{{LEAF_RELEASE}}/${{ steps.leaf_release.outputs.release }}/g" \
-e "s/{{LEAF_ID}}/${{ steps.leaf_release.outputs.id }}/g" \
-e "s/{{LEAF_DESCRIPTION}}/${{ steps.leaf_release.outputs.description }}/g" \
-e "s/{{LEAF_KIT_RELEASE}}/${{ steps.leaf_kit_release.outputs.release }}/g" \
-e "s/{{LEAF_KIT_ID}}/${{ steps.leaf_kit_release.outputs.id }}/g" \
-e "s/{{LEAF_KIT_DESCRIPTION}}/${{ steps.leaf_kit_release.outputs.description }}/g" \
-e "s/{{FLUENT_POSTGRES_DRIVER_RELEASE}}/${{ steps.fluent_postgres_driver_release.outputs.release }}/g" \
-e "s/{{FLUENT_POSTGRES_DRIVER_ID}}/${{ steps.fluent_postgres_driver_release.outputs.id }}/g" \
-e "s/{{FLUENT_POSTGRES_DRIVER_DESCRIPTION}}/${{ steps.fluent_postgres_driver_release.outputs.description }}/g" \
-e "s/{{FLUENT_MYSQL_DRIVER_RELEASE}}/${{ steps.fluent_mysql_driver_release.outputs.release }}/g" \
-e "s/{{FLUENT_MYSQL_DRIVER_ID}}/${{ steps.fluent_mysql_driver_release.outputs.id }}/g" \
-e "s/{{FLUENT_MYSQL_DRIVER_DESCRIPTION}}/${{ steps.fluent_mysql_driver_release.outputs.description }}/g" \
-e "s/{{FLUENT_SQLITE_DRIVER_RELEASE}}/${{ steps.fluent_sqlite_driver_release.outputs.release }}/g" \
-e "s/{{FLUENT_SQLITE_DRIVER_ID}}/${{ steps.fluent_sqlite_driver_release.outputs.id }}/g" \
-e "s/{{FLUENT_SQLITE_DRIVER_DESCRIPTION}}/${{ steps.fluent_sqlite_driver_release.outputs.description }}/g" \
-e "s/{{FLUENT_MONGO_DRIVER_RELEASE}}/${{ steps.fluent_mongo_driver_release.outputs.release }}/g" \
-e "s/{{FLUENT_MONGO_DRIVER_ID}}/${{ steps.fluent_mongo_driver_release.outputs.id }}/g" \
-e "s/{{FLUENT_MONGO_DRIVER_DESCRIPTION}}/${{ steps.fluent_mongo_driver_release.outputs.description }}/g" \
-e "s/{{POSTGRES_NIO_RELEASE}}/${{ steps.postgres_nio_release.outputs.release }}/g" \
-e "s/{{POSTGRES_NIO_ID}}/${{ steps.postgres_nio_release.outputs.id }}/g" \
-e "s/{{POSTGRES_NIO_DESCRIPTION}}/${{ steps.postgres_nio_release.outputs.description }}/g" \
-e "s/{{MYSQL_NIO_RELEASE}}/${{ steps.mysql_nio_release.outputs.release }}/g" \
-e "s/{{MYSQL_NIO_ID}}/${{ steps.mysql_nio_release.outputs.id }}/g" \
-e "s/{{MYSQL_NIO_DESCRIPTION}}/${{ steps.mysql_nio_release.outputs.description }}/g" \
-e "s/{{SQLITE_NIO_RELEASE}}/${{ steps.sqlite_nio_release.outputs.release }}/g" \
-e "s/{{SQLITE_NIO_ID}}/${{ steps.sqlite_nio_release.outputs.id }}/g" \
-e "s/{{SQLITE_NIO_DESCRIPTION}}/${{ steps.sqlite_nio_release.outputs.description }}/g" \
-e "s/{{POSTGRES_KIT_RELEASE}}/${{ steps.postgres_kit_release.outputs.release }}/g" \
-e "s/{{POSTGRES_KIT_ID}}/${{ steps.postgres_kit_release.outputs.id }}/g" \
-e "s/{{POSTGRES_KIT_DESCRIPTION}}/${{ steps.postgres_kit_release.outputs.description }}/g" \
-e "s/{{MYSQL_KIT_RELEASE}}/${{ steps.mysql_kit_release.outputs.release }}/g" \
-e "s/{{MYSQL_KIT_ID}}/${{ steps.mysql_kit_release.outputs.id }}/g" \
-e "s/{{MYSQL_KIT_DESCRIPTION}}/${{ steps.mysql_kit_release.outputs.description }}/g" \
-e "s/{{SQLITE_KIT_RELEASE}}/${{ steps.sqlite_kit_release.outputs.release }}/g" \
-e "s/{{SQLITE_KIT_ID}}/${{ steps.sqlite_kit_release.outputs.id }}/g" \
-e "s/{{SQLITE_KIT_DESCRIPTION}}/${{ steps.sqlite_kit_release.outputs.description }}/g" \
-e "s/{{SQL_KIT_RELEASE}}/${{ steps.sql_kit_release.outputs.release }}/g" \
-e "s/{{SQL_KIT_ID}}/${{ steps.sql_kit_release.outputs.id }}/g" \
-e "s/{{SQL_KIT_DESCRIPTION}}/${{ steps.sql_kit_release.outputs.description }}/g" \
-e "s/{{APNS_RELEASE}}/${{ steps.apns_release.outputs.release }}/g" \
-e "s/{{APNS_ID}}/${{ steps.apns_release.outputs.id }}/g" \
-e "s/{{APNS_DESCRIPTION}}/${{ steps.apns_release.outputs.description }}/g" \
-e "s/{{QUEUES_RELEASE}}/${{ steps.queues_release.outputs.release }}/g" \
-e "s/{{QUEUES_ID}}/${{ steps.queues_release.outputs.id }}/g" \
-e "s/{{QUEUES_DESCRIPTION}}/${{ steps.queues_release.outputs.description }}/g" \
-e "s/{{QUEUES_REDIS_DRIVER_RELEASE}}/${{ steps.queues_redis_driver_release.outputs.release }}/g" \
-e "s/{{QUEUES_REDIS_DRIVER_ID}}/${{ steps.queues_redis_driver_release.outputs.id }}/g" \
-e "s/{{QUEUES_REDIS_DRIVER_DESCRIPTION}}/${{ steps.queues_redis_driver_release.outputs.description }}/g" \
-e "s/{{REDIS_RELEASE}}/${{ steps.redis_release.outputs.release }}/g" \
-e "s/{{REDIS_ID}}/${{ steps.redis_release.outputs.id }}/g" \
-e "s/{{REDIS_DESCRIPTION}}/${{ steps.redis_release.outputs.description }}/g" \
-e "s/{{JWT_RELEASE}}/${{ steps.jwt_release.outputs.release }}/g" \
-e "s/{{JWT_ID}}/${{ steps.jwt_release.outputs.id }}/g" \
-e "s/{{JWT_DESCRIPTION}}/${{ steps.jwt_release.outputs.description }}/g" \
-e "s/{{JWT_KIT_RELEASE}}/${{ steps.jwt_kit_release.outputs.release }}/g" \
-e "s/{{JWT_KIT_ID}}/${{ steps.jwt_kit_release.outputs.id }}/g" \
-e "s/{{JWT_KIT_DESCRIPTION}}/${{ steps.jwt_kit_release.outputs.description }}/g" \
-e "s/{{WEBSOCKET_KIT_RELEASE}}/${{ steps.websocket_kit_release.outputs.release }}/g" \
-e "s/{{WEBSOCKET_KIT_ID}}/${{ steps.websocket_kit_release.outputs.id }}/g" \
-e "s/{{WEBSOCKET_KIT_DESCRIPTION}}/${{ steps.websocket_kit_release.outputs.description }}/g" \
-e "s/{{ROUTING_KIT_RELEASE}}/${{ steps.routing_kit_release.outputs.release }}/g" \
-e "s/{{ROUTING_KIT_ID}}/${{ steps.routing_kit_release.outputs.id }}/g" \
-e "s/{{ROUTING_KIT_DESCRIPTION}}/${{ steps.routing_kit_release.outputs.description }}/g" \
-e "s/{{CONSOLE_KIT_RELEASE}}/${{ steps.console_kit_release.outputs.release }}/g" \
-e "s/{{CONSOLE_KIT_ID}}/${{ steps.console_kit_release.outputs.id }}/g" \
-e "s/{{CONSOLE_KIT_DESCRIPTION}}/${{ steps.console_kit_release.outputs.description }}/g" \
-e "s/{{ASYNC_KIT_RELEASE}}/${{ steps.async_kit_release.outputs.release }}/g" \
-e "s/{{ASYNC_KIT_ID}}/${{ steps.async_kit_release.outputs.id }}/g" \
-e "s/{{ASYNC_KIT_DESCRIPTION}}/${{ steps.async_kit_release.outputs.description }}/g" \
-e "s/{{MULTIPART_KIT_RELEASE}}/${{ steps.multipart_kit_release.outputs.release }}/g" \
-e "s/{{MULTIPART_KIT_ID}}/${{ steps.multipart_kit_release.outputs.id }}/g" \
-e "s/{{MULTIPART_KIT_DESCRIPTION}}/${{ steps.multipart_kit_release.outputs.description }}/g" \
-e "s/{{TOOLBOX_RELEASE}}/${{ steps.toolbox_release.outputs.release }}/g" \
-e "s/{{TOOLBOX_ID}}/${{ steps.toolbox_release.outputs.id }}/g" \
-e "s/{{TOOLBOX_DESCRIPTION}}/${{ steps.toolbox_release.outputs.description }}/g" \
-e "s/{{CORE_RELEASE}}/${{ steps.core_release.outputs.release }}/g" \
-e "s/{{CORE_ID}}/${{ steps.core_release.outputs.id }}/g" \
-e "s/{{CORE_DESCRIPTION}}/${{ steps.core_release.outputs.description }}/g" \
-e "s/{{SWIFT_CODECOV_ACTION_RELEASE}}/${{ steps.swift_codecov_action_release.outputs.release }}/g" \
-e "s/{{SWIFT_CODECOV_ACTION_ID}}/${{ steps.swift_codecov_action_release.outputs.id }}/g" \
-e "s/{{SWIFT_CODECOV_ACTION_DESCRIPTION}}/${{ steps.swift_codecov_action_release.outputs.description }}/g" \
-e "s/{{API_DOCS_RELEASE}}/${{ steps.api_docs_release.outputs.release }}/g" \
-e "s/{{API_DOCS_ID}}/${{ steps.api_docs_release.outputs.id }}/g" \
-e "s/{{API_DOCS_DESCRIPTION}}/${{ steps.api_docs_release.outputs.description }}/g" \
.github/release-notes.template.md > docs/release-notes.md
- name: Commit and Push Changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --global user.name 'GitHub Actions'
git config --global user.email 'actions@github.com'
git add docs/release-notes.md
git commit -m 'Update Vapor Release Notes'
git push
- name: Trigger Deploy Workflow
uses: peter-evans/repository-dispatch@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
event-type: deploy-trigger

View File

@ -68,7 +68,7 @@ let id = try planet.requireID()
### Exists
`@ID` tiene una propiedad `exists` que representa si el modelo existe o no en la base de datos. Cuando inicializas un modelo, el valor es `false`. Después de guardar un modelo o recuperarlo de la base de datos, the value is `true`. Esta propiedad es mutable.
`@ID` tiene una propiedad `exists` que representa si el modelo existe o no en la base de datos. Cuando inicializas un modelo, el valor es `false`. Después de guardar un modelo o recuperarlo de la base de datos, el valor `true`. Esta propiedad es mutable.
```swift
if planet.$id.exists {

View File

@ -74,7 +74,6 @@ Debajo hay un listado con los tipos de datos soportados.
|`.uint{8,16,32,64}`|`UInt{8,16,32,64}`|
|`.bool`|`Bool`|
|`.datetime`|`Date` (recomendado)|
|`.time`|`Date` (omitiendo día, mes y año)|
|`.date`|`Date` (omitiendo hora y minutos del día)|
|`.float`|`Float`|
|`.double`|`Double`|

View File

@ -74,7 +74,6 @@ Supported field data types are listed below.
|`.uint{8,16,32,64}`|`UInt{8,16,32,64}`|
|`.bool`|`Bool`|
|`.datetime`|`Date` (recommended)|
|`.time`|`Date` (omitting day, month, and year)|
|`.date`|`Date` (omitting time of day)|
|`.float`|`Float`|
|`.double`|`Double`|

View File

@ -74,7 +74,6 @@ Ondersteunde velddatatypes staan hieronder vermeld.
|`.uint{8,16,32,64}`|`UInt{8,16,32,64}`|
|`.bool`|`Bool`|
|`.datetime`|`Date` (aanbevolen)|
|`.time`|`Date` (zonder dag, maand en jaar)|
|`.date`|`Date` (het tijdstip weglaten)|
|`.float`|`Float`|
|`.double`|`Double`|

View File

@ -74,7 +74,6 @@ database.schema("planets").delete()
|`.uint{8,16,32,64}`|`UInt{8,16,32,64}`|
|`.bool`|`Bool`|
|`.datetime`|`Date` (recommended)|
|`.time`|`Date` (omitting day, month, and year)|
|`.date`|`Date` (omitting time of day)|
|`.float`|`Float`|
|`.double`|`Double`|
@ -404,4 +403,4 @@ try await db.schema("planets", space: "mirror_universe")
.id()
// ...
.create()
```
```

View File

@ -1,65 +0,0 @@
# Notas de Versiones de Vapor
Debido a que es difícil, si no imposible mantener la documentación actualizada constantemente, aquí encontrarás notas de lanzamiento de varios paquetes diferentes vinculados al ecosistema Vapor.
## vapor
## fluent
## fluent-kit
## leaf
## leaf-kit
## fluent-postgres-driver
## fluent-mysql-driver
## fluent-sqlite-driver
## fluent-mongo-driver
## postgres-nio
## mysql-nio
## sqlite-nio
## postgres-kit
## mysql-kit
## sqlite-kit
## sql-kit
## apns
## queues
## queues-redis-driver
## redis
## jwt
## jwt-kit
## websocket-kit
## routing-kit
## console-kit
## async-kit
## multipart-kit
## toolbox
## core
## swift-codecov-action
## api-docs

View File

@ -1,65 +0,0 @@
# Note sulla Versione di Vapor
Siccome è difficile, se non impossibile, tenere la documentazione aggiornata costantemente, qui troverai le note sulla versione (release notes) di vari pacchetti differenti legati all'ecosistema Vapor.
## vapor
## fluent
## fluent-kit
## leaf
## leaf-kit
## fluent-postgres-driver
## fluent-mysql-driver
## fluent-sqlite-driver
## fluent-mongo-driver
## postgres-nio
## mysql-nio
## sqlite-nio
## postgres-kit
## mysql-kit
## sqlite-kit
## sql-kit
## apns
## queues
## queues-redis-driver
## redis
## jwt
## jwt-kit
## websocket-kit
## routing-kit
## console-kit
## async-kit
## multipart-kit
## toolbox
## core
## swift-codecov-action
## api-docs

View File

@ -2,64 +2,124 @@
Because it is hard, if not impossible to keep the documentation up-to-date constantly, here you will find release notes of various different packages linked to the Vapor ecosystem.
## vapor
## [vapor](https://github.com/vapor/vapor)
## fluent
---
## fluent-kit
## [fluent](https://github.com/vapor/fluent)
## leaf
---
## leaf-kit
## [fluent-kit](https://github.com/vapor/fluent-kit)
## fluent-postgres-driver
---
## fluent-mysql-driver
## [leaf](https://github.com/vapor/leaf)
## fluent-sqlite-driver
---
## fluent-mongo-driver
## [leaf-kit](https://github.com/vapor/leaf-kit)
## postgres-nio
---
## mysql-nio
## [fluent-postgres-driver](https://github.com/vapor/fluent-postgres-driver)
## sqlite-nio
---
## postgres-kit
## [fluent-mysql-driver](https://github.com/vapor/fluent-mysql-driver)
## mysql-kit
---
## sqlite-kit
## [fluent-sqlite-driver](https://github.com/vapor/fluent-sqlite-driver)
## sql-kit
---
## apns
## [fluent-mongo-driver](https://github.com/vapor/fluent-mongo-driver)
## queues
---
## queues-redis-driver
## [postgres-nio](https://github.com/vapor/postgres-nio)
## redis
---
## jwt
## [mysql-nio](https://github.com/vapor/mysql-nio)
## jwt-kit
---
## websocket-kit
## [sqlite-nio](https://github.com/vapor/sqlite-nio)
## routing-kit
---
## console-kit
## [postgres-kit](https://github.com/vapor/postgres-kit)
## async-kit
---
## multipart-kit
## [mysql-kit](https://github.com/vapor/mysql-kit)
## toolbox
---
## core
## [sqlite-kit](https://github.com/vapor/sqlite-kit)
## swift-codecov-action
---
## api-docs
## [sql-kit](https://github.com/vapor/sql-kit)
---
## [apns](https://github.com/vapor/apns)
---
## [queues](https://github.com/vapor/queues)
---
## [queues-redis-driver](https://github.com/vapor/queues-redis-driver)
---
## [redis](https://github.com/vapor/redis)
---
## [jwt](https://github.com/vapor/jwt)
---
## [jwt-kit](https://github.com/vapor/jwt-kit)
---
## [websocket-kit](https://github.com/vapor/websocket-kit)
---
## [routing-kit](https://github.com/vapor/routing-kit)
---
## [console-kit](https://github.com/vapor/console-kit)
---
## [async-kit](https://github.com/vapor/async-kit)
---
## [multipart-kit](https://github.com/vapor/multipart-kit)
---
## [toolbox](https://github.com/vapor/toolbox)
---
## [core](https://github.com/vapor/core)
---
## [swift-codecov-action](https://github.com/vapor/swift-codecov-action)
---
## [api-docs](https://github.com/vapor/api-docs)

View File

@ -105,16 +105,12 @@ struct UserAuthenticator: AsyncBasicAuthenticator {
}
```
If you add this authenticator to your app, and test the route defined above, you should see the name `"Vapor"` returned for a successful login. If the credentials are not correct, you should see a `401 Unauthorized` error.
Este protocolo requiere que implementes `authenticate(basic:for:)`, que se llamará cuando una solicitud entrante contenga la cabecera `Authorization: Basic...`. Se pasa al método una estructura `BasicAuthorization` que contiene el nombre de usuario y la contraseña.
En este autenticador de prueba, el nombre de usuario y la contraseña se prueban con valores codificados. En un autenticador real, puedes compararlo con una base de datos o una API externa. Es por eso que el método `authenticate` te permite devolver un futuro.
!!! tip "Consejo"
Las contraseñas nunca deben almacenarse en una base de datos como texto sin formato. Utiliza siempre un hash de contraseña para comparar.
Las contraseñas nunca deben almacenarse en una base de datos como texto plano. Utiliza siempre un hash de contraseña para comparar.
Si los parámetros de autenticación son correctos, en este caso coinciden con los valores codificados, se inicia sesión un `User` llamado Vapor. Si los parámetros de autenticación no coinciden, no se inicia sesión de usuario, lo que significa que la autenticación falló.
@ -757,16 +753,12 @@ Estos middlewares hacen lo siguiente:
### Protegiendo Rutas
When protecting routes for an API, you traditionally return an HTTP response with a status code such as **401 Unauthorized** if the request is not authenticated. However, this isn't a very good user experience for someone using a browser. Vapor provides a `RedirectMiddleware` for any `Authenticatable` type to use in this scenario:
Al proteger rutas en una API, tradicionalmente se devuelve una respuesta HTTP con un código de estado como **401 Unauthorized** si la solicitud no está autenticada. Sin embargo, esta no es una muy buena experiencia de usuario para alguien que usa un navegador. Vapor proporciona un `RedirectMiddleware` para cualquier tipo `Authenticatable` para usar en este escenario:
```swift
let protectedRoutes = app.grouped(User.redirectMiddleware(path: "/login?loginRequired=true"))
```
The `RedirectMiddleware` object also supports passing a closure that returns the redirect path as a `String` during creation for advanced url handling. For instance, including the path redirected from as query parameter to the redirect target for state management.
El objeto `RedirectMiddleware` también admite pasar un closure que devuelve la ruta de redireccionamiento como un `String` durante la creación para un manejo avanzado de URL. Por ejemplo, incluye la ruta redirigida como parámetro de consulta al destino de redirección para la gestión del estado.
```swift