Merge pull request #8 from ConductionNL/chore/sync-dev-to-beta-2026-0… #2
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: Beta Release | |
| on: | |
| push: | |
| branches: | |
| - beta | |
| jobs: | |
| release-management: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v3 | |
| with: | |
| fetch-depth: 0 | |
| ssh-key: ${{ secrets.DEPLOY_KEY }} | |
| - name: Set app env | |
| run: | | |
| echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV | |
| - name: Get current version and append beta suffix | |
| id: increment_version | |
| run: | | |
| git fetch origin main | |
| main_version=$(git show origin/main:appinfo/info.xml | grep -oP '(?<=<version>)[^<]+' || echo "") | |
| current_version=$(grep -oP '(?<=<version>)[^<]+' appinfo/info.xml || echo "") | |
| IFS='.' read -ra main_version_parts <<< "$main_version" | |
| next_patch=$((main_version_parts[2] + 1)) | |
| beta_counter=1 | |
| if [[ $current_version =~ -beta\.([0-9]+)$ ]]; then | |
| current_patch=$(echo $current_version | grep -oP '^[0-9]+\.[0-9]+\.(\d+)' | cut -d. -f3) | |
| if [ "$current_patch" -eq "$next_patch" ]; then | |
| beta_counter=$((BASH_REMATCH[1] + 1)) | |
| fi | |
| fi | |
| beta_version="${main_version_parts[0]}.${main_version_parts[1]}.${next_patch}-beta.${beta_counter}" | |
| echo "NEW_VERSION=$beta_version" >> $GITHUB_ENV | |
| echo "new_version=$beta_version" >> $GITHUB_OUTPUT | |
| echo "Main version: $main_version" | |
| echo "Current version: $current_version" | |
| echo "Using beta version: $beta_version" | |
| - name: Update version in info.xml | |
| run: | | |
| sed -i "s|<version>.*</version>|<version>${{ env.NEW_VERSION }}</version>|" appinfo/info.xml | |
| - name: Commit version update | |
| run: | | |
| git config --local user.email "action@github.com" | |
| git config --local user.name "GitHub Action" | |
| if git diff --quiet && git diff --cached --quiet; then | |
| echo "No changes to commit" | |
| else | |
| git add appinfo/info.xml | |
| git commit -m "Bump beta version to ${{ env.NEW_VERSION }} [skip ci]" | |
| git push | |
| fi | |
| - name: Prepare Signing Certificate and Key | |
| run: | | |
| echo "${{ secrets.NEXTCLOUD_SIGNING_CERT }}" > signing-cert.crt | |
| echo "${{ secrets.NEXTCLOUD_SIGNING_KEY }}" > signing-key.key | |
| - name: Install npm dependencies | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: '18.x' | |
| - name: Set up PHP and install extensions | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: '8.2' | |
| extensions: zip, gd | |
| - run: npm ci | |
| - run: npm run build | |
| - run: composer install --no-dev --optimize-autoloader --classmap-authoritative | |
| - name: Copy the package files into the package | |
| run: | | |
| mkdir -p package/${{ github.event.repository.name }} | |
| rsync -av --progress \ | |
| --exclude='/package' \ | |
| --exclude='/.git' \ | |
| --exclude='/.github' \ | |
| --exclude='/.cursor' \ | |
| --exclude='/.vscode' \ | |
| --exclude='/node_modules' \ | |
| --exclude='/src' \ | |
| --exclude='/tests' \ | |
| --exclude='/package.json' \ | |
| --exclude='/package-lock.json' \ | |
| --exclude='/composer.json' \ | |
| --exclude='/composer.lock' \ | |
| --exclude='/phpcs.xml' \ | |
| --exclude='/phpmd.xml' \ | |
| --exclude='/psalm.xml' \ | |
| --exclude='/phpunit.xml' \ | |
| --exclude='/.phpunit.cache' \ | |
| --exclude='.phpunit.result.cache' \ | |
| --exclude='/jest.config.js' \ | |
| --exclude='/webpack.config.js' \ | |
| --exclude='/tsconfig.json' \ | |
| --exclude='/.babelrc' \ | |
| --exclude='/.eslintrc.js' \ | |
| --exclude='/.prettierrc' \ | |
| --exclude='/stylelint.config.js' \ | |
| --exclude='/.gitignore' \ | |
| --exclude='/.gitattributes' \ | |
| --exclude='/signing-key.key' \ | |
| --exclude='/signing-cert.crt' \ | |
| ./ package/${{ github.event.repository.name }}/ | |
| - name: Create Tarball | |
| run: | | |
| cd package && tar -czf ../nextcloud-release.tar.gz ${{ github.event.repository.name }} | |
| - name: Sign the TAR.GZ file with OpenSSL | |
| run: | | |
| openssl dgst -sha512 -sign signing-key.key nextcloud-release.tar.gz | openssl base64 -out nextcloud-release.signature | |
| - name: Upload tarball as artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: nextcloud-release-${{ env.NEW_VERSION }} | |
| path: | | |
| nextcloud-release.tar.gz | |
| nextcloud-release.signature | |
| retention-days: 30 | |
| - name: Git Version | |
| id: version | |
| uses: codacy/git-version@2.7.1 | |
| with: | |
| release-branch: beta | |
| - name: Upload Beta Release | |
| uses: ncipollo/release-action@v1.12.0 | |
| with: | |
| tag: v${{ env.NEW_VERSION }} | |
| name: Beta Release ${{ env.NEW_VERSION }} | |
| draft: false | |
| prerelease: true | |
| skipIfReleaseExists: true | |
| - name: Attach tarball to GitHub release | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| file: nextcloud-release.tar.gz | |
| asset_name: ${{ env.APP_NAME }}-${{ env.NEW_VERSION }}.tar.gz | |
| tag: v${{ env.NEW_VERSION }} | |
| overwrite: true | |
| - name: Upload app to Nextcloud appstore | |
| uses: nextcloud-releases/nextcloud-appstore-push-action@a011fe619bcf6e77ddebc96f9908e1af4071b9c1 | |
| with: | |
| app_name: ${{ env.APP_NAME }} | |
| appstore_token: ${{ secrets.NEXTCLOUD_APPSTORE_TOKEN }} | |
| download_url: https://github.com/${{ github.repository }}/releases/download/v${{ env.NEW_VERSION }}/${{ env.APP_NAME }}-${{ env.NEW_VERSION }}.tar.gz | |
| app_private_key: ${{ secrets.NEXTCLOUD_SIGNING_KEY }} | |
| nightly: false | |
| - name: Verify release | |
| run: | | |
| echo "App version: ${{ env.NEW_VERSION }}" | |
| echo "Tarball contents:" | |
| tar -tvf nextcloud-release.tar.gz | head -50 | |
| echo "info.xml contents:" | |
| tar -xOf nextcloud-release.tar.gz ${{ env.APP_NAME }}/appinfo/info.xml |