diff --git a/.woodpecker/publish.yaml b/.woodpecker/publish.yaml
index 05d7e912..5cdef92e 100644
--- a/.woodpecker/publish.yaml
+++ b/.woodpecker/publish.yaml
@@ -23,6 +23,17 @@ variables:
       - ${CI_REPO_NAME}/system.json
     api_key:
       from_secret: forge_token
+  - &publish_manifest_base
+    image: alpine:latest
+    environment:
+      FORGE_TOKEN:
+        from_secret: forge_token
+    commands:
+      - apk update
+      - apk add curl
+      - export RELEASE_CHANNEL=$(cat .RELEASE_CHANNEL)
+      - 'curl --header "Authorization: token $${FORGE_TOKEN}" -X "DELETE" "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/system.json"'
+      - 'curl --fail --header "Authorization: token $${FORGE_TOKEN}" --upload-file ${CI_REPO_NAME}/system.json "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/system.json"'
 
 when:
   event: tag
@@ -75,40 +86,47 @@ steps:
     when:
       <<: *is_beta_channel
   release-latest:
-    depends_on: choose-latest-channel
+    depends_on:
+      - package
+      - changelog
+      - choose-latest-channel
     image: *release_plugin
     settings:
       <<: *release_base_settings
     when:
       <<: *is_latest_channel
   release-beta:
-    depends_on: choose-beta-channel
+    depends_on:
+      - package
+      - changelog
+      - choose-beta-channel
     image: *release_plugin
     settings:
       <<: *release_base_settings
       prerelease: true
     when:
       <<: *is_beta_channel
-  publish-manifest:
-    depends_on: [release-latest, release-beta]
-    image: alpine:latest
-    commands:
-      - apk update
-      - apk add curl
-      - export RELEASE_CHANNEL=$(cat .RELEASE_CHANNEL)
-      - 'curl --header "Authorization: token $${FORGE_TOKEN}" -X "DELETE" "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/system.json"'
-      - 'curl --fail --header "Authorization: token $${FORGE_TOKEN}" --upload-file ${CI_REPO_NAME}/system.json "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/system.json"'
-    secrets:
-      - forge_token
+  publish-manifest-latest:
+    <<: *publish_manifest_base
+    depends_on: release-latest
+    when:
+      <<: *is_latest_channel
+  publish-manifest-beta:
+    <<: *publish_manifest_base
+    depends_on: release-beta
+    when:
+      <<: *is_beta_channel
   publish-to-foundry-admin:
-    depends_on: [release-latest, release-beta]
+    depends_on: release-latest
     image: johannesloher/foundry-publish:v4.0.0
+    environment:
+      FVTT_PACKAGE_ID:
+        from_secret: fvtt_package_id
+      FVTT_TOKEN:
+        from_secret: fvtt_token
     commands:
       - export FVTT_MANIFEST_PATH=${CI_REPO_NAME}/system.json
       - export FVTT_MANIFEST_URL=${CI_REPO_URL}/releases/download/${CI_COMMIT_TAG}/system.json
       - foundry-publish
-    secrets:
-      - fvtt_package_id
-      - fvtt_token
     when:
       <<: *is_latest_channel
diff --git a/.woodpecker/release.yaml b/.woodpecker/release.yaml
index fce1dbdb..17966857 100644
--- a/.woodpecker/release.yaml
+++ b/.woodpecker/release.yaml
@@ -25,6 +25,11 @@ steps:
       - pnpm install --frozen-lockfile
   release:
     image: *node_image
+    environment:
+      FORGE_TOKEN_NAME:
+        from_secret: forge_token_name
+      FORGE_TOKEN:
+        from_secret: forge_token
     commands:
       - <<: *enable_pnpm
       - apt-get update
@@ -42,6 +47,3 @@ steps:
       - git tag -f $${RELEASE_VERSION}
       - git push origin ${CI_COMMIT_BRANCH}
       - git push origin $${RELEASE_VERSION}
-    secrets:
-      - forge_token_name
-      - forge_token