Loading...
Loading...
Compare original and translation side by side
=== Android Play Store Pipeline Setup ===
This will configure your complete Android deployment pipeline.
You'll be asked questions once, then everything will be set up automatically.
Time estimate: 15-20 minutes (mostly waiting for builds)
Press Enter to begin...=== Android Play Store 部署流水线设置 ===
该操作将配置你的完整Android部署流水线。
你只需回答一次问题,之后所有配置都会自动完成。
预计耗时:15-20分钟(主要等待构建过程)
按回车键开始...=== Step 1/5: Release Build Configuration ===
Setting up keystores and signing...
✓ Generated production keystore
✓ Generated local dev keystore
✓ Configured ProGuard/R8
✓ Updated build.gradle.kts
✓ Updated .gitignore
✓ Created keystore documentation
Keystores created:
- keystores/production-release.jks (gitignored)
- keystores/local-dev-release.jks (gitignored)
- keystores/KEYSTORE_INFO.txt (gitignored, SAVE SECURELY!)
⏱ Time: 2 minutes=== 步骤1/5:发布构建配置 ===
正在设置密钥库和签名...
✓ 生成生产环境密钥库
✓ 生成本地开发环境密钥库
✓ 配置ProGuard/R8
✓ 更新build.gradle.kts
✓ 更新.gitignore
✓ 创建密钥库说明文档
已创建的密钥库:
- keystores/production-release.jks(已加入git忽略)
- keystores/local-dev-release.jks(已加入git忽略)
- keystores/KEYSTORE_INFO.txt(已加入git忽略,请安全保存!)
⏱ 耗时:2分钟=== Step 2/5: E2E Testing Setup ===
Setting up Espresso testing...
✓ Added Espresso dependencies
✓ Created test directory structure
✓ Generated BaseTest class
✓ Created smoke tests
✓ Created navigation tests
✓ Added test utilities
✓ Created GitHub Actions workflow
Tests created:
- ExampleInstrumentedTest (smoke test)
- MainActivityTest (navigation test)
- TestUtils (custom matchers)
- ScreenshotUtil (failure screenshots)
⏱ Time: 3 minutes=== 步骤2/5:E2E测试设置 ===
正在设置Espresso测试...
✓ 添加Espresso依赖
✓ 创建测试目录结构
✓ 生成BaseTest基类
✓ 创建冒烟测试用例
✓ 创建导航测试用例
✓ 添加测试工具类
✓ 创建GitHub Actions工作流
已创建的测试用例:
- ExampleInstrumentedTest(冒烟测试)
- MainActivityTest(导航测试)
- TestUtils(自定义匹配器)
- ScreenshotUtil(失败截图工具)
⏱ 耗时:3分钟=== Step 3/5: Release Validation Setup ===
Setting up release validation...
✓ Created validation script
✓ Created validation workflow
✓ Configured quality gates
Validation configured:
- Build APK/AAB with ProGuard
- Run E2E tests on release
- Verify signing
- Check ProGuard mapping
- Analyze APK contents
⏱ Time: 2 minutes=== 步骤3/5:发布验证设置 ===
正在设置发布验证...
✓ 创建验证脚本
✓ 创建验证工作流
✓ 配置质量门禁
已配置的验证内容:
- 使用ProGuard构建APK/AAB
- 在发布构建上运行E2E测试
- 验证签名
- 检查ProGuard映射文件
- 分析APK内容
⏱ 耗时:2分钟=== Step 4/5: Play Console Integration ===
Setting up Play Console access...
✓ Created release notes structure
✓ Generated release notes templates
✓ Documented track types
✓ Created GitHub Secrets guide
✓ Generated validation script
Manual steps required:
1. Create service account in Google Cloud
2. Enable Play Developer API
3. Link to Play Console
4. Add SERVICE_ACCOUNT_JSON_PLAINTEXT to GitHub Secrets
See: distribution/PLAY_CONSOLE_SETUP.md for detailed guide
⏱ Time: 5 minutes (+ 10 minutes manual setup)=== 步骤4/5:Play Console集成 ===
正在设置Play Console访问权限...
✓ 创建发布说明结构
✓ 生成发布说明模板
✓ 记录渠道类型说明
✓ 创建GitHub Secrets配置指南
✓ 生成验证脚本
需要手动完成的步骤:
1. 在Google Cloud中创建服务账号
2. 启用Play Developer API
3. 关联到Play Console
4. 将SERVICE_ACCOUNT_JSON_PLAINTEXT添加到GitHub Secrets
详细指南请查看:distribution/PLAY_CONSOLE_SETUP.md
⏱ 耗时:5分钟(+ 10分钟手动设置时间)=== Step 5/5: CI/CD Deployment Workflows ===
Creating deployment workflows...
✓ Created deploy-internal.yml
✓ Created deploy-beta.yml
✓ Created deploy-production.yml
✓ Created manage-rollout.yml
✓ Created workflow documentation
✓ Created version increment script
Workflows created:
- Internal: Auto-deploy on push to main
- Beta: Manual deploy to alpha/beta
- Production: Staged rollout with approval
- Rollout: Manage production rollout
⏱ Time: 3 minutes=== 步骤5/5:CI/CD部署工作流 ===
正在创建部署工作流...
✓ 创建deploy-internal.yml
✓ 创建deploy-beta.yml
✓ 创建deploy-production.yml
✓ 创建manage-rollout.yml
✓ 创建工作流说明文档
✓ 创建版本号递增脚本
已创建的工作流:
- Internal:推送到main分支时自动部署
- Beta:手动部署到Alpha/Beta渠道
- Production:需要审批的分阶段发布
- Rollout:管理正式版发布进度
⏱ 耗时:3分钟=== Finalizing Setup ===
Running final checks...
✓ All files created
✓ Project structure validated
✓ Git repository ready
✓ Documentation generated
Generating summary...=== 完成最终设置 ===
正在运行最终检查...
✓ 所有文件已创建
✓ 项目结构已验证
✓ Git仓库已准备就绪
✓ 说明文档已生成
正在生成总结报告...undefinedundefined
**Expected output:**
- All 5 skills verified: ✓ Each skill's completion criteria met
- All files exist: ✓ No missing files
- .gitignore configured: ✓ Keystores excluded
- Documentation complete: ✓ All guides present
**If ANY fail:**
1. DO NOT complete pipeline skill
2. Go back to the failing skill
3. Complete that skill's criteria
4. Re-run pipeline validation
5. Only complete when ALL pass
**This is the orchestration skill - it MUST verify all prerequisites.**
**预期输出:**
- 所有5项Skill验证通过:✓ 每项Skill均满足完成条件
- 所有文件存在:✓ 无缺失文件
- .gitignore配置正确:✓ 密钥库已被排除
- 说明文档完整:✓ 所有指南均已生成
**如果任何一项失败:**
1. 不要标记流水线Skill为完成
2. 返回失败的Skill步骤
3. 完成该Skill的要求
4. 重新运行流水线验证
5. 只有当所有项都通过后,才能标记为完成
**这是编排类Skill - 必须验证所有前置条件。**╔════════════════════════════════════════════════════════════════╗
║ 🎉 Android Play Store Pipeline Setup Complete! 🎉 ║
╚════════════════════════════════════════════════════════════════╝
⏱ Total Time: ~15 minutes
📦 What Was Created:
Release Build Configuration:
✓ Production keystore (CI/CD)
✓ Local dev keystore (testing)
✓ ProGuard/R8 configuration
✓ Signing setup in build.gradle.kts
E2E Testing:
✓ Espresso dependencies
✓ 3 sample test classes
✓ Test utilities and helpers
✓ CI/CD test workflow
Release Validation:
✓ Validation script
✓ Quality gate workflow
✓ E2E tests on release builds
Play Console:
✓ Release notes structure
✓ Track documentation
✓ GitHub Secrets guide
✓ Setup instructions
CI/CD Deployment:
✓ 4 deployment workflows
✓ Rollout management
✓ Version scripts
📋 Next Steps (in order):
⚠️ CRITICAL - Secure Your Keystores:
1. Open: keystores/KEYSTORE_INFO.txt
2. Copy passwords to password manager
3. Store file in secure location (NOT git!)
4. Back up keystores to secure location
5. NEVER commit keystores to git
🔐 Setup GitHub Secrets:
1. Go to: Repository → Settings → Secrets → Actions
2. Add SERVICE_ACCOUNT_JSON_PLAINTEXT (see guide below)
3. Add signing secrets:
- SIGNING_KEY_STORE_BASE64
- SIGNING_KEY_ALIAS
- SIGNING_STORE_PASSWORD
- SIGNING_KEY_PASSWORD
See: distribution/GITHUB_SECRETS.md for detailed instructions
🎮 Setup Play Console (10-15 minutes):
1. Create service account in Google Cloud
2. Enable Play Developer API
3. Link to Play Console
4. Grant permissions
5. Download JSON key
See: distribution/PLAY_CONSOLE_SETUP.md for step-by-step guide
🏗️ Setup GitHub Environment:
1. Go to: Repository → Settings → Environments
2. Create "production" environment
3. Add required reviewers
4. Save protection rules
✅ Test the Pipeline:
1. Update release notes: fastlane/metadata/android/en-US/changelogs/default.txt
2. Commit and push to main:
git add .
git commit -m "Add Play Store deployment pipeline"
git push origin main
3. Watch GitHub Actions deploy to internal track
4. Test on device via Play Console internal testing link
🚀 First Production Release:
1. Test thoroughly in internal track
2. Deploy to beta: Actions → Deploy to Beta
3. Collect feedback from beta testers
4. Tag for production:
git tag v1.0.0
git push origin v1.0.0
5. Approve in GitHub Actions
6. Monitor staged rollout
📂 Files Created:
Keystores (SECURE THESE!):
• keystores/production-release.jks
• keystores/local-dev-release.jks
• keystores/KEYSTORE_INFO.txt
Build Configuration:
• app/build.gradle.kts (updated)
• app/proguard-rules.pro
• gradle.properties.template
Tests:
• app/src/androidTest/.../ExampleInstrumentedTest.kt
• app/src/androidTest/.../base/BaseTest.kt
• app/src/androidTest/.../screens/MainActivityTest.kt
• app/src/androidTest/.../utils/TestUtils.kt
• app/src/androidTest/.../utils/ScreenshotUtil.kt
Release Notes:
• fastlane/metadata/android/en-US/changelogs/default.txt
• fastlane/metadata/android/README.md
• docs/PLAY_STORE_TRACKS.md
Documentation:
• PLAY_CONSOLE_SETUP.md (project root)
• GITHUB_SECRETS.md (if needed)
• .github/workflows/README.md
Workflows:
• .github/workflows/deploy-internal.yml
• .github/workflows/deploy-beta.yml
• .github/workflows/deploy-production.yml
• .github/workflows/manage-rollout.yml
• .github/workflows/android-test.yml
• .github/workflows/release-validation.yml
Scripts:
• scripts/validate-playstore.py
• scripts/increment-version.sh
• scripts/validate-release.sh
🔗 Important Links:
📖 Documentation:
- Play Console Setup: distribution/PLAY_CONSOLE_SETUP.md
- GitHub Secrets: distribution/GITHUB_SECRETS.md
- Workflow Usage: .github/workflows/README.md
- Release Tracks: distribution/TRACKS.md
🌐 External Resources:
- Play Console: https://play.google.com/console/
- Google Cloud: https://console.cloud.google.com/
- GitHub Actions: https://github.com/{org}/{repo}/actions
⚠️ Important Reminders:
Security:
⚠️ NEVER commit keystores to git
⚠️ Store keystore passwords securely
⚠️ Rotate service account keys annually
⚠️ Review Play Console audit logs
First Upload:
⚠️ First Play Store upload MUST be manual
⚠️ Create app in Play Console first
⚠️ Upload one APK/AAB manually
⚠️ Then automated uploads will work
Version Management:
⚠️ Version code must increase each upload
⚠️ Use scripts/increment-version.sh
⚠️ Keep mapping files for each release
Monitoring:
⚠️ Monitor crash-free rate (target: >99%)
⚠️ Use staged rollouts (start 5-10%)
⚠️ Review user feedback actively
⚠️ Be ready to halt rollout if needed
📊 Pipeline Overview:
Development → Push to main
↓
Internal Testing (automatic)
↓
Test on device, fix bugs
↓
Manual: Deploy to Beta Track
↓
Beta Testing (1-2 weeks)
↓
Collect feedback, fix
↓
Tag version: v1.0.0
↓
Production Deployment (requires approval)
↓
5% Rollout (monitor 24-48h)
↓
Increase to 20% (if stable)
↓
Increase to 50% (if stable)
↓
Complete to 100%
🎓 Learning Resources:
If you're new to any of these concepts:
- ProGuard/R8: See app/proguard-rules.pro comments
- Espresso Testing: See app/src/androidTest/README.md
- GitHub Actions: See .github/workflows/README.md
- Play Console: See distribution/PLAY_CONSOLE_SETUP.md
- Staged Rollouts: See distribution/TRACKS.md
💬 Need Help?
Common issues and solutions:
- "Build fails": Check signing secrets are correct
- "Tests fail": Review test logs in GitHub Actions
- "Upload fails": Verify service account permissions
- "Version error": Run scripts/increment-version.sh
Resources:
- GitHub Actions logs (detailed error messages)
- Play Console support (console help)
- Documentation in this repository
╔════════════════════════════════════════════════════════════════╗
║ Your Android deployment pipeline is ready! 🚀 ║
║ ║
║ Start with the "Next Steps" section above. ║
║ Questions? Check the documentation files created. ║
╚════════════════════════════════════════════════════════════════╝╔════════════════════════════════════════════════════════════════╗
║ 🎉 Android Play Store部署流水线设置完成! 🎉 ║
╚════════════════════════════════════════════════════════════════╝
⏱ 总耗时:约15分钟
📦 已完成的配置:
发布构建配置:
✓ 生产环境密钥库(用于CI/CD)
✓ 本地开发环境密钥库(用于测试)
✓ ProGuard/R8配置
✓ build.gradle.kts中的签名设置
E2E测试:
✓ Espresso依赖
✓ 3个示例测试类
✓ 测试工具与辅助类
✓ CI/CD测试工作流
发布验证:
✓ 验证脚本
✓ 质量门禁工作流
✓ 发布构建的E2E测试
Play Console集成:
✓ 发布说明结构
✓ 渠道说明文档
✓ GitHub Secrets配置指南
✓ 设置操作指南
CI/CD部署:
✓ 4个部署工作流
✓ 发布进度管理
✓ 版本管理脚本
📋 后续步骤(按顺序执行):
⚠️ 重要 - 保护你的密钥库:
1. 打开:keystores/KEYSTORE_INFO.txt
2. 将密码复制到密码管理器
3. 将文件存储在安全位置(不要提交到Git!)
4. 将密钥库备份到安全位置
5. 绝对不要将密钥库提交到Git
🔐 设置GitHub Secrets:
1. 访问:仓库 → 设置 → Secrets → Actions
2. 添加SERVICE_ACCOUNT_JSON_PLAINTEXT(请查看下方指南)
3. 添加签名密钥:
- SIGNING_KEY_STORE_BASE64
- SIGNING_KEY_ALIAS
- SIGNING_STORE_PASSWORD
- SIGNING_KEY_PASSWORD
详细说明请查看:distribution/GITHUB_SECRETS.md
🎮 设置Play Console(10-15分钟):
1. 在Google Cloud中创建服务账号
2. 启用Play Developer API
3. 关联到Play Console
4. 授予权限
5. 下载JSON密钥
分步指南请查看:distribution/PLAY_CONSOLE_SETUP.md
🏗️ 设置GitHub环境:
1. 访问:仓库 → 设置 → Environments
2. 创建「production」环境
3. 添加必要的审核人员
4. 保存保护规则
✅ 测试流水线:
1. 更新发布说明:fastlane/metadata/android/en-US/changelogs/default.txt
2. 提交并推送到main分支:
git add .
git commit -m "添加Play Store部署流水线"
git push origin main
3. 查看GitHub Actions自动部署到内部测试渠道
4. 通过Play Console内部测试链接在设备上测试
🚀 首次正式版发布:
1. 在内部测试渠道中充分测试
2. 部署到Beta渠道:Actions → Deploy to Beta
3. 收集Beta测试用户的反馈
4. 标记正式版版本:
git tag v1.0.0
git push origin v1.0.0
5. 在GitHub Actions中审批发布
6. 监控分阶段发布进度
📂 已创建的文件:
密钥库(请妥善保管!):
• keystores/production-release.jks
• keystores/local-dev-release.jks
• keystores/KEYSTORE_INFO.txt
构建配置:
• app/build.gradle.kts(已更新)
• app/proguard-rules.pro
• gradle.properties.template
测试用例:
• app/src/androidTest/.../ExampleInstrumentedTest.kt
• app/src/androidTest/.../base/BaseTest.kt
• app/src/androidTest/.../screens/MainActivityTest.kt
• app/src/androidTest/.../utils/TestUtils.kt
• app/src/androidTest/.../utils/ScreenshotUtil.kt
发布说明:
• fastlane/metadata/android/en-US/changelogs/default.txt
• fastlane/metadata/android/README.md
• docs/PLAY_STORE_TRACKS.md
说明文档:
• PLAY_CONSOLE_SETUP.md(项目根目录)
• GITHUB_SECRETS.md(如有需要)
• .github/workflows/README.md
工作流:
• .github/workflows/deploy-internal.yml
• .github/workflows/deploy-beta.yml
• .github/workflows/deploy-production.yml
• .github/workflows/manage-rollout.yml
• .github/workflows/android-test.yml
• .github/workflows/release-validation.yml
脚本:
• scripts/validate-playstore.py
• scripts/increment-version.sh
• scripts/validate-release.sh
🔗 重要链接:
📖 说明文档:
- Play Console设置:distribution/PLAY_CONSOLE_SETUP.md
- GitHub Secrets配置:distribution/GITHUB_SECRETS.md
- 工作流使用方法:.github/workflows/README.md
- 发布渠道说明:distribution/TRACKS.md
🌐 外部资源:
- Play Console: https://play.google.com/console/
- Google Cloud: https://console.cloud.google.com/
- GitHub Actions: https://github.com/{org}/{repo}/actions
⚠️ 重要提醒:
安全相关:
⚠️ 绝对不要将密钥库提交到Git
⚠️ 妥善保管密钥库密码
⚠️ 每年轮换服务账号密钥
⚠️ 定期查看Play Console审计日志
首次上传:
⚠️ 首次上传到Play Store必须手动完成
⚠️ 先在Play Console中创建应用
⚠️ 手动上传一个APK/AAB
⚠️ 之后才能使用自动化上传
版本管理:
⚠️ 每次上传必须递增版本号
⚠️ 使用scripts/increment-version.sh脚本
⚠️ 保存每个版本的映射文件
监控:
⚠️ 监控无崩溃率(目标:>99%)
⚠️ 使用分阶段发布(初始5-10%)
⚠️ 积极查看用户反馈
⚠️ 随时准备暂停发布
📊 流水线流程概览:
开发 → 推送到main分支
↓
内部测试(自动部署)
↓
在设备上测试,修复问题
↓
手动操作:部署到Beta渠道
↓
Beta测试(1-2周)
↓
收集反馈,修复问题
↓
标记版本:v1.0.0
↓
正式版发布(需要审批)
↓
5%用户覆盖(监控24-48小时)
↓
扩大到20%(如果稳定)
↓
扩大到50%(如果稳定)
↓
100%用户覆盖
🎓 学习资源:
如果你对以下概念不熟悉:
- ProGuard/R8: 查看app/proguard-rules.pro中的注释
- Espresso测试: 查看app/src/androidTest/README.md
- GitHub Actions: 查看.github/workflows/README.md
- Play Console: 查看distribution/PLAY_CONSOLE_SETUP.md
- 分阶段发布: 查看distribution/TRACKS.md
💬 需要帮助?
常见问题及解决方案:
- 「构建失败」: 检查签名密钥是否正确
- 「测试失败」: 查看GitHub Actions中的测试日志
- 「上传失败」: 验证服务账号权限
- 「版本错误」: 运行scripts/increment-version.sh脚本
资源:
- GitHub Actions日志(包含详细错误信息)
- Play Console支持(控制台内帮助)
- 本仓库中的说明文档
╔════════════════════════════════════════════════════════════════╗
║ 你的Android部署流水线已准备就绪! 🚀 ║
║ ║
║ 请从上方的「后续步骤」开始操作。 ║
║ 如有疑问,请查看已生成的说明文档。 ║
╚════════════════════════════════════════════════════════════════╝❌ Error: Not an Android project
This directory doesn't appear to be an Android project.
Expected: app/build.gradle.kts or app/build.gradle
Solution: Run this skill from your Android project root directory.❌ Error: Cannot determine package name
Could not find package name in app/build.gradle.kts
Solution: Add namespace or applicationId to your build file:
android {
namespace = "com.example.app"
}⚠️ Warning: Git repository not initialized
This is not a git repository. The pipeline works best with git.
Continue anyway? (y/n)❌ 错误:不是Android项目
当前目录似乎不是Android项目。
预期文件:app/build.gradle.kts 或 app/build.gradle
解决方案:在Android项目的根目录运行该Skill。❌ 错误:无法确定包名
在app/build.gradle.kts中未找到包名
解决方案:在构建文件中添加namespace或applicationId:
android {
namespace = "com.example.app"
}⚠️ 警告:Git仓库未初始化
当前目录不是Git仓库。流水线在Git环境下运行效果最佳。
是否继续?(y/n)❌ Error in Step 1/5: Release Build Setup
Failed to generate keystore.
Possible causes:
- keytool not found (JDK not installed)
- Insufficient permissions
- Directory doesn't exist
Fix: Install JDK 17 and try again❌ Error in Step 2/5: E2E Testing Setup
Failed to add Espresso dependencies.
Possible causes:
- build.gradle.kts has syntax errors
- File is read-only
Fix: Check build.gradle.kts is valid and writable❌ 步骤1/5错误:发布构建设置
生成密钥库失败。
可能原因:
- 未找到keytool(未安装JDK)
- 权限不足
- 目录不存在
解决方案:安装JDK 17后重试❌ 步骤2/5错误:E2E测试设置
添加Espresso依赖失败。
可能原因:
- build.gradle.kts存在语法错误
- 文件为只读状态
解决方案:检查build.gradle.kts是否有效且可写入Pipeline setup cancelled by user.
Completed steps:
✓ Step 1/5: Release Build Setup
✓ Step 2/5: E2E Testing Setup
✗ Step 3/5: Cancelled
To resume:
Run the skill again - completed steps will be detected
Or run individual skills:
- android-release-validation
- android-playstore-setup
- android-playstore-publishing流水线设置已被用户取消。
已完成的步骤:
✓ 步骤1/5:发布构建设置
✓ 步骤2/5:E2E测试设置
✗ 步骤3/5:已取消
恢复方法:
重新运行该Skill - 已完成的步骤会被自动检测
或单独运行剩余Skill:
- android-release-validation
- android-playstore-setup
- android-playstore-publishing--resume Resume from last failed step
--skip=1,2 Skip steps 1 and 2 (already done)--clean Remove all generated files and start fresh--dry-run Show what would be done without making changes--resume 从最后失败的步骤恢复
--skip=1,2 跳过步骤1和2(已完成)--clean 删除所有生成的文件,重新开始--dry-run 显示将要执行的操作,但不实际修改文件.android-pipeline.ymlproject:
package_name: com.example.app
app_name: MyApp
main_activity: MainActivity
organization:
name: Example Corp
unit: Engineering
city: San Francisco
state: California
country: US
testing:
locales:
- en-US
- de-DE
- es-ES
test_orchestrator: true
deployment:
tracks:
internal: true
beta: true
production: true
production_approval: true--config=.android-pipeline.yml.android-pipeline.ymlproject:
package_name: com.example.app
app_name: MyApp
main_activity: MainActivity
organization:
name: Example Corp
unit: Engineering
city: San Francisco
state: California
country: US
testing:
locales:
- en-US
- de-DE
- es-ES
test_orchestrator: true
deployment:
tracks:
internal: true
beta: true
production: true
production_approval: true--config=.android-pipeline.ymlundefinedundefinedundefinedundefined.android-pipeline.ymlPIPELINE_SETUP.mdscripts/test-pipeline.sh.gitignoreapp/build.gradle.ktsREADME.md.android-pipeline.ymlPIPELINE_SETUP.mdscripts/test-pipeline.sh.gitignoreapp/build.gradle.ktsREADME.md./gradlew assembleRelease./gradlew connectedDebugAndroidTest./gradlew connectedReleaseAndroidTest./gradlew assembleRelease./gradlew connectedDebugAndroidTest./gradlew connectedReleaseAndroidTestandroid-release-build-setupandroid-e2e-testing-setupandroid-release-validationandroid-playstore-setupandroid-playstore-publishingandroid-release-build-setupandroid-e2e-testing-setupandroid-release-validationandroid-playstore-setupandroid-playstore-publishing