CRAN Release #52
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CRAN Release | |
| # Automated CRAN submission workflow | |
| # Stage 1: Full CRAN validation (R CMD check with vignettes) | |
| # Stage 2: Submit to CRAN via direct HTTP POST (bypasses devtools, no menu() issues) | |
| on: | |
| push: | |
| tags: | |
| - 'v*.*.*' # Triggers when publish-to-public pushes a version tag | |
| workflow_dispatch: # Allow manual triggering | |
| permissions: | |
| contents: write | |
| packages: read | |
| jobs: | |
| # Stage 1: Full CRAN validation on public repo | |
| validate-cran: | |
| name: "Stage 1: CRAN Validation (Public Repo)" | |
| if: github.repository == 'ericscheier/emburden' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.get_version.outputs.version }} | |
| tarball: ${{ steps.build.outputs.tarball }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Extract version from tag | |
| id: get_version | |
| run: | | |
| if [[ $GITHUB_REF == refs/tags/* ]]; then | |
| VERSION=${GITHUB_REF#refs/tags/v} | |
| else | |
| VERSION=$(grep "^Version:" DESCRIPTION | sed 's/^Version: *//') | |
| fi | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "Found version: $VERSION" | |
| - name: Setup R | |
| uses: r-lib/actions/setup-r@v2 | |
| with: | |
| r-version: 'release' | |
| use-public-rspm: true | |
| - name: Setup R dependencies | |
| uses: r-lib/actions/setup-r-dependencies@v2 | |
| with: | |
| extra-packages: | | |
| any::rcmdcheck | |
| any::devtools | |
| needs: check | |
| - name: Setup Pandoc | |
| uses: r-lib/actions/setup-pandoc@v2 | |
| - name: Setup TinyTeX | |
| uses: r-lib/actions/setup-tinytex@v2 | |
| env: | |
| TINYTEX_INSTALLER: TinyTeX | |
| - name: Run CRAN checks (skip vignette rebuild) | |
| env: | |
| _R_CHECK_DONTTEST_EXAMPLES_: false | |
| run: | | |
| echo "🔍 STAGE 1: Full CRAN validation on public repo" | |
| echo " (Vignettes built in tarball, not rebuilt during check)" | |
| Rscript -e "rcmdcheck::rcmdcheck( | |
| path = '.', | |
| args = c('--as-cran', '--no-manual', '--no-build-vignettes'), | |
| build_args = c('--compact-vignettes=gs+qpdf'), | |
| error_on = 'warning', | |
| check_dir = 'check' | |
| )" | |
| - name: Build source package | |
| id: build | |
| run: | | |
| # Run R CMD build and capture tarball name | |
| # Note: --compact-vignettes=gs+qpdf uses both ghostscript and qpdf | |
| R CMD build --compact-vignettes=gs+qpdf . | tee /tmp/build-output.txt | |
| tarball=$(grep -o "[a-zA-Z0-9._-]*\.tar\.gz" /tmp/build-output.txt | tail -1) | |
| echo "tarball=$tarball" >> $GITHUB_OUTPUT | |
| echo "Built package: $tarball" | |
| - name: Upload check results | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: public-cran-check-results | |
| path: check/ | |
| - name: Upload source tarball | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: r-package-source | |
| path: ${{ steps.build.outputs.tarball }} | |
| retention-days: 30 | |
| # Stage 2: CRAN submission - requires approval | |
| submit-to-cran: | |
| name: "Stage 2: Submit to CRAN (Approval Required)" | |
| needs: validate-cran | |
| if: success() | |
| runs-on: ubuntu-latest | |
| environment: cran-production # Requires manual approval | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup R | |
| uses: r-lib/actions/setup-r@v2 | |
| with: | |
| r-version: 'release' | |
| use-public-rspm: true | |
| - name: Install system dependencies for httr | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcurl4-openssl-dev | |
| - name: Install httr package for HTTP POST requests | |
| run: | | |
| Rscript -e "install.packages('httr', repos = 'https://cloud.r-project.org')" | |
| - name: Download package tarball | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: r-package-source | |
| - name: Create CRAN comments | |
| run: | | |
| VERSION="${{ needs.validate-cran.outputs.version }}" | |
| cat > cran-comments.md << 'EOF' | |
| ## Test environments | |
| * Ubuntu 22.04 (GitHub Actions), R-release | |
| * Windows Server 2022 (GitHub Actions), R-release | |
| * macOS 14 (GitHub Actions), R-release | |
| ## R CMD check results | |
| There were no ERRORs, WARNINGs, or NOTEs. | |
| ## Downstream dependencies | |
| There are currently no downstream dependencies for this package. | |
| EOF | |
| echo "Package: emburden v$VERSION" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### CRAN Submission Comments" >> $GITHUB_STEP_SUMMARY | |
| cat cran-comments.md >> $GITHUB_STEP_SUMMARY | |
| - name: Submit to CRAN via direct HTTP POST | |
| run: | | |
| VERSION="${{ needs.validate-cran.outputs.version }}" | |
| TARBALL="${{ needs.validate-cran.outputs.tarball }}" | |
| echo "🚀 Stage 2: Submitting to CRAN via Direct HTTP POST" | |
| echo "" | |
| echo "Package: emburden v$VERSION" | |
| echo "Tarball: $TARBALL" | |
| echo "✅ Stage 1: CRAN validation passed" | |
| echo "🚀 Stage 2: Submitting to CRAN web form (bypassing devtools)..." | |
| echo "" | |
| echo "This approach makes direct HTTP POST requests to CRAN," | |
| echo "bypassing devtools::submit_cran() to avoid menu() interactivity issues." | |
| echo "" | |
| # Run the direct HTTP POST submission script | |
| Rscript .dev/submit-to-cran-http.R "$TARBALL" | |
| - name: Post-submission summary | |
| if: always() | |
| run: | | |
| echo "### 🎉 CRAN Submission Workflow Complete" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Pipeline Status:**" >> $GITHUB_STEP_SUMMARY | |
| echo "- ✅ Stage 1: Full CRAN validation passed (R CMD check)" >> $GITHUB_STEP_SUMMARY | |
| echo "- ✅ Stage 2: Submitted to CRAN via direct HTTP POST" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### 📧 Action Required: Email Confirmation" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "⚠️ **You must complete the submission by clicking the confirmation link in your email!**" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Next steps:**" >> $GITHUB_STEP_SUMMARY | |
| echo "1. 📧 Check your email for CRAN submission confirmation" >> $GITHUB_STEP_SUMMARY | |
| echo "2. 🔗 Click the confirmation link in the email (required!)" >> $GITHUB_STEP_SUMMARY | |
| echo "3. ⏳ Wait for CRAN maintainer review (typically 1-2 weeks)" >> $GITHUB_STEP_SUMMARY | |
| echo "4. 💬 Respond to any CRAN reviewer feedback if requested" >> $GITHUB_STEP_SUMMARY | |
| echo "5. 🎯 Monitor https://cran.r-project.org/web/checks/ after acceptance" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Package submitted:** emburden ${{ needs.validate-cran.outputs.version }}" >> $GITHUB_STEP_SUMMARY |