diff --git a/.github/workflows/release_v9.yml b/.github/workflows/release_v9.yml new file mode 100644 index 00000000000..4e7bc32c7d2 --- /dev/null +++ b/.github/workflows/release_v9.yml @@ -0,0 +1,201 @@ +name: Release v9 + +on: + push: + branches: [v9] + +jobs: + build: + if: github.repository_owner == 'pnp' + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-latest, windows-latest, ubuntu-latest] + node: [20] + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + registry-url: 'https://registry.npmjs.org' + - name: Cache node modules + id: cache + uses: actions/cache@v4 + with: + path: | + **/node_modules + key: node_modules-${{ matrix.os }}-${{ matrix.node }}-${{ hashFiles('**/npm-shrinkwrap.json') }} + - name: Restore dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: npm ci + - name: Build + run: npm run build + - name: Compress output (non-Windows) + if: matrix.os != 'windows-latest' + run: tar -cvf build.tar --exclude node_modules ./ + - name: Compress output (Windows) + if: matrix.os == 'windows-latest' + run: 7z a -ttar -xr!node_modules -r build.tar . + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: build-${{ matrix.os }}-${{ matrix.node }} + path: build.tar + test: + if: github.repository_owner == 'pnp' + needs: build + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-latest, windows-latest, ubuntu-latest] + # node versions to run tests on + nodeRun: [20] + # node version on which code was built and should be tested + nodeBuild: [20] + include: + - os: ubuntu-latest + nodeRun: 18 + nodeBuild: 20 + + steps: + - name: Configure pagefile + if: matrix.os == 'windows-latest' + uses: al-cheb/configure-pagefile-action@v1.4 + with: + minimum-size: 16GB + disk-root: "C:" + - uses: actions/download-artifact@v4 + with: + name: build-${{ matrix.os }}-${{ matrix.nodeBuild }} + - name: Unpack build artifact (non-Windows) + if: matrix.os != 'windows-latest' + run: tar -xvf build.tar && rm build.tar + - name: Unpack build artifact (Windows) + if: matrix.os == 'windows-latest' + run: 7z x build.tar && del build.tar + - name: Use Node.js ${{ matrix.nodeRun }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.nodeRun }} + registry-url: 'https://registry.npmjs.org' + - name: Cache node modules + id: cache + uses: actions/cache@v4 + with: + path: | + **/node_modules + key: node_modules-${{ matrix.os }}-${{ matrix.nodeBuild }}-${{ hashFiles('**/npm-shrinkwrap.json') }} + - name: Restore dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: npm ci + - name: Test with coverage + # we run coverage only on Node that was used to build + if: matrix.nodeRun == matrix.nodeBuild + run: npm test + - name: Test without coverage + # we want to run tests on older Node versions to ensure that code works + if: matrix.nodeRun != matrix.nodeBuild + run: npm run test:test + - name: Compress output (non-Windows) + if: matrix.nodeRun == matrix.nodeBuild && matrix.os != 'windows-latest' && always() + run: tar -cvf coverage.tar coverage + - name: Compress output (Windows) + if: matrix.nodeRun == matrix.nodeBuild && matrix.os == 'windows-latest' && always() + run: 7z a -ttar -r coverage.tar coverage + - uses: actions/upload-artifact@v4 + if: matrix.nodeRun == matrix.nodeBuild && always() + with: + name: coverage-${{ matrix.os }}-${{ matrix.nodeRun }} + path: coverage.tar + + publish_v9: + if: github.repository_owner == 'pnp' + needs: test + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + + steps: + - uses: actions/download-artifact@v4 + with: + name: build-ubuntu-latest-20 + - name: Unpack build artifact + run: tar -xvf build.tar && rm build.tar + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: 'https://registry.npmjs.org' + - name: Cache node modules + id: cache + uses: actions/cache@v4 + with: + path: | + **/node_modules + key: node_modules-ubuntu-latest-20-${{ hashFiles('**/npm-shrinkwrap.json') }} + - name: Restore dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: npm ci + - name: Stamp beta to package version + run: node scripts/update-package-version.js $GITHUB_SHA + - name: Publish @nine + run: npm publish --tag nine --access public --provenance + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} + - name: Compress output + run: tar -cvf build.tar --exclude node_modules ./ + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: build-ubuntu-latest-20 + path: build.tar + overwrite: true + + deploy_docker: + if: github.repository_owner == 'pnp' + needs: publish_v9 + runs-on: ubuntu-latest + + steps: + - uses: actions/download-artifact@v4 + with: + name: build-ubuntu-latest-20 + - name: Unpack build artifact + run: tar -xvf build.tar && rm build.tar + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: 'https://registry.npmjs.org' + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Extract version from package + id: package_version + run: | + echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT + - name: Wait for npm publish + run: node scripts/wait-npm-publish.js nine ${{ steps.package_version.outputs.version }} + - name: Build and push ${{ steps.package_version.outputs.version }} + uses: docker/build-push-action@v5 + with: + push: true + tags: m365pnp/cli-microsoft365:${{ steps.package_version.outputs.version }} + build-args: | + CLI_VERSION=${{ steps.package_version.outputs.version }} + - name: Build and push nine + uses: docker/build-push-action@v5 + with: + push: true + tags: m365pnp/cli-microsoft365:nine + build-args: | + CLI_VERSION=${{ steps.package_version.outputs.version }} \ No newline at end of file diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index cdb81de0b69..507b4f838e3 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "@pnp/cli-microsoft365", - "version": "8.1.0", + "version": "9.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@pnp/cli-microsoft365", - "version": "8.1.0", + "version": "9.0.0", "license": "MIT", "dependencies": { "@azure/msal-common": "^14.11.0", diff --git a/package.json b/package.json index 538b0272a8b..0a606bdf07b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/cli-microsoft365", - "version": "8.1.0", + "version": "9.0.0", "description": "Manage Microsoft 365 and SharePoint Framework projects on any platform", "license": "MIT", "main": "./dist/api.js",