Compare commits
No commits in common. "main" and "v0.4.2" have entirely different histories.
26 changed files with 772 additions and 1330 deletions
|
@ -30,9 +30,6 @@ jobs:
|
||||||
- name: 🔗 Artifactview PR comment
|
- name: 🔗 Artifactview PR comment
|
||||||
if: ${{ always() && github.event_name == 'pull_request' }}
|
if: ${{ always() && github.event_name == 'pull_request' }}
|
||||||
run: |
|
run: |
|
||||||
if [[ "$GITEA_ACTIONS" == "true" ]]; then RUN_NUMBER="$GITHUB_RUN_NUMBER"; else RUN_NUMBER="$GITHUB_RUN_ID"; fi
|
echo "Run: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_NUMBER"
|
||||||
echo "Run: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$RUN_NUMBER"
|
|
||||||
echo "Pull: ${{ github.event.number }}"
|
echo "Pull: ${{ github.event.number }}"
|
||||||
|
curl -SsL --fail-with-body -w "\n" -X POST https://av.thetadev.de/.well-known/api/prComment -H "Content-Type: application/json" --data "{\"url\": \"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_NUMBER\", \"pr\": ${{ github.event.number }}, \"artifact_titles\": {\"test\":\"🧪 Test report\"}, \"artifact_paths\": {\"test\":\"/junit.xml?viewer=1\"}}"
|
||||||
curl -SsL --fail-with-body -w "\n" -X POST https://av.thetadev.de/.well-known/api/prComment -H "Content-Type: application/json" \
|
|
||||||
--data '{"url": "'"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$RUN_NUMBER"'", "pr": ${{ github.event.number }}, "artifact_titles": {"test":"🧪 Test report"}, "artifact_paths": {"test":"/junit.xml?viewer=1"}}'
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
name: DockerHub README
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "README.md"
|
|
||||||
- ".forgejo/workflows/docker-readme.yaml"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update:
|
|
||||||
runs-on: cimaster-latest
|
|
||||||
steps:
|
|
||||||
- name: 👁️ Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Docker Hub Description
|
|
||||||
uses: https://github.com/peter-evans/dockerhub-description@v4
|
|
||||||
with:
|
|
||||||
username: thetadev256
|
|
||||||
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
|
||||||
repository: thetadev256/artifactview
|
|
||||||
enable-url-completion: true
|
|
|
@ -1,63 +0,0 @@
|
||||||
name: renovate
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["main"]
|
|
||||||
paths:
|
|
||||||
- ".forgejo/workflows/renovate.yaml"
|
|
||||||
- "renovate.json"
|
|
||||||
schedule:
|
|
||||||
- cron: "0 0 * * *"
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
RENOVATE_REPOSITORIES: ${{ github.repository }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
renovate:
|
|
||||||
runs-on: docker
|
|
||||||
container:
|
|
||||||
image: renovate/renovate:39
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Load renovate repo cache
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
.tmp/cache/renovate/repository
|
|
||||||
.tmp/cache/renovate/renovate-cache-sqlite
|
|
||||||
.tmp/osv
|
|
||||||
key: repo-cache-${{ github.run_id }}
|
|
||||||
restore-keys: |
|
|
||||||
repo-cache-
|
|
||||||
|
|
||||||
- name: Run renovate
|
|
||||||
run: renovate
|
|
||||||
env:
|
|
||||||
LOG_LEVEL: info
|
|
||||||
RENOVATE_BASE_DIR: ${{ github.workspace }}/.tmp
|
|
||||||
RENOVATE_ENDPOINT: ${{ github.server_url }}
|
|
||||||
RENOVATE_PLATFORM: gitea
|
|
||||||
RENOVATE_REPOSITORY_CACHE: 'enabled'
|
|
||||||
RENOVATE_TOKEN: ${{ secrets.FORGEJO_CI_BOT_TOKEN }}
|
|
||||||
GITHUB_COM_TOKEN: ${{ secrets.GH_PUBLIC_TOKEN }}
|
|
||||||
RENOVATE_GIT_AUTHOR: 'Renovate Bot <forgejo-renovate-action@forgejo.org>'
|
|
||||||
|
|
||||||
RENOVATE_X_SQLITE_PACKAGE_CACHE: true
|
|
||||||
|
|
||||||
GIT_AUTHOR_NAME: 'Renovate Bot'
|
|
||||||
GIT_AUTHOR_EMAIL: 'forgejo-renovate-action@forgejo.org'
|
|
||||||
GIT_COMMITTER_NAME: 'Renovate Bot'
|
|
||||||
GIT_COMMITTER_EMAIL: 'forgejo-renovate-action@forgejo.org'
|
|
||||||
|
|
||||||
OSV_OFFLINE_ROOT_DIR: ${{ github.workspace }}/.tmp/osv
|
|
||||||
|
|
||||||
- name: Save renovate repo cache
|
|
||||||
if: always() && env.RENOVATE_DRY_RUN != 'full'
|
|
||||||
uses: actions/cache/save@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
.tmp/cache/renovate/repository
|
|
||||||
.tmp/cache/renovate/renovate-cache-sqlite
|
|
||||||
.tmp/osv
|
|
||||||
key: repo-cache-${{ github.run_id }}
|
|
223
CHANGELOG.md
223
CHANGELOG.md
|
@ -3,229 +3,6 @@
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
|
||||||
## [v0.4.8](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.7..v0.4.8) - 2025-01-26
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
|
||||||
|
|
||||||
- Lifetime-related lints - ([e20f6fb](https://codeberg.org/ThetaDev/artifactview/commit/e20f6fb92e86751222d2c5143ee384cdbea1159d))
|
|
||||||
|
|
||||||
### ⚙️ Miscellaneous Tasks
|
|
||||||
|
|
||||||
- *(deps)* Update rust crate async-compression to v0.4.15 (#85) - ([4f4716c](https://codeberg.org/ThetaDev/artifactview/commit/4f4716cdd86c317ede2b381d375ef8e736aee240))
|
|
||||||
- *(deps)* Update rust crate async-compression to v0.4.16 (#86) - ([9592da3](https://codeberg.org/ThetaDev/artifactview/commit/9592da3d6e2c2223174fcc459e94f29bf5067ead))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.129 (#87) - ([2e46d37](https://codeberg.org/ThetaDev/artifactview/commit/2e46d3795089ef7b2739db4d216f4db99f792071))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.131 (#88) - ([992f995](https://codeberg.org/ThetaDev/artifactview/commit/992f9954414af550fce90c9c7424ab0da2296875))
|
|
||||||
- *(deps)* Update rust crate governor to v0.6.4 (#89) - ([f1d9897](https://codeberg.org/ThetaDev/artifactview/commit/f1d9897e832b5cdb99fd81edcb38d27bd6b445f8))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.132 (#90) - ([600d18d](https://codeberg.org/ThetaDev/artifactview/commit/600d18d05b356c641a32b93b2407a1f23e2370c4))
|
|
||||||
- *(deps)* Update rust crate async-compression to v0.4.17 (#91) - ([0b3c032](https://codeberg.org/ThetaDev/artifactview/commit/0b3c0325a50cd456cb9b62f97e916f0760785a3c))
|
|
||||||
- *(deps)* Update rust crate governor to 0.7.0 (#92) - ([cbd304c](https://codeberg.org/ThetaDev/artifactview/commit/cbd304c84195983596156a95c26d65a89e93df8a))
|
|
||||||
- *(deps)* Update rust crate thiserror to v1.0.65 (#94) - ([2df196a](https://codeberg.org/ThetaDev/artifactview/commit/2df196a2e666e8186d9ff66e885123c8a48c743c))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.213 (#93) - ([e5b9105](https://codeberg.org/ThetaDev/artifactview/commit/e5b9105da1fb0c63584cc409b5dd98c1fe045f9b))
|
|
||||||
- *(deps)* Update rust crate tokio to v1.41.0 (#95) - ([1dc4fe2](https://codeberg.org/ThetaDev/artifactview/commit/1dc4fe225c01f237f6a698fced7eff72cfb8ee85))
|
|
||||||
- *(deps)* Update rust crate pin-project to v1.1.7 (#96) - ([c82bccc](https://codeberg.org/ThetaDev/artifactview/commit/c82bccca9098281fa42ded5d5527eadb3cbcce88))
|
|
||||||
- *(deps)* Update rust crate regex to v1.11.1 (#97) - ([613815a](https://codeberg.org/ThetaDev/artifactview/commit/613815aa1ebc01643e117ca9fafcb37bfe7d29d7))
|
|
||||||
- *(deps)* Update rust crate axum-test to v16.3.0 (#98) - ([b2070ec](https://codeberg.org/ThetaDev/artifactview/commit/b2070ec460e45eeb9997885bd7cf54913f9f4183))
|
|
||||||
- *(deps)* Update rust crate insta to v1.41.0 (#99) - ([5aec8d6](https://codeberg.org/ThetaDev/artifactview/commit/5aec8d677f089ff5092fe78655170d52e544baeb))
|
|
||||||
- *(deps)* Update rust crate quick-xml to 0.37.0 (#100) - ([72e20d4](https://codeberg.org/ThetaDev/artifactview/commit/72e20d413e80b86d49ea0b275ce6aece99d75314))
|
|
||||||
- *(deps)* Update rust crate reqwest to v0.12.9 (#101) - ([d45e8e6](https://codeberg.org/ThetaDev/artifactview/commit/d45e8e63c9ce4067a05839643581b9f42e4048ec))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.214 (#102) - ([2a1ebd7](https://codeberg.org/ThetaDev/artifactview/commit/2a1ebd7b854ca82cceb768202e4d9ee984007311))
|
|
||||||
- *(deps)* Update rust crate futures-lite to v2.4.0 (#103) - ([3bda063](https://codeberg.org/ThetaDev/artifactview/commit/3bda06357809e68c0804aa425e625893af1bbde2))
|
|
||||||
- *(deps)* Update rust crate insta to v1.41.1 (#104) - ([a406bff](https://codeberg.org/ThetaDev/artifactview/commit/a406bffabeeb2627cd5ef74f3520add6eb0a8d6c))
|
|
||||||
- *(deps)* Update rust crate thiserror to v1.0.66 (#105) - ([8f89fc9](https://codeberg.org/ThetaDev/artifactview/commit/8f89fc9953370c4325c63762e4451d37a1a4a64a))
|
|
||||||
- *(deps)* Update rust crate scraper to 0.21.0 (#106) - ([1f00bbf](https://codeberg.org/ThetaDev/artifactview/commit/1f00bbfac53521cf0f76cf6fc4bf23e7a5e10562))
|
|
||||||
- *(deps)* Update rust crate thiserror to v1.0.67 (#107) - ([39a76ea](https://codeberg.org/ThetaDev/artifactview/commit/39a76eaa334d3f57e30e3ba95eb781dfa7aee1ee))
|
|
||||||
- *(deps)* Update rust crate thiserror to v1.0.68 (#108) - ([a48af07](https://codeberg.org/ThetaDev/artifactview/commit/a48af07d936a77977d602649fe579941b2cd2630))
|
|
||||||
- *(deps)* Update rust crate url to v2.5.3 (#109) - ([44cc0c1](https://codeberg.org/ThetaDev/artifactview/commit/44cc0c10103eb8fc10ddcc17e559479fadcbe4f1))
|
|
||||||
- *(deps)* Update rust crate tokio to v1.41.1 (#111) - ([dd809ce](https://codeberg.org/ThetaDev/artifactview/commit/dd809ce3f322fe8dafadeb802be7fcf905aa2f02))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2 (#110) - ([8cb636c](https://codeberg.org/ThetaDev/artifactview/commit/8cb636ccc9c93800e6e98522de5c38bb05e76fdb))
|
|
||||||
- *(deps)* Update rust crate futures-lite to v2.5.0 (#112) - ([c05eb56](https://codeberg.org/ThetaDev/artifactview/commit/c05eb562a9d10945ee534ef50208aeb004023c51))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.3 (#113) - ([a695cef](https://codeberg.org/ThetaDev/artifactview/commit/a695cef57d5c73492d806958290bb37bd9613125))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.215 (#114) - ([3497592](https://codeberg.org/ThetaDev/artifactview/commit/34975924b1e1c3d5367346a1e0274a435496091f))
|
|
||||||
- *(deps)* Update rust crate flate2 to v1.0.35 (#115) - ([0b9498c](https://codeberg.org/ThetaDev/artifactview/commit/0b9498c541c0188fd7c82a99b2f778251b831df3))
|
|
||||||
- *(deps)* Update rust crate axum to v0.7.8 (#116) - ([79623d9](https://codeberg.org/ThetaDev/artifactview/commit/79623d9bc2d40e43374c4a2934d6bbac1235bae7))
|
|
||||||
- *(deps)* Update rust crate axum-extra to v0.9.5 (#117) - ([b35cfe3](https://codeberg.org/ThetaDev/artifactview/commit/b35cfe3f4fe402943ee3238b671c18449c5437ba))
|
|
||||||
- *(deps)* Update rust crate axum-test to v16.4.0 (#118) - ([e370001](https://codeberg.org/ThetaDev/artifactview/commit/e37000143e752b4bc496797de2410be33d3adf2b))
|
|
||||||
- *(deps)* Update rust crate axum to v0.7.9 (#119) - ([cab58d2](https://codeberg.org/ThetaDev/artifactview/commit/cab58d284e6b9f2e6b730d9b3f6d648d0955832d))
|
|
||||||
- *(deps)* Update rust crate quick-xml to v0.37.1 (#121) - ([dffcd16](https://codeberg.org/ThetaDev/artifactview/commit/dffcd16a60b456e9ed547b2a01342df3585e607f))
|
|
||||||
- *(deps)* Update rust crate axum-extra to v0.9.6 (#120) - ([4cf0084](https://codeberg.org/ThetaDev/artifactview/commit/4cf0084e24969d15149468de42cf6ed15e1169f5))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.133 (#122) - ([5231609](https://codeberg.org/ThetaDev/artifactview/commit/52316093cdad4ceca274e4c65035842e0413892e))
|
|
||||||
- *(deps)* Update rust crate tower-http to v0.6.2 (#123) - ([8158497](https://codeberg.org/ThetaDev/artifactview/commit/8158497a73367fb2280d48350e3afa868c006d65))
|
|
||||||
- *(deps)* Update rust crate zip to v2.2.1 (#124) - ([81c8521](https://codeberg.org/ThetaDev/artifactview/commit/81c852126ca45172bd00f75a5007263fefb5967b))
|
|
||||||
- *(deps)* Update rust crate url to v2.5.4 (#125) - ([c99dfa8](https://codeberg.org/ThetaDev/artifactview/commit/c99dfa809175e84261245b2680a964b95d81b4e3))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.30.0 (#126) - ([389dd6f](https://codeberg.org/ThetaDev/artifactview/commit/389dd6f536b9044a8b9675c3ad34fa218028d154))
|
|
||||||
- *(deps)* Update rust crate async-compression to v0.4.18 (#127) - ([05f20f4](https://codeberg.org/ThetaDev/artifactview/commit/05f20f44ac4910e600f318d656d376d52fd6b131))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.31.0 (#128) - ([5fd14aa](https://codeberg.org/ThetaDev/artifactview/commit/5fd14aada8f310fdeb0b2dc33a15de0b195ebc81))
|
|
||||||
- *(deps)* Update rust crate tracing to v0.1.41 (#129) - ([ab3479f](https://codeberg.org/ThetaDev/artifactview/commit/ab3479f0d1b3a30413df654cc9f2e7a52081b542))
|
|
||||||
- *(deps)* Update rust crate tracing-subscriber to v0.3.19 (#130) - ([1f9847b](https://codeberg.org/ThetaDev/artifactview/commit/1f9847b3edd73c1e905feb88087ee4325364ddda))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.4 (#131) - ([e9d1226](https://codeberg.org/ThetaDev/artifactview/commit/e9d122639022d3b5b68b4626e00442a81acf85f5))
|
|
||||||
- *(deps)* Update rust crate time to v0.3.37 (#132) - ([6fc7263](https://codeberg.org/ThetaDev/artifactview/commit/6fc7263f5996abefdb71fd5ecae277ec707cbdd9))
|
|
||||||
- *(deps)* Update rust crate http to v1.2.0 (#133) - ([5f517ae](https://codeberg.org/ThetaDev/artifactview/commit/5f517ae6c784e4fbc99ca69650d85621e90f776c))
|
|
||||||
- *(deps)* Update rust crate tokio to v1.42.0 (#134) - ([b15c4b0](https://codeberg.org/ThetaDev/artifactview/commit/b15c4b009a268cd4227846f166131aad5628f87d))
|
|
||||||
- *(deps)* Update rust crate tokio-util to v0.7.13 (#135) - ([f43f06c](https://codeberg.org/ThetaDev/artifactview/commit/f43f06c33462c15a8a752493f14c86d9dbde0e8d))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.5 (#136) - ([94c589c](https://codeberg.org/ThetaDev/artifactview/commit/94c589c20936c8e56be3147fd01e51d8b25e617f))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.6 (#137) - ([5e83ab5](https://codeberg.org/ThetaDev/artifactview/commit/5e83ab510614db696a7245ad5027c717b3493cab))
|
|
||||||
- *(deps)* Update rust crate chrono to v0.4.39 (#138) - ([8e9c5aa](https://codeberg.org/ThetaDev/artifactview/commit/8e9c5aad48378c2fa1a1d3d370b96de2fca5dd86))
|
|
||||||
- *(deps)* Update rust crate governor to 0.8.0 (#139) - ([b24136e](https://codeberg.org/ThetaDev/artifactview/commit/b24136ec597d2b4c579176a6a7845878549478bb))
|
|
||||||
- *(deps)* Update rust crate scraper to 0.22.0 (#140) - ([f48c570](https://codeberg.org/ThetaDev/artifactview/commit/f48c57021505091b22c36bd49bd4527e652b8d78))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.216 (#141) - ([7d9827f](https://codeberg.org/ThetaDev/artifactview/commit/7d9827f9fc52aa88f19efa371e36877723328248))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.7 (#142) - ([1e26d04](https://codeberg.org/ThetaDev/artifactview/commit/1e26d04b068f9c2e0a65a3dbcc43f66d118a6043))
|
|
||||||
- *(deps)* Update rust crate axum-test to v16.4.1 (#143) - ([3244de4](https://codeberg.org/ThetaDev/artifactview/commit/3244de48fc2691898599ab20f2baa888db9f3c82))
|
|
||||||
- *(deps)* Update rust crate zip to v2.2.2 (#144) - ([98ba21e](https://codeberg.org/ThetaDev/artifactview/commit/98ba21e7979bfbdd06fb46da8e45f97f71dc2c99))
|
|
||||||
- *(deps)* Update rust crate proptest to v1.6.0 (#145) - ([d28f979](https://codeberg.org/ThetaDev/artifactview/commit/d28f9790b825b2af749e3fcd07718faa91c2a942))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.32.0 (#146) - ([f6b0e06](https://codeberg.org/ThetaDev/artifactview/commit/f6b0e06dc1a39311c4473e0f4c3c5742a352e00f))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.8 (#147) - ([e87b71c](https://codeberg.org/ThetaDev/artifactview/commit/e87b71cc0df91f0ee71a88a3bd0127d4f8c74eea))
|
|
||||||
- *(deps)* Update rust crate env_logger to v0.11.6 (#148) - ([8e295a9](https://codeberg.org/ThetaDev/artifactview/commit/8e295a96decd532fdd854ee8950a68d496c1617d))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.134 (#149) - ([c90116c](https://codeberg.org/ThetaDev/artifactview/commit/c90116c9bac801e57062a462bd7a08a5fd6389b2))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.9 (#150) - ([2a2a8e0](https://codeberg.org/ThetaDev/artifactview/commit/2a2a8e0b310b4ddcf15f20b1189bf768499f6b75))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.217 (#151) - ([abe8f92](https://codeberg.org/ThetaDev/artifactview/commit/abe8f92ab8cdee926ca1ad4faf280427a9439e0e))
|
|
||||||
- *(deps)* Update rust crate quick-xml to v0.37.2 (#152) - ([d778789](https://codeberg.org/ThetaDev/artifactview/commit/d7787899593d60243c1efa6dd036fc44e9c51868))
|
|
||||||
- *(deps)* Update rust crate axum-extra to 0.10.0 (#154) - ([55621fb](https://codeberg.org/ThetaDev/artifactview/commit/55621fbbea51aed2234e43fa4b5ed61524ca1805))
|
|
||||||
- *(deps)* Update rust crate rstest to 0.24.0 (#155) - ([b3cc2b5](https://codeberg.org/ThetaDev/artifactview/commit/b3cc2b53dc032d2821748895c983dde49c56eb65))
|
|
||||||
- *(deps)* Update rust crate reqwest to v0.12.12 (#156) - ([cd73f48](https://codeberg.org/ThetaDev/artifactview/commit/cd73f4828f67d31dee356cb98a1ac45354e0e728))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.33.0 (#158) - ([1ce03ca](https://codeberg.org/ThetaDev/artifactview/commit/1ce03ca19f4032d5e88c8efbe83b98c45d98247d))
|
|
||||||
- *(deps)* Update rust crate insta to v1.42.0 (#159) - ([5b138fa](https://codeberg.org/ThetaDev/artifactview/commit/5b138fae112d47a08b0940d61bd403047a8567fa))
|
|
||||||
- *(deps)* Update rust crate pin-project to v1.1.8 (#161) - ([13ee5cc](https://codeberg.org/ThetaDev/artifactview/commit/13ee5cc2456180bfdc47a2d9e3a0dfe9a2dacd7d))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.135 (#162) - ([8417ea3](https://codeberg.org/ThetaDev/artifactview/commit/8417ea34a0808d2ba25194021bbe38538ce52ddf))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.10 (#163) - ([c2ee6cd](https://codeberg.org/ThetaDev/artifactview/commit/c2ee6cd84933e7cb2167b4cd34ec47f926105e59))
|
|
||||||
- *(deps)* Update rust crate tokio to v1.43.0 (#164) - ([db790e0](https://codeberg.org/ThetaDev/artifactview/commit/db790e0811e9a67a63dc4708ca928efbcff1eb49))
|
|
||||||
- *(deps)* Update rust crate thiserror to v2.0.11 (#165) - ([db0a4fd](https://codeberg.org/ThetaDev/artifactview/commit/db0a4fd5d48842ff48a375d241139ad91796422b))
|
|
||||||
- *(deps)* Update rust crate futures-lite to v2.6.0 (#166) - ([c9a6d67](https://codeberg.org/ThetaDev/artifactview/commit/c9a6d6786f763825874520776653b311bc7bd5d8))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.137 (#167) - ([558ce7d](https://codeberg.org/ThetaDev/artifactview/commit/558ce7daa8fbedac507f2d6e01961896eb8daac0))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.34.0 (#168) - ([a88977a](https://codeberg.org/ThetaDev/artifactview/commit/a88977af942d275422670984ddbefa53f8d61e13))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.35.0 (#169) - ([4042ded](https://codeberg.org/ThetaDev/artifactview/commit/4042ded5aee3763c293ffd264cb2428eb4266845))
|
|
||||||
- *(deps)* Update rust crate insta to v1.42.1 (#170) - ([0c49fe7](https://codeberg.org/ThetaDev/artifactview/commit/0c49fe751a833ca684bfc39d19e2f1eb7ea269f5))
|
|
||||||
- *(deps)* Update rust crate axum to 0.8.0 (#157) - ([2c2893d](https://codeberg.org/ThetaDev/artifactview/commit/2c2893da218737572e3943e2b72f7cec4ca6798f))
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.4.7](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.6..v0.4.7) - 2024-10-12
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
|
||||||
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.121 (#29) - ([df805bf](https://codeberg.org/ThetaDev/artifactview/commit/df805bfe8394dd148ded1d4d3af901eb97593885))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.122 (#32) - ([db67487](https://codeberg.org/ThetaDev/artifactview/commit/db67487abdfc15fe55854fcb233e0bb876b603b3))
|
|
||||||
- *(deps)* Update rust crate regex to v1.10.6 (#33) - ([7c2a976](https://codeberg.org/ThetaDev/artifactview/commit/7c2a97666d98d4959affbb8ece93c4ba162a760d))
|
|
||||||
- *(deps)* Update rust crate serde-env to 0.2.0 (#37) - ([6b7d107](https://codeberg.org/ThetaDev/artifactview/commit/6b7d107387ff3e52e62e4ed19c64e63f8048c478))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.205 (#38) - ([f9698b5](https://codeberg.org/ThetaDev/artifactview/commit/f9698b5a7f9c7f3748d4d7aa38f7dc4c0f5f2029))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.206 (#39) - ([ed86f30](https://codeberg.org/ThetaDev/artifactview/commit/ed86f30cf4a736eeb4a3d471e81b8e7f7344b53b))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.124 (#40) - ([cc6a495](https://codeberg.org/ThetaDev/artifactview/commit/cc6a4959983205ae2f40d81c9a40c8514165c0bb))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.207 (#41) - ([0c2b39a](https://codeberg.org/ThetaDev/artifactview/commit/0c2b39a68a1adb567a1582f0c1b9e024fda9ed53))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.208 (#43) - ([8073e90](https://codeberg.org/ThetaDev/artifactview/commit/8073e90f685d80565db81e23769841c16c2af261))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.125 (#44) - ([4b3639a](https://codeberg.org/ThetaDev/artifactview/commit/4b3639aea7beed4ebc421fdfe26823be164d5c1c))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.27.0 (#46) - ([3cef317](https://codeberg.org/ThetaDev/artifactview/commit/3cef3175767170824f604fcccdc912bf09745bf9))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.28.0 (#47) - ([a88a3c6](https://codeberg.org/ThetaDev/artifactview/commit/a88a3c6103e776a4d10b3f7e6e9a37a2c672cfba))
|
|
||||||
- *(deps)* Update rust crate quick_cache to v0.6.6 (#50) - ([73959c0](https://codeberg.org/ThetaDev/artifactview/commit/73959c00f2c54b682c3db8640ca12319ce4ee37d))
|
|
||||||
- *(deps)* Update rust crate reqwest to v0.12.7 (#51) - ([22d5626](https://codeberg.org/ThetaDev/artifactview/commit/22d5626bf025783a127cd99faa0052778e0253b1))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.210 (#52) - ([f8c9d6f](https://codeberg.org/ThetaDev/artifactview/commit/f8c9d6f7cb475f4642f5e4f11108c4d053cc8c7e))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.128 (#57) - ([a48e23b](https://codeberg.org/ThetaDev/artifactview/commit/a48e23beceefc1b4c51910dc7114ab62abfd189c))
|
|
||||||
- *(deps)* Update rust crate quick_cache to v0.6.9 (#59) - ([4eb2b22](https://codeberg.org/ThetaDev/artifactview/commit/4eb2b22a8f1c2b1b28f72303d364708d04790eca))
|
|
||||||
- *(deps)* Update rust crate tower-http to 0.6.0 (#61) - ([1d03f5b](https://codeberg.org/ThetaDev/artifactview/commit/1d03f5b4b09596a68893126d8b177226b62fb38a))
|
|
||||||
- *(deps)* Update rust crate axum to v0.7.6 (#62) - ([61f65e5](https://codeberg.org/ThetaDev/artifactview/commit/61f65e54db431b3e94d21188920ae88233c44d3b))
|
|
||||||
- *(deps)* Update rust crate quick-xml to v0.36.2 (#64) - ([de4459f](https://codeberg.org/ThetaDev/artifactview/commit/de4459f646444a949c390394524f284a1944a0da))
|
|
||||||
- *(deps)* Update rust crate axum-extra to v0.9.4 (#63) - ([6619ef6](https://codeberg.org/ThetaDev/artifactview/commit/6619ef60e44832dd8839bcaf82d43707965b772a))
|
|
||||||
- *(deps)* Update rust crate thiserror to v1.0.64 (#66) - ([923f97f](https://codeberg.org/ThetaDev/artifactview/commit/923f97f8e9d0855ff97685496221a180018ae686))
|
|
||||||
- *(deps)* Update rust crate tower-http to v0.6.1 (#68) - ([ca0734d](https://codeberg.org/ThetaDev/artifactview/commit/ca0734d47072d555ba07b2f512975b9379305a58))
|
|
||||||
- *(deps)* Update rust crate secrecy to 0.10.0 (#60) - ([72d0cde](https://codeberg.org/ThetaDev/artifactview/commit/72d0cde37075220cc6a938840ad30781ecdcbaa7))
|
|
||||||
|
|
||||||
### ⚙️ Miscellaneous Tasks
|
|
||||||
|
|
||||||
- *(deps)* Update rust crate zip to v2.1.6 (#31) - ([7e0aaa8](https://codeberg.org/ThetaDev/artifactview/commit/7e0aaa8362005b56526ed5a6114f473893a5cf46))
|
|
||||||
- *(deps)* Update rust crate flate2 to v1.0.31 (#34) - ([01e6a9c](https://codeberg.org/ThetaDev/artifactview/commit/01e6a9c8ad1f7c7dd5307a02a4a2b3c381aeacd6))
|
|
||||||
- *(deps)* Update rust crate rstest to 0.22.0 (#35) - ([b9d0a29](https://codeberg.org/ThetaDev/artifactview/commit/b9d0a29741138a4dd7b758417b003c9bddc35f3e))
|
|
||||||
- *(deps)* Update rust crate scraper to 0.20.0 (#36) - ([ca174a3](https://codeberg.org/ThetaDev/artifactview/commit/ca174a3aa21d0466930c2aa3291c2ecbed2ac31f))
|
|
||||||
- *(deps)* Update rust crate axum-test to v15.3.1 (#42) - ([24171c9](https://codeberg.org/ThetaDev/artifactview/commit/24171c9800aa52270c203e5a5fc40f520b6ac74c))
|
|
||||||
- *(deps)* Update rust crate tokio to v1.39.3 (#45) - ([63978d7](https://codeberg.org/ThetaDev/artifactview/commit/63978d79f9c3e276e59d7f3a558cec5f8f88e17e))
|
|
||||||
- *(deps)* Update rust crate flate2 to v1.0.33 (#48) - ([980e596](https://codeberg.org/ThetaDev/artifactview/commit/980e5968eaa909c9d7a72d78156d3465c4599abe))
|
|
||||||
- *(deps)* Update rust crate tokio-util to v0.7.12 (#49) - ([78179fd](https://codeberg.org/ThetaDev/artifactview/commit/78179fd73791c47cd3a60a37e704472109b50c15))
|
|
||||||
- *(deps)* Update rust crate insta to v1.40.0 (#54) - ([03597d1](https://codeberg.org/ThetaDev/artifactview/commit/03597d10e58eca8a56e4708971cac1750e7707f4))
|
|
||||||
- *(deps)* Update rust crate tokio to v1.40.0 (#55) - ([97b9610](https://codeberg.org/ThetaDev/artifactview/commit/97b9610f308c8ad0a083f6522c8b661c4b2c1e4f))
|
|
||||||
- *(deps)* Update rust crate zip to v2.2.0 (#56) - ([3f719ac](https://codeberg.org/ThetaDev/artifactview/commit/3f719ac939612722b82b8bad2744b4570ff40df7))
|
|
||||||
- *(deps)* Update rust crate once_cell to v1.20.0 (#58) - ([f8a95c8](https://codeberg.org/ThetaDev/artifactview/commit/f8a95c82e4a627d10906330327e94cd829d6f4c8))
|
|
||||||
- *(deps)* Update rust crate axum-test to v15.7.1 (#53) - ([7a92941](https://codeberg.org/ThetaDev/artifactview/commit/7a92941452b0e2f59e0ceda49a378f0ef43784cb))
|
|
||||||
- *(deps)* Update rust crate axum-test to v15.7.3 (#65) - ([82ca6dd](https://codeberg.org/ThetaDev/artifactview/commit/82ca6dd6bff9d8cb87a349cc8edb46f42a9721fc))
|
|
||||||
- *(deps)* Update rust crate axum-test to v16 (#69) - ([dbcee49](https://codeberg.org/ThetaDev/artifactview/commit/dbcee4945c0be57534bdd2d7d98d85767e0cf92c))
|
|
||||||
- *(deps)* Update rust crate flate2 to v1.0.34 (#70) - ([6f3544e](https://codeberg.org/ThetaDev/artifactview/commit/6f3544e3d8051697053cad5a751df6a1b4bc658b))
|
|
||||||
- *(deps)* Update rust crate axum to v0.7.7 (#71) - ([01c494c](https://codeberg.org/ThetaDev/artifactview/commit/01c494c2773dc67f922beed7e84aa2ff59fb575f))
|
|
||||||
- *(deps)* Update rust crate axum-test to v16.0.1 (#72) - ([2367512](https://codeberg.org/ThetaDev/artifactview/commit/23675124bdb15e01f037a6380f97f4d2921a34eb))
|
|
||||||
- *(deps)* Update rust crate once_cell to v1.20.1 (#73) - ([484f113](https://codeberg.org/ThetaDev/artifactview/commit/484f1136469f5459b1d464944621e9db450d2f6a))
|
|
||||||
- *(deps)* Update rust crate axum-test to v16.1.0 (#74) - ([2ed0cdc](https://codeberg.org/ThetaDev/artifactview/commit/2ed0cdc4a372c0a40de2ddc70a14b658a3619eec))
|
|
||||||
- *(deps)* Update rust crate regex to v1.11.0 (#75) - ([e436f77](https://codeberg.org/ThetaDev/artifactview/commit/e436f77c3e4969d83c42d45201c15f0375d90ad0))
|
|
||||||
- *(deps)* Update rust crate rstest to 0.23.0 (#76) - ([7c684eb](https://codeberg.org/ThetaDev/artifactview/commit/7c684eb5657eda84668bf3a1aadf38f1e4ac51db))
|
|
||||||
- *(deps)* Update rust crate reqwest to v0.12.8 (#77) - ([a3f028f](https://codeberg.org/ThetaDev/artifactview/commit/a3f028f2ad11d3e599bf20d1f92679bf8b8dafc4))
|
|
||||||
- *(deps)* Update rust crate async-compression to v0.4.13 (#78) - ([7cefbd4](https://codeberg.org/ThetaDev/artifactview/commit/7cefbd4a67e5636f046177f35fce14fff6300cb4))
|
|
||||||
- *(deps)* Update rust crate once_cell to v1.20.2 (#79) - ([8309901](https://codeberg.org/ThetaDev/artifactview/commit/8309901a8c658cdf948889df57b731147d77c949))
|
|
||||||
- *(deps)* Update rust crate pin-project to v1.1.6 (#80) - ([6ca7088](https://codeberg.org/ThetaDev/artifactview/commit/6ca7088b9c7ecd001df52f9cb35e86301c231bbb))
|
|
||||||
- *(deps)* Update rust crate axum-test to v16.2.0 (#81) - ([e63baec](https://codeberg.org/ThetaDev/artifactview/commit/e63baec2490e069953f63d158f9af212f154055b))
|
|
||||||
- *(deps)* Update rust crate secrecy to v0.10.3 (#82) - ([a2dc40f](https://codeberg.org/ThetaDev/artifactview/commit/a2dc40f4443cb3c3d1c7cf2b9e7178777c4b73e7))
|
|
||||||
- *(deps)* Update rust crate async-compression to v0.4.14 (#83) - ([51f098f](https://codeberg.org/ThetaDev/artifactview/commit/51f098f4ada63ddc550774a60a81eb3d55697b44))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.29.0 (#84) - ([5da4074](https://codeberg.org/ThetaDev/artifactview/commit/5da4074bb9e87c9d17ed70669b6e47a3d57b1e8f))
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.4.6](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.5..v0.4.6) - 2024-07-28
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
|
||||||
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.120 (#14) - ([06f9c27](https://codeberg.org/ThetaDev/artifactview/commit/06f9c278a857a272580ee1c4f8e58078556accda))
|
|
||||||
- *(deps)* Update rust crate quick_cache to 0.6.0 (#15) - ([2e06266](https://codeberg.org/ThetaDev/artifactview/commit/2e0626667e5fc344df9870cd8c924b9dd60886bb))
|
|
||||||
- *(deps)* Update rust crate serde to v1.0.204 (#16) - ([1321386](https://codeberg.org/ThetaDev/artifactview/commit/13213861ba0ea30504caa50da2a99af567876e5c))
|
|
||||||
- *(deps)* Update rust crate quick-xml to 0.36.0 (#19) - ([5f94794](https://codeberg.org/ThetaDev/artifactview/commit/5f94794d24f300762da2ab162f4336508b516eda))
|
|
||||||
- *(deps)* Update rust crate async-compression to v0.4.12 (#22) - ([88c635c](https://codeberg.org/ThetaDev/artifactview/commit/88c635cbad535eb902ea54a314e8511965a792b4))
|
|
||||||
- *(deps)* Update rust crate quick-xml to v0.36.1 (#23) - ([c5c9f85](https://codeberg.org/ThetaDev/artifactview/commit/c5c9f85e4baec58dcc2001ac3a7f005c7f501557))
|
|
||||||
- *(deps)* Update rust crate quick_cache to v0.6.2 (#24) - ([a5d4973](https://codeberg.org/ThetaDev/artifactview/commit/a5d49733fd84ba37e8c258f191bf79f4affb86f9))
|
|
||||||
- *(deps)* Update rust crate thiserror to v1.0.63 (#25) - ([b67b173](https://codeberg.org/ThetaDev/artifactview/commit/b67b1730b1e9c06b4ff99774c37c71391f48f93a))
|
|
||||||
- *(deps)* Update rust crate comrak to 0.26.0 (#27) - ([642930d](https://codeberg.org/ThetaDev/artifactview/commit/642930d397efa106267bd2aff8c413ab4173a5c6))
|
|
||||||
|
|
||||||
### ⚙️ Miscellaneous Tasks
|
|
||||||
|
|
||||||
- *(deps)* Update rust crate axum-test to v15.3.0 (#17) - ([a88f1ba](https://codeberg.org/ThetaDev/artifactview/commit/a88f1ba91c054fdb267f0edef10aacf14a909694))
|
|
||||||
- *(deps)* Lock file maintenance (#18) - ([f41a922](https://codeberg.org/ThetaDev/artifactview/commit/f41a92243c91086d5d774410b1452303fad64ccf))
|
|
||||||
- *(deps)* Update rust crate env_logger to v0.11.5 (#20) - ([c9db056](https://codeberg.org/ThetaDev/artifactview/commit/c9db0567916e500017034d6a99eb48a25a1671e0))
|
|
||||||
- *(deps)* Update rust crate scraper to v0.19.1 (#21) - ([1a5c056](https://codeberg.org/ThetaDev/artifactview/commit/1a5c056204b488e36ef95145b05a674c661a2154))
|
|
||||||
- *(deps)* Update rust crate tokio to v1.39.1 (#26) - ([057a365](https://codeberg.org/ThetaDev/artifactview/commit/057a365a0ecafe00fa84e53c736272f5db26f0f1))
|
|
||||||
- *(deps)* Update rust crate tokio to v1.39.2 (#28) - ([3ae7f88](https://codeberg.org/ThetaDev/artifactview/commit/3ae7f8813e19818098a6b67d0c6770db8a79defe))
|
|
||||||
- *(deps)* Update rust crate zip to v2 (#9) - ([a7160fa](https://codeberg.org/ThetaDev/artifactview/commit/a7160fadde6c95c6c03c90c5d2301738c8e559c2))
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.4.5](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.4..v0.4.5) - 2024-07-01
|
|
||||||
|
|
||||||
### 🚀 Features
|
|
||||||
|
|
||||||
- Update PR comment format - ([197eeea](https://codeberg.org/ThetaDev/artifactview/commit/197eeea75baa8ba44d27ec46c5f552028052869b))
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
|
||||||
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.118 (#5) - ([fc3b5a1](https://codeberg.org/ThetaDev/artifactview/commit/fc3b5a1530985012ff8364a8fa676626e7544eaf))
|
|
||||||
- *(deps)* Update rust crate quick-xml to 0.34.0 (#8) - ([595a9d0](https://codeberg.org/ThetaDev/artifactview/commit/595a9d0f4115faf5056653406b6d05bf671dc2b3))
|
|
||||||
- *(deps)* Update rust crate mime_guess to v2.0.5 (#10) - ([94191f8](https://codeberg.org/ThetaDev/artifactview/commit/94191f878d774bef165cca850fcdf00fde16d662))
|
|
||||||
- *(deps)* Update rust crate quick-xml to 0.35.0 (#11) - ([7ebe881](https://codeberg.org/ThetaDev/artifactview/commit/7ebe8815462f3e704a79af038b9b1850ed4677ed))
|
|
||||||
- *(deps)* Update rust crate serde_json to v1.0.119 (#12) - ([2525022](https://codeberg.org/ThetaDev/artifactview/commit/2525022df76b3c16951983c14a55fa9617114a8e))
|
|
||||||
- Swap crc and size column (#3) - ([7d2c686](https://codeberg.org/ThetaDev/artifactview/commit/7d2c68630ec6e75061c050a4c8b035edb472d150))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- Make example CI step compatible with GitHub+Forgejo - ([39f0019](https://codeberg.org/ThetaDev/artifactview/commit/39f0019455cc23f1b8c39b77d2aaa5af278731a9))
|
|
||||||
- Update README - ([40ae3a7](https://codeberg.org/ThetaDev/artifactview/commit/40ae3a7f557c63a0bb2abcd595218c8ec1095fe7))
|
|
||||||
|
|
||||||
### ⚙️ Miscellaneous Tasks
|
|
||||||
|
|
||||||
- *(deps)* Update rust crate proptest to v1.5.0 (#6) - ([797fc0c](https://codeberg.org/ThetaDev/artifactview/commit/797fc0c04c2a51811a24cfc431496e6e5dbf0bea))
|
|
||||||
- *(deps)* Update rust crate rstest to 0.21.0 (#7) - ([cec3aa3](https://codeberg.org/ThetaDev/artifactview/commit/cec3aa3fc02e6a871d9c221f61c3f2d8828f9f63))
|
|
||||||
- *(deps)* Lock file maintenance (#13) - ([9767167](https://codeberg.org/ThetaDev/artifactview/commit/9767167661e22775614cea7b888a19ee16c17d65))
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.4.4](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.3..v0.4.4) - 2024-06-22
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
|
||||||
|
|
||||||
- Use forge aliases for PR comment links - ([3690b02](https://codeberg.org/ThetaDev/artifactview/commit/3690b0244cf47d0d73511f5f69f5d12abe0f1837))
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.4.3](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.2..v0.4.3) - 2024-06-22
|
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
|
||||||
|
|
||||||
- 404 error on GitHub comment creation - ([d8c3ab4](https://codeberg.org/ThetaDev/artifactview/commit/d8c3ab4f36727f118b31683db87d287d9945ee14))
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.4.2](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.1..v0.4.2) - 2024-06-22
|
## [v0.4.2](https://codeberg.org/ThetaDev/artifactview/compare/v0.4.1..v0.4.2) - 2024-06-22
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
1583
Cargo.lock
generated
1583
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
26
Cargo.toml
26
Cargo.toml
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "artifactview"
|
name = "artifactview"
|
||||||
version = "0.4.8"
|
version = "0.4.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["ThetaDev <thetadev@magenta.de>"]
|
authors = ["ThetaDev <thetadev@magenta.de>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
@ -21,7 +21,7 @@ async_zip = { path = "crates/async_zip", features = [
|
||||||
"tokio-fs",
|
"tokio-fs",
|
||||||
"deflate",
|
"deflate",
|
||||||
] }
|
] }
|
||||||
axum = { version = "0.8.0", default-features = false, features = [
|
axum = { version = "0.7.5", default-features = false, features = [
|
||||||
"http1",
|
"http1",
|
||||||
"http2",
|
"http2",
|
||||||
"json",
|
"json",
|
||||||
|
@ -29,13 +29,13 @@ axum = { version = "0.8.0", default-features = false, features = [
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
] }
|
] }
|
||||||
axum-extra = { version = "0.10.0", features = ["typed-header"] }
|
axum-extra = { version = "0.9.3", features = ["typed-header"] }
|
||||||
comrak = { version = "0.35.0", default-features = false }
|
comrak = { version = "0.24.1", default-features = false }
|
||||||
dotenvy = "0.15.7"
|
dotenvy = "0.15.7"
|
||||||
envy = { path = "crates/envy" }
|
envy = { path = "crates/envy" }
|
||||||
flate2 = "1.0.30"
|
flate2 = "1.0.30"
|
||||||
futures-lite = "2.3.0"
|
futures-lite = "2.3.0"
|
||||||
governor = "0.8.0"
|
governor = "0.6.3"
|
||||||
headers = "0.4.0"
|
headers = "0.4.0"
|
||||||
http = "1.1.0"
|
http = "1.1.0"
|
||||||
humansize = "2.1.3"
|
humansize = "2.1.3"
|
||||||
|
@ -46,16 +46,16 @@ once_cell = "1.19.0"
|
||||||
path_macro = "1.0.0"
|
path_macro = "1.0.0"
|
||||||
percent-encoding = "2.3.1"
|
percent-encoding = "2.3.1"
|
||||||
pin-project = "1.1.5"
|
pin-project = "1.1.5"
|
||||||
quick_cache = "0.6.0"
|
quick_cache = "0.5.1"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
regex = "1.10.4"
|
regex = "1.10.4"
|
||||||
reqwest = { version = "0.12.4", default-features = false, features = [
|
reqwest = { version = "0.12.4", default-features = false, features = [
|
||||||
"json",
|
"json",
|
||||||
"stream",
|
"stream",
|
||||||
] }
|
] }
|
||||||
secrecy = { version = "0.10.0", features = ["serde"] }
|
secrecy = { version = "0.8.0", features = ["serde"] }
|
||||||
serde = { version = "1.0.203", features = ["derive"] }
|
serde = { version = "1.0.203", features = ["derive"] }
|
||||||
serde-env = "0.2.0"
|
serde-env = "0.1.1"
|
||||||
serde-hex = "0.1.0"
|
serde-hex = "0.1.0"
|
||||||
serde_json = "1.0.117"
|
serde_json = "1.0.117"
|
||||||
serde_urlencoded = "0.7.1"
|
serde_urlencoded = "0.7.1"
|
||||||
|
@ -66,11 +66,11 @@ syntect = { version = "5.2.0", default-features = false, features = [
|
||||||
"html",
|
"html",
|
||||||
"regex-onig",
|
"regex-onig",
|
||||||
] }
|
] }
|
||||||
thiserror = "2.0.0"
|
thiserror = "1.0.61"
|
||||||
time = { version = "0.3.36", features = ["serde-human-readable", "macros"] }
|
time = { version = "0.3.36", features = ["serde-human-readable", "macros"] }
|
||||||
tokio = { version = "1.37.0", features = ["macros", "fs", "rt-multi-thread"] }
|
tokio = { version = "1.37.0", features = ["macros", "fs", "rt-multi-thread"] }
|
||||||
tokio-util = { version = "0.7.11", features = ["io"] }
|
tokio-util = { version = "0.7.11", features = ["io"] }
|
||||||
tower-http = { version = "0.6.0", features = ["trace", "set-header"] }
|
tower-http = { version = "0.5.2", features = ["trace", "set-header"] }
|
||||||
tracing = "0.1.40"
|
tracing = "0.1.40"
|
||||||
tracing-subscriber = "0.3.18"
|
tracing-subscriber = "0.3.18"
|
||||||
url = "2.5.0"
|
url = "2.5.0"
|
||||||
|
@ -80,13 +80,13 @@ yarte = { version = "0.15.7", features = ["json"] }
|
||||||
yarte_helpers = "0.15.8"
|
yarte_helpers = "0.15.8"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
axum-test = "17.0.0"
|
axum-test = "15.0.1"
|
||||||
flate2 = "1.0.30"
|
flate2 = "1.0.30"
|
||||||
httpdate = "1.0.3"
|
httpdate = "1.0.3"
|
||||||
insta = { version = "1.39.0", features = ["json"] }
|
insta = { version = "1.39.0", features = ["json"] }
|
||||||
proptest = "1.4.0"
|
proptest = "1.4.0"
|
||||||
rstest = { version = "0.24.0", default-features = false }
|
rstest = { version = "0.20.0", default-features = false }
|
||||||
scraper = "0.22.0"
|
scraper = "0.19.0"
|
||||||
temp_testdir = "0.2.3"
|
temp_testdir = "0.2.3"
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
|
|
19
README.md
19
README.md
|
@ -22,8 +22,7 @@ teammates.
|
||||||
- 👁️ Viewer for Markdown, syntax-highlighted code and JUnit test reports
|
- 👁️ Viewer for Markdown, syntax-highlighted code and JUnit test reports
|
||||||
- 🐵 Greasemonkey userscript to automatically add a "View artifact" button to
|
- 🐵 Greasemonkey userscript to automatically add a "View artifact" button to
|
||||||
GitHub/Gitea/Forgejo
|
GitHub/Gitea/Forgejo
|
||||||
- 🦀 Fast and efficient, only extracts files from zip archive if the client does not support gzip
|
- 🦀 Fast and efficient, only extracts files from zip archive if necessary
|
||||||
- 🔗 Automatically creates pull request comments with links to all build artifacts
|
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
|
|
||||||
|
@ -71,7 +70,8 @@ The script adds a "View artifact" link with an eye icon next to every CI artifac
|
||||||
both GitHub and Forgejo.
|
both GitHub and Forgejo.
|
||||||
|
|
||||||
If you want to give every collaborator to your project easy access to previews, you can
|
If you want to give every collaborator to your project easy access to previews, you can
|
||||||
automatically create a comment with links to the artifacts under every pull request.
|
use Artifactview to automatically create a pull request comments with links to the
|
||||||
|
artifacts.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -82,9 +82,7 @@ artifacts).
|
||||||
- name: 🔗 Artifactview PR comment
|
- name: 🔗 Artifactview PR comment
|
||||||
if: ${{ always() && github.event_name == 'pull_request' }}
|
if: ${{ always() && github.event_name == 'pull_request' }}
|
||||||
run: |
|
run: |
|
||||||
if [[ "$GITEA_ACTIONS" == "true" ]]; then RUN_NUMBER="$GITHUB_RUN_NUMBER"; else RUN_NUMBER="$GITHUB_RUN_ID"; fi
|
curl -SsL --fail-with-body -w "\n" -X POST https://av.thetadev.de/.well-known/api/prComment -H "Content-Type: application/json" --data "{\"url\": \"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_NUMBER\", \"pr\": ${{ github.event.number }}}"
|
||||||
curl -SsL --fail-with-body -w "\n" -X POST https://av.thetadev.de/.well-known/api/prComment -H "Content-Type: application/json" \
|
|
||||||
--data '{"url": "'"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$RUN_NUMBER"'", "pr": ${{ github.event.number }}}'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
@ -256,12 +254,11 @@ Example list: `foo;bar`, example map: `foo=>f1;bar=>b1`
|
||||||
### Access tokens
|
### Access tokens
|
||||||
|
|
||||||
GitHub does not allow downloading artifacts for public repositories for unauthenticated
|
GitHub does not allow downloading artifacts for public repositories for unauthenticated
|
||||||
users. So you need to setup an access token to use Artifactview with GitHub.
|
users. So you need to setup an access token to use Artifactview with GitHub. These are
|
||||||
|
the permissions that need to be enabled:
|
||||||
|
|
||||||
If you are not using the `prComment` feature, you can use a fine-grained access token
|
- Repository access: All repositories
|
||||||
with the "Public repositories (read-only)" permission. If you want to create pull
|
- Repository permissions: Pull requests (Read and write)
|
||||||
request comments, you have to use a classic token with the "public_repo" scope enabled
|
|
||||||
(the fine-grained tokens did not work in my test).
|
|
||||||
|
|
||||||
Forgejo does not require access tokens to download artifacts on public repositories, so
|
Forgejo does not require access tokens to download artifacts on public repositories, so
|
||||||
you only need to create a token if you want to use the `prComment`-API. In this case,
|
you only need to create a token if you want to use the `prComment`-API. In this case,
|
||||||
|
|
|
@ -37,7 +37,7 @@ rustdoc-args = ["--cfg", "docsrs"]
|
||||||
crc32fast = "1"
|
crc32fast = "1"
|
||||||
futures-lite = { version = "2.1.0", default-features = false, features = ["std"] }
|
futures-lite = { version = "2.1.0", default-features = false, features = ["std"] }
|
||||||
pin-project = "1"
|
pin-project = "1"
|
||||||
thiserror = "2"
|
thiserror = "1"
|
||||||
|
|
||||||
async-compression = { version = "0.4.2", default-features = false, features = ["futures-io"], optional = true }
|
async-compression = { version = "0.4.2", default-features = false, features = ["futures-io"], optional = true }
|
||||||
chrono = { version = "0.4", default-features = false, features = ["clock"], optional = true }
|
chrono = { version = "0.4", default-features = false, features = ["clock"], optional = true }
|
||||||
|
@ -49,7 +49,7 @@ tokio-util = { version = "0.7", features = ["compat"], optional = true }
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
tokio-util = { version = "0.7", features = ["compat"] }
|
tokio-util = { version = "0.7", features = ["compat"] }
|
||||||
env_logger = "0.11.2"
|
env_logger = "0.11.2"
|
||||||
zip = "2.2.2"
|
zip = "0.6.3"
|
||||||
|
|
||||||
# shared across multiple examples
|
# shared across multiple examples
|
||||||
# anyhow = "1"
|
# anyhow = "1"
|
||||||
|
|
|
@ -51,7 +51,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R, E> AsyncRead for ZipEntryReader<'_, R, E>
|
impl<'a, R, E> AsyncRead for ZipEntryReader<'a, R, E>
|
||||||
where
|
where
|
||||||
R: AsyncBufRead + Unpin,
|
R: AsyncBufRead + Unpin,
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R, E> ZipEntryReader<'_, R, E>
|
impl<'a, R, E> ZipEntryReader<'a, R, E>
|
||||||
where
|
where
|
||||||
R: AsyncBufRead + Unpin,
|
R: AsyncBufRead + Unpin,
|
||||||
{
|
{
|
||||||
|
@ -118,7 +118,7 @@ enum OwnedEntry<'a> {
|
||||||
Borrow(&'a ZipEntry),
|
Borrow(&'a ZipEntry),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl OwnedEntry<'_> {
|
impl<'a> OwnedEntry<'a> {
|
||||||
pub fn entry(&self) -> &'_ ZipEntry {
|
pub fn entry(&self) -> &'_ ZipEntry {
|
||||||
match self {
|
match self {
|
||||||
OwnedEntry::Owned(entry) => entry,
|
OwnedEntry::Owned(entry) => entry,
|
||||||
|
|
|
@ -17,7 +17,7 @@ pub(crate) enum OwnedReader<'a, R> {
|
||||||
Borrow(#[pin] &'a mut R),
|
Borrow(#[pin] &'a mut R),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R> OwnedReader<'_, R>
|
impl<'a, R> OwnedReader<'a, R>
|
||||||
where
|
where
|
||||||
R: AsyncBufRead + Unpin,
|
R: AsyncBufRead + Unpin,
|
||||||
{
|
{
|
||||||
|
@ -30,7 +30,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R> AsyncBufRead for OwnedReader<'_, R>
|
impl<'a, R> AsyncBufRead for OwnedReader<'a, R>
|
||||||
where
|
where
|
||||||
R: AsyncBufRead + Unpin,
|
R: AsyncBufRead + Unpin,
|
||||||
{
|
{
|
||||||
|
@ -49,7 +49,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R> AsyncRead for OwnedReader<'_, R>
|
impl<'a, R> AsyncRead for OwnedReader<'a, R>
|
||||||
where
|
where
|
||||||
R: AsyncBufRead + Unpin,
|
R: AsyncBufRead + Unpin,
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,7 +64,7 @@ impl<'b, W: AsyncWrite + Unpin> CompressedAsyncWriter<'b, W> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<W: AsyncWrite + Unpin> AsyncWrite for CompressedAsyncWriter<'_, W> {
|
impl<'b, W: AsyncWrite + Unpin> AsyncWrite for CompressedAsyncWriter<'b, W> {
|
||||||
fn poll_write(mut self: Pin<&mut Self>, cx: &mut Context, buf: &[u8]) -> Poll<std::result::Result<usize, Error>> {
|
fn poll_write(mut self: Pin<&mut Self>, cx: &mut Context, buf: &[u8]) -> Poll<std::result::Result<usize, Error>> {
|
||||||
match *self {
|
match *self {
|
||||||
CompressedAsyncWriter::Stored(ref mut inner) => Pin::new(inner).poll_write(cx, buf),
|
CompressedAsyncWriter::Stored(ref mut inner) => Pin::new(inner).poll_write(cx, buf),
|
||||||
|
|
|
@ -251,7 +251,7 @@ impl<'b, W: AsyncWrite + Unpin> EntryStreamWriter<'b, W> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<W: AsyncWrite + Unpin> AsyncWrite for EntryStreamWriter<'_, W> {
|
impl<'a, W: AsyncWrite + Unpin> AsyncWrite for EntryStreamWriter<'a, W> {
|
||||||
fn poll_write(mut self: Pin<&mut Self>, cx: &mut Context, buf: &[u8]) -> Poll<std::result::Result<usize, Error>> {
|
fn poll_write(mut self: Pin<&mut Self>, cx: &mut Context, buf: &[u8]) -> Poll<std::result::Result<usize, Error>> {
|
||||||
let poll = Pin::new(&mut self.writer).poll_write(cx, buf);
|
let poll = Pin::new(&mut self.writer).poll_write(cx, buf);
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ fn generate_zip64many_zip() -> std::path::PathBuf {
|
||||||
|
|
||||||
let zip_file = std::fs::File::create(&path).unwrap();
|
let zip_file = std::fs::File::create(&path).unwrap();
|
||||||
let mut zip = zip::ZipWriter::new(zip_file);
|
let mut zip = zip::ZipWriter::new(zip_file);
|
||||||
let options = FileOptions::<()>::default().compression_method(zip::CompressionMethod::Stored);
|
let options = FileOptions::default().compression_method(zip::CompressionMethod::Stored);
|
||||||
|
|
||||||
for i in 0..2_u32.pow(16) + 1 {
|
for i in 0..2_u32.pow(16) + 1 {
|
||||||
zip.start_file(format!("{i}.txt"), options).unwrap();
|
zip.start_file(format!("{i}.txt"), options).unwrap();
|
||||||
|
|
|
@ -36,7 +36,7 @@ async fn test_write_zip64_file() {
|
||||||
let cursor = std::io::Cursor::new(buffer);
|
let cursor = std::io::Cursor::new(buffer);
|
||||||
let mut zip = zip::read::ZipArchive::new(cursor).unwrap();
|
let mut zip = zip::read::ZipArchive::new(cursor).unwrap();
|
||||||
let mut file1 = zip.by_name("file1").unwrap();
|
let mut file1 = zip.by_name("file1").unwrap();
|
||||||
assert_eq!(file1.extra_data(), Some(&[] as &[u8]));
|
assert_eq!(file1.extra_data(), &[] as &[u8]);
|
||||||
let mut buffer = Vec::new();
|
let mut buffer = Vec::new();
|
||||||
file1.read_to_end(&mut buffer).unwrap();
|
file1.read_to_end(&mut buffer).unwrap();
|
||||||
assert_eq!(buffer.as_slice(), &[0, 0, 0, 0]);
|
assert_eq!(buffer.as_slice(), &[0, 0, 0, 0]);
|
||||||
|
|
|
@ -77,7 +77,7 @@ where
|
||||||
|
|
||||||
struct Val(String, String);
|
struct Val(String, String);
|
||||||
|
|
||||||
impl IntoDeserializer<'_, Error> for Val {
|
impl<'de> IntoDeserializer<'de, Error> for Val {
|
||||||
type Deserializer = Self;
|
type Deserializer = Self;
|
||||||
|
|
||||||
fn into_deserializer(self) -> Self::Deserializer {
|
fn into_deserializer(self) -> Self::Deserializer {
|
||||||
|
@ -87,7 +87,7 @@ impl IntoDeserializer<'_, Error> for Val {
|
||||||
|
|
||||||
struct VarName(String);
|
struct VarName(String);
|
||||||
|
|
||||||
impl IntoDeserializer<'_, Error> for VarName {
|
impl<'de> IntoDeserializer<'de, Error> for VarName {
|
||||||
type Deserializer = Self;
|
type Deserializer = Self;
|
||||||
|
|
||||||
fn into_deserializer(self) -> Self::Deserializer {
|
fn into_deserializer(self) -> Self::Deserializer {
|
||||||
|
@ -248,7 +248,7 @@ struct Deserializer<'de, Iter: Iterator<Item = (String, String)>> {
|
||||||
inner: MapDeserializer<'de, Vars<Iter>, Error>,
|
inner: MapDeserializer<'de, Vars<Iter>, Error>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Iter: Iterator<Item = (String, String)>> Deserializer<'_, Iter> {
|
impl<'de, Iter: Iterator<Item = (String, String)>> Deserializer<'de, Iter> {
|
||||||
fn new(vars: Iter) -> Self {
|
fn new(vars: Iter) -> Self {
|
||||||
Deserializer {
|
Deserializer {
|
||||||
inner: MapDeserializer::new(Vars(vars)),
|
inner: MapDeserializer::new(Vars(vars)),
|
||||||
|
@ -308,7 +308,7 @@ where
|
||||||
/// These types are created with with the [prefixed](fn.prefixed.html) module function
|
/// These types are created with with the [prefixed](fn.prefixed.html) module function
|
||||||
pub struct Prefixed<'a>(Cow<'a, str>);
|
pub struct Prefixed<'a>(Cow<'a, str>);
|
||||||
|
|
||||||
impl Prefixed<'_> {
|
impl<'a> Prefixed<'a> {
|
||||||
/// Deserializes a type based on prefixed env variables
|
/// Deserializes a type based on prefixed env variables
|
||||||
pub fn from_env<T>(&self) -> Result<T>
|
pub fn from_env<T>(&self) -> Result<T>
|
||||||
where
|
where
|
||||||
|
@ -390,7 +390,7 @@ impl<'a> SplitEscaped<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Iterator for SplitEscaped<'_> {
|
impl<'a> Iterator for SplitEscaped<'a> {
|
||||||
type Item = String;
|
type Item = String;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
|
|
@ -7,8 +7,8 @@ license = "BSD-2-Clause"
|
||||||
repository = "https://github.com/borisfaure/junit-parser"
|
repository = "https://github.com/borisfaure/junit-parser"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
quick-xml = { version = "0.37.0", features = ["escape-html"] }
|
quick-xml = { version = "0.32.0", features = ["escape-html"] }
|
||||||
thiserror = "2.0.0"
|
thiserror = "1.0.61"
|
||||||
time = { version = "0.3.36", features = ["parsing", "serde-well-known"] }
|
time = { version = "0.3.36", features = ["parsing", "serde-well-known"] }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
||||||
"extends": [
|
|
||||||
"config:best-practices",
|
|
||||||
":semanticCommitTypeAll(chore)",
|
|
||||||
":preserveSemverRanges"
|
|
||||||
],
|
|
||||||
"automerge": true,
|
|
||||||
"automergeStrategy": "squash",
|
|
||||||
"osvVulnerabilityAlerts": true,
|
|
||||||
"labels": ["dependency-upgrade"],
|
|
||||||
"enabledManagers": ["cargo"],
|
|
||||||
"prHourlyLimit": 5
|
|
||||||
}
|
|
46
src/app.rs
46
src/app.rs
|
@ -11,13 +11,12 @@ use std::{
|
||||||
use async_zip::tokio::read::ZipEntryReader;
|
use async_zip::tokio::read::ZipEntryReader;
|
||||||
use axum::{
|
use axum::{
|
||||||
body::Body,
|
body::Body,
|
||||||
extract::{Query as XQuery, Request, State},
|
extract::{Host, Query as XQuery, Request, State},
|
||||||
http::{Response, Uri},
|
http::{Response, Uri},
|
||||||
response::{IntoResponse, Redirect},
|
response::{IntoResponse, Redirect},
|
||||||
routing::{any, get, post},
|
routing::{any, get, post},
|
||||||
Json, RequestExt, Router,
|
Json, RequestExt, Router,
|
||||||
};
|
};
|
||||||
use axum_extra::extract::Host;
|
|
||||||
use futures_lite::AsyncReadExt as LiteAsyncReadExt;
|
use futures_lite::AsyncReadExt as LiteAsyncReadExt;
|
||||||
use governor::{Quota, RateLimiter};
|
use governor::{Quota, RateLimiter};
|
||||||
use headers::{ContentType, HeaderMapExt};
|
use headers::{ContentType, HeaderMapExt};
|
||||||
|
@ -176,7 +175,7 @@ impl App {
|
||||||
.route("/.well-known/api/prComment", post(Self::pr_comment))
|
.route("/.well-known/api/prComment", post(Self::pr_comment))
|
||||||
// Prevent access to the .well-known folder since it enables abuse
|
// Prevent access to the .well-known folder since it enables abuse
|
||||||
// (e.g. SSL certificate registration by an attacker)
|
// (e.g. SSL certificate registration by an attacker)
|
||||||
.route("/.well-known/{*path}", any(|| async { Error::Inaccessible }))
|
.route("/.well-known/*path", any(|| async { Error::Inaccessible }))
|
||||||
// Serve artifact pages
|
// Serve artifact pages
|
||||||
.route("/", get(Self::get_page))
|
.route("/", get(Self::get_page))
|
||||||
.fallback(get(Self::get_page))
|
.fallback(get(Self::get_page))
|
||||||
|
@ -673,7 +672,7 @@ impl App {
|
||||||
.extract::<Json<PrCommentReq>, _>()
|
.extract::<Json<PrCommentReq>, _>()
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::BadRequest(e.body_text().into()))?;
|
.map_err(|e| Error::BadRequest(e.body_text().into()))?;
|
||||||
let query = RunQuery::from_forge_url_alias(&req.url, &state.i.cfg.load().site_aliases)?;
|
let query = RunQuery::from_forge_url(&req.url)?;
|
||||||
|
|
||||||
if let Some(limiter) = &state.i.lim_pr_comment {
|
if let Some(limiter) = &state.i.lim_pr_comment {
|
||||||
limiter.check_key(&ip).map_err(Error::from)?;
|
limiter.check_key(&ip).map_err(Error::from)?;
|
||||||
|
@ -845,11 +844,6 @@ fn pr_comment_text(p: PrCommentTextParams) -> String {
|
||||||
let query = p.query;
|
let query = p.query;
|
||||||
let mut content = "### ".to_owned();
|
let mut content = "### ".to_owned();
|
||||||
let mut prevln = "- ".to_owned();
|
let mut prevln = "- ".to_owned();
|
||||||
let a_opts = r#"target="_blank" rel="noopener noreferrer""#;
|
|
||||||
let date_started = p
|
|
||||||
.run
|
|
||||||
.date_started
|
|
||||||
.and_then(|d| d.to_offset(time::UtcOffset::UTC).format(&DATE_FORMAT).ok());
|
|
||||||
|
|
||||||
let mut prev_builds = None;
|
let mut prev_builds = None;
|
||||||
let mut np_content = None;
|
let mut np_content = None;
|
||||||
|
@ -872,7 +866,10 @@ fn pr_comment_text(p: PrCommentTextParams) -> String {
|
||||||
|
|
||||||
let write_link_icon = |s: &mut String, title: &str, href: &str| {
|
let write_link_icon = |s: &mut String, title: &str, href: &str| {
|
||||||
let (title_pfx, title) = util::split_icon_prefix(title);
|
let (title_pfx, title) = util::split_icon_prefix(title);
|
||||||
_ = write!(s, r#"{title_pfx}<a href="{href}" {a_opts}>{title}</a>"#,);
|
_ = write!(
|
||||||
|
s,
|
||||||
|
r#"{title_pfx}<a href="{href}" target="_blank" rel="noopener noreferrer">{title}</a>"#,
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Comment title
|
// Comment title
|
||||||
|
@ -880,23 +877,17 @@ fn pr_comment_text(p: PrCommentTextParams) -> String {
|
||||||
let artifacts_url = format!("{}/?url={}", p.cfg.main_url(), run_url);
|
let artifacts_url = format!("{}/?url={}", p.cfg.main_url(), run_url);
|
||||||
write_link_icon(
|
write_link_icon(
|
||||||
&mut content,
|
&mut content,
|
||||||
p.title.unwrap_or("Latest build artifacts"),
|
p.title.unwrap_or("👁️ Latest build artifacts"),
|
||||||
&artifacts_url,
|
&artifacts_url,
|
||||||
);
|
);
|
||||||
_ = write!(&mut content, "\n\n Run [#{}]({}) · ", query.run, run_url);
|
_ = write!(&mut content, " (Run [#{}]({}), ", query.run, run_url);
|
||||||
write_commit(&mut content, &p.run.head_sha);
|
write_commit(&mut content, &p.run.head_sha);
|
||||||
if let Some(date_started) = &date_started {
|
_ = content.write_str(")\n\n");
|
||||||
_ = write!(&mut content, " · {} UTC", date_started);
|
|
||||||
}
|
|
||||||
_ = content.write_str("\n\n");
|
|
||||||
|
|
||||||
// Previous run line
|
// Previous run line
|
||||||
_ = write!(&mut prevln, "[#{}]({}) [", query.run, run_url);
|
_ = write!(&mut prevln, "[#{}]({}) [", query.run, run_url);
|
||||||
write_commit(&mut prevln, &p.run.head_sha);
|
write_commit(&mut prevln, &p.run.head_sha);
|
||||||
_ = write!(
|
_ = write!(&mut prevln, "] [Artifacts]({artifacts_url}): ");
|
||||||
&mut prevln,
|
|
||||||
"] <a href=\"{artifacts_url}\" {a_opts}>Artifacts</a>: "
|
|
||||||
);
|
|
||||||
|
|
||||||
for a in p.artifacts.iter().filter(|a| !a.expired) {
|
for a in p.artifacts.iter().filter(|a| !a.expired) {
|
||||||
let mut url = p
|
let mut url = p
|
||||||
|
@ -919,8 +910,8 @@ fn pr_comment_text(p: PrCommentTextParams) -> String {
|
||||||
_ = content.write_str("<br>\n");
|
_ = content.write_str("<br>\n");
|
||||||
_ = write!(
|
_ = write!(
|
||||||
&mut prevln,
|
&mut prevln,
|
||||||
r#" <a href="{url}" {a_opts}>`{}`</a>,"#,
|
r#" <a href="{}" target="_blank" rel="noopener noreferrer">`{}`</a>,"#,
|
||||||
a.name
|
url, a.name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -928,8 +919,15 @@ fn pr_comment_text(p: PrCommentTextParams) -> String {
|
||||||
prevln.pop();
|
prevln.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(date_started) = &date_started {
|
if let Some(date_started) = &p.run.date_started {
|
||||||
_ = write!(&mut prevln, " ({} UTC)", date_started);
|
_ = write!(
|
||||||
|
&mut prevln,
|
||||||
|
" ({} UTC)",
|
||||||
|
date_started
|
||||||
|
.to_offset(time::UtcOffset::UTC)
|
||||||
|
.format(&DATE_FORMAT)
|
||||||
|
.unwrap_or_default()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if np_content.is_some() || prev_builds.is_some() {
|
if np_content.is_some() || prev_builds.is_some() {
|
||||||
|
|
|
@ -269,7 +269,6 @@ impl ArtifactApi {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(level = "error", skip_all)]
|
|
||||||
pub async fn list(&self, query: &RunQuery, cached: bool) -> Result<Vec<Artifact>> {
|
pub async fn list(&self, query: &RunQuery, cached: bool) -> Result<Vec<Artifact>> {
|
||||||
let cache_key = query.cache_key();
|
let cache_key = query.cache_key();
|
||||||
let fut = async {
|
let fut = async {
|
||||||
|
@ -291,7 +290,6 @@ impl ArtifactApi {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(level = "error", skip_all)]
|
|
||||||
pub async fn fetch(&self, query: &ArtifactQuery) -> Result<Artifact> {
|
pub async fn fetch(&self, query: &ArtifactQuery) -> Result<Artifact> {
|
||||||
if query.is_github() {
|
if query.is_github() {
|
||||||
self.fetch_github(query).await
|
self.fetch_github(query).await
|
||||||
|
@ -307,7 +305,6 @@ impl ArtifactApi {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(level = "error", skip_all)]
|
|
||||||
pub async fn download(&self, artifact: &Artifact, path: &Path) -> Result<()> {
|
pub async fn download(&self, artifact: &Artifact, path: &Path) -> Result<()> {
|
||||||
if artifact.expired {
|
if artifact.expired {
|
||||||
return Err(Error::Expired);
|
return Err(Error::Expired);
|
||||||
|
@ -419,9 +416,10 @@ impl ArtifactApi {
|
||||||
if let Err(e) = resp.error_for_status_ref() {
|
if let Err(e) = resp.error_for_status_ref() {
|
||||||
let status = resp.status();
|
let status = resp.status();
|
||||||
let msg = resp.json::<ApiError>().await.ok();
|
let msg = resp.json::<ApiError>().await.ok();
|
||||||
let msg_str = msg.map(|msg| msg.message).unwrap_or(e.to_string()).into();
|
Err(Error::HttpClient(
|
||||||
tracing::error!("API error: {msg_str}");
|
msg.map(|msg| msg.message).unwrap_or(e.to_string()).into(),
|
||||||
Err(Error::HttpClient(msg_str, status))
|
status,
|
||||||
|
))
|
||||||
} else {
|
} else {
|
||||||
Ok(resp)
|
Ok(resp)
|
||||||
}
|
}
|
||||||
|
@ -494,7 +492,6 @@ impl ArtifactApi {
|
||||||
.header(header::AUTHORIZATION, format!("token {token}")))
|
.header(header::AUTHORIZATION, format!("token {token}")))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(level = "error", skip_all)]
|
|
||||||
pub async fn workflow_run(&self, query: &RunQuery) -> Result<WorkflowRun> {
|
pub async fn workflow_run(&self, query: &RunQuery) -> Result<WorkflowRun> {
|
||||||
if query.is_github() {
|
if query.is_github() {
|
||||||
self.workflow_run_github(query).await
|
self.workflow_run_github(query).await
|
||||||
|
@ -557,7 +554,6 @@ impl ArtifactApi {
|
||||||
Ok(run.into())
|
Ok(run.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(level = "error", skip_all)]
|
|
||||||
pub async fn add_comment(
|
pub async fn add_comment(
|
||||||
&self,
|
&self,
|
||||||
query: QueryRef<'_>,
|
query: QueryRef<'_>,
|
||||||
|
@ -625,8 +621,8 @@ impl ArtifactApi {
|
||||||
) -> Result<u64> {
|
) -> Result<u64> {
|
||||||
if let Some(old_comment_id) = old_comment_id {
|
if let Some(old_comment_id) = old_comment_id {
|
||||||
let url = format!(
|
let url = format!(
|
||||||
"https://api.github.com/repos/{}/{}/issues/comments/{}",
|
"https://api.github.com/repos/{}/{}/issues/{}/comments/{}",
|
||||||
query.user, query.repo, old_comment_id
|
query.user, query.repo, issue_id, old_comment_id
|
||||||
);
|
);
|
||||||
if recreate {
|
if recreate {
|
||||||
Self::send_api_req_empty(self.req_github(Method::DELETE, url)?).await?;
|
Self::send_api_req_empty(self.req_github(Method::DELETE, url)?).await?;
|
||||||
|
@ -654,7 +650,6 @@ impl ArtifactApi {
|
||||||
Ok(new_c.id)
|
Ok(new_c.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(level = "error", skip_all)]
|
|
||||||
pub async fn find_comment(
|
pub async fn find_comment(
|
||||||
&self,
|
&self,
|
||||||
query: QueryRef<'_>,
|
query: QueryRef<'_>,
|
||||||
|
@ -707,7 +702,6 @@ impl ArtifactApi {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(level = "error", skip_all)]
|
|
||||||
pub async fn get_pr(&self, query: QueryRef<'_>, pr_id: u64) -> Result<PullRequest> {
|
pub async fn get_pr(&self, query: QueryRef<'_>, pr_id: u64) -> Result<PullRequest> {
|
||||||
let req = if query.is_github() {
|
let req = if query.is_github() {
|
||||||
self.get_github(format!(
|
self.get_github(format!(
|
||||||
|
|
|
@ -5,7 +5,7 @@ use std::{
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
use secrecy::SecretString;
|
use secrecy::Secret;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -49,9 +49,9 @@ pub struct ConfigData {
|
||||||
/// GitHub API token for downloading GitHub artifacts
|
/// GitHub API token for downloading GitHub artifacts
|
||||||
///
|
///
|
||||||
/// Using a fine-grained token with public read permissions is recommended.
|
/// Using a fine-grained token with public read permissions is recommended.
|
||||||
pub github_token: Option<SecretString>,
|
pub github_token: Option<Secret<String>>,
|
||||||
/// Forgejo/Gitea API tokens by host
|
/// Forgejo/Gitea API tokens by host
|
||||||
pub forgejo_tokens: HashMap<String, SecretString>,
|
pub forgejo_tokens: HashMap<String, Secret<String>>,
|
||||||
/// Number of artifact indexes to keep in memory
|
/// Number of artifact indexes to keep in memory
|
||||||
pub mem_cache_size: usize,
|
pub mem_cache_size: usize,
|
||||||
/// Get the client IP address from a HTTP request header
|
/// Get the client IP address from a HTTP request header
|
||||||
|
|
|
@ -164,8 +164,8 @@ impl RunQuery {
|
||||||
.ok_or(Error::BadRequest("no repository".into()))?
|
.ok_or(Error::BadRequest("no repository".into()))?
|
||||||
.to_ascii_lowercase();
|
.to_ascii_lowercase();
|
||||||
|
|
||||||
if path_segs.next().is_none_or(|s| s != "actions")
|
if !path_segs.next().is_some_and(|s| s == "actions")
|
||||||
|| path_segs.next().is_none_or(|s| s != "runs")
|
|| !path_segs.next().is_some_and(|s| s == "runs")
|
||||||
{
|
{
|
||||||
return Err(Error::BadRequest("invalid Actions URL".into()));
|
return Err(Error::BadRequest("invalid Actions URL".into()));
|
||||||
}
|
}
|
||||||
|
@ -402,7 +402,7 @@ impl<'de> Deserialize<'de> for QueryFilterList {
|
||||||
{
|
{
|
||||||
struct QueryFilterListVisitor;
|
struct QueryFilterListVisitor;
|
||||||
|
|
||||||
impl Visitor<'_> for QueryFilterListVisitor {
|
impl<'de> Visitor<'de> for QueryFilterListVisitor {
|
||||||
type Value = QueryFilterList;
|
type Value = QueryFilterList;
|
||||||
|
|
||||||
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
|
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||||
|
|
|
@ -2,10 +2,8 @@
|
||||||
source: src/app.rs
|
source: src/app.rs
|
||||||
expression: res
|
expression: res
|
||||||
---
|
---
|
||||||
### <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/1" target="_blank" rel="noopener noreferrer">Latest build artifacts</a>
|
### 👁️ <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/1" target="_blank" rel="noopener noreferrer">Latest build artifacts</a> (Run [#1](https://code.thetadev.de/thetadev/test-actions/actions/runs/1), [15eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/15eed48a8382513147a949117ef4aa659989d397))
|
||||||
|
|
||||||
Run [#1](https://code.thetadev.de/thetadev/test-actions/actions/runs/1) · [15eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/15eed48a8382513147a949117ef4aa659989d397) · 15.06.2024 01:30:00 UTC
|
|
||||||
|
|
||||||
🏠 <a href="https://code-thetadev-de--thetadev--test-actions--1-1.localhost:3000" target="_blank" rel="noopener noreferrer">Hello World ;-)</a><br>
|
🏠 <a href="https://code-thetadev-de--thetadev--test-actions--1-1.localhost:3000" target="_blank" rel="noopener noreferrer">Hello World ;-)</a><br>
|
||||||
<a href="https://code-thetadev-de--thetadev--test-actions--1-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">Test</a><br>
|
<a href="https://code-thetadev-de--thetadev--test-actions--1-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">Test</a><br>
|
||||||
<!--NEXT_PREV - [#1](https://code.thetadev.de/thetadev/test-actions/actions/runs/1) [[15eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/15eed48a8382513147a949117ef4aa659989d397)] <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/1" target="_blank" rel="noopener noreferrer">Artifacts</a>: <a href="https://code-thetadev-de--thetadev--test-actions--1-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--1-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 01:30:00 UTC) -->
|
<!--NEXT_PREV - [#1](https://code.thetadev.de/thetadev/test-actions/actions/runs/1) [[15eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/15eed48a8382513147a949117ef4aa659989d397)] [Artifacts](https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/1): <a href="https://code-thetadev-de--thetadev--test-actions--1-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--1-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 01:30:00 UTC) -->
|
||||||
|
|
|
@ -2,15 +2,13 @@
|
||||||
source: src/app.rs
|
source: src/app.rs
|
||||||
expression: res
|
expression: res
|
||||||
---
|
---
|
||||||
### <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/2" target="_blank" rel="noopener noreferrer">Latest build artifacts</a>
|
### 👁️ <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/2" target="_blank" rel="noopener noreferrer">Latest build artifacts</a> (Run [#2](https://code.thetadev.de/thetadev/test-actions/actions/runs/2), [25eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/25eed48a8382513147a949117ef4aa659989d397))
|
||||||
|
|
||||||
Run [#2](https://code.thetadev.de/thetadev/test-actions/actions/runs/2) · [25eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/25eed48a8382513147a949117ef4aa659989d397) · 15.06.2024 02:30:00 UTC
|
|
||||||
|
|
||||||
🏠 <a href="https://code-thetadev-de--thetadev--test-actions--2-1.localhost:3000" target="_blank" rel="noopener noreferrer">Hello World ;-)</a><br>
|
🏠 <a href="https://code-thetadev-de--thetadev--test-actions--2-1.localhost:3000" target="_blank" rel="noopener noreferrer">Hello World ;-)</a><br>
|
||||||
<a href="https://code-thetadev-de--thetadev--test-actions--2-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">Test</a><br>
|
<a href="https://code-thetadev-de--thetadev--test-actions--2-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">Test</a><br>
|
||||||
<details>
|
<details>
|
||||||
<summary>Previous builds</summary>
|
<summary>Previous builds</summary>
|
||||||
|
|
||||||
- [#1](https://code.thetadev.de/thetadev/test-actions/actions/runs/1) [[15eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/15eed48a8382513147a949117ef4aa659989d397)] <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/1" target="_blank" rel="noopener noreferrer">Artifacts</a>: <a href="https://code-thetadev-de--thetadev--test-actions--1-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--1-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 01:30:00 UTC)
|
- [#1](https://code.thetadev.de/thetadev/test-actions/actions/runs/1) [[15eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/15eed48a8382513147a949117ef4aa659989d397)] [Artifacts](https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/1): <a href="https://code-thetadev-de--thetadev--test-actions--1-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--1-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 01:30:00 UTC)
|
||||||
<!--NEXT_PREV - [#2](https://code.thetadev.de/thetadev/test-actions/actions/runs/2) [[25eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/25eed48a8382513147a949117ef4aa659989d397)] <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/2" target="_blank" rel="noopener noreferrer">Artifacts</a>: <a href="https://code-thetadev-de--thetadev--test-actions--2-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--2-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 02:30:00 UTC) -->
|
<!--NEXT_PREV - [#2](https://code.thetadev.de/thetadev/test-actions/actions/runs/2) [[25eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/25eed48a8382513147a949117ef4aa659989d397)] [Artifacts](https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/2): <a href="https://code-thetadev-de--thetadev--test-actions--2-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--2-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 02:30:00 UTC) -->
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,16 +2,14 @@
|
||||||
source: src/app.rs
|
source: src/app.rs
|
||||||
expression: res
|
expression: res
|
||||||
---
|
---
|
||||||
### <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/3" target="_blank" rel="noopener noreferrer">Latest build artifacts</a>
|
### 👁️ <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/3" target="_blank" rel="noopener noreferrer">Latest build artifacts</a> (Run [#3](https://code.thetadev.de/thetadev/test-actions/actions/runs/3), [35eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/35eed48a8382513147a949117ef4aa659989d397))
|
||||||
|
|
||||||
Run [#3](https://code.thetadev.de/thetadev/test-actions/actions/runs/3) · [35eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/35eed48a8382513147a949117ef4aa659989d397) · 15.06.2024 03:30:00 UTC
|
|
||||||
|
|
||||||
🏠 <a href="https://code-thetadev-de--thetadev--test-actions--3-1.localhost:3000" target="_blank" rel="noopener noreferrer">Hello World ;-)</a><br>
|
🏠 <a href="https://code-thetadev-de--thetadev--test-actions--3-1.localhost:3000" target="_blank" rel="noopener noreferrer">Hello World ;-)</a><br>
|
||||||
<a href="https://code-thetadev-de--thetadev--test-actions--3-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">Test</a><br>
|
<a href="https://code-thetadev-de--thetadev--test-actions--3-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">Test</a><br>
|
||||||
<details>
|
<details>
|
||||||
<summary>Previous builds</summary>
|
<summary>Previous builds</summary>
|
||||||
|
|
||||||
- [#1](https://code.thetadev.de/thetadev/test-actions/actions/runs/1) [[15eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/15eed48a8382513147a949117ef4aa659989d397)] <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/1" target="_blank" rel="noopener noreferrer">Artifacts</a>: <a href="https://code-thetadev-de--thetadev--test-actions--1-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--1-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 01:30:00 UTC)
|
- [#1](https://code.thetadev.de/thetadev/test-actions/actions/runs/1) [[15eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/15eed48a8382513147a949117ef4aa659989d397)] [Artifacts](https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/1): <a href="https://code-thetadev-de--thetadev--test-actions--1-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--1-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 01:30:00 UTC)
|
||||||
- [#2](https://code.thetadev.de/thetadev/test-actions/actions/runs/2) [[25eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/25eed48a8382513147a949117ef4aa659989d397)] <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/2" target="_blank" rel="noopener noreferrer">Artifacts</a>: <a href="https://code-thetadev-de--thetadev--test-actions--2-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--2-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 02:30:00 UTC)
|
- [#2](https://code.thetadev.de/thetadev/test-actions/actions/runs/2) [[25eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/25eed48a8382513147a949117ef4aa659989d397)] [Artifacts](https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/2): <a href="https://code-thetadev-de--thetadev--test-actions--2-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--2-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 02:30:00 UTC)
|
||||||
<!--NEXT_PREV - [#3](https://code.thetadev.de/thetadev/test-actions/actions/runs/3) [[35eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/35eed48a8382513147a949117ef4aa659989d397)] <a href="https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/3" target="_blank" rel="noopener noreferrer">Artifacts</a>: <a href="https://code-thetadev-de--thetadev--test-actions--3-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--3-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 03:30:00 UTC) -->
|
<!--NEXT_PREV - [#3](https://code.thetadev.de/thetadev/test-actions/actions/runs/3) [[35eed48a83](https://code.thetadev.de/thetadev/test-actions/commit/35eed48a8382513147a949117ef4aa659989d397)] [Artifacts](https://localhost:3000/?url=https://code.thetadev.de/thetadev/test-actions/actions/runs/3): <a href="https://code-thetadev-de--thetadev--test-actions--3-1.localhost:3000" target="_blank" rel="noopener noreferrer">`Hello`</a>, <a href="https://code-thetadev-de--thetadev--test-actions--3-2.localhost:3000/junit.xml?viewer=1" target="_blank" rel="noopener noreferrer">`Test`</a> (15.06.2024 03:30:00 UTC) -->
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -22,10 +22,10 @@
|
||||||
<th><a href="?C=N&O=A">Name</a> <a
|
<th><a href="?C=N&O=A">Name</a> <a
|
||||||
href="?C=N&O=D"
|
href="?C=N&O=D"
|
||||||
> ↓ </a></th>
|
> ↓ </a></th>
|
||||||
<th>CRC32</th>
|
|
||||||
<th><a href="?C=S&O=A">Size</a> <a
|
<th><a href="?C=S&O=A">Size</a> <a
|
||||||
href="?C=S&O=D"
|
href="?C=S&O=D"
|
||||||
> ↓ </a></th>
|
> ↓ </a></th>
|
||||||
|
<th>CRC32</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -45,8 +45,8 @@
|
||||||
<span class="name">{{name}}</span>
|
<span class="name">{{name}}</span>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{#if is_dir}}—{{else}}{{crc32}}{{/if}}</td>
|
|
||||||
<td>{{#if is_dir}}—{{else}}{{size}}{{/if}}</td>
|
<td>{{#if is_dir}}—{{else}}{{size}}{{/if}}</td>
|
||||||
|
<td>{{#if is_dir}}—{{else}}{{crc32}}{{/if}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -242,8 +242,8 @@ fn parse_listing(doc: &Html) -> Vec<FileEntry> {
|
||||||
|
|
||||||
FileEntry {
|
FileEntry {
|
||||||
name,
|
name,
|
||||||
crc32: parts.next().expect("crc32"),
|
|
||||||
size: parts.next().expect("size"),
|
size: parts.next().expect("size"),
|
||||||
|
crc32: parts.next().expect("crc32"),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
|
|
Loading…
Add table
Reference in a new issue