diff --git a/.github/workflows/deploy-main-branches.yml b/.github/workflows/deploy-main-branches.yml index a122a70d43..a5ae0d07be 100644 --- a/.github/workflows/deploy-main-branches.yml +++ b/.github/workflows/deploy-main-branches.yml @@ -57,7 +57,7 @@ jobs: - name: Get Node.js uses: actions/setup-node@v5 with: - node-version: $NODE_VERSION + node-version: ${{ env.NODE_VERSION }} - name: Run npm ci run: npm ci diff --git a/.github/workflows/pr-build-container-image.yml b/.github/workflows/pr-build-container-image.yml new file mode 100644 index 0000000000..f9ec8a1d81 --- /dev/null +++ b/.github/workflows/pr-build-container-image.yml @@ -0,0 +1,37 @@ +name: PRs » Build container image + +on: + push: + branches-ignore: + - 'dependabot/**' + pull_request: + types: + - opened + - synchronize + +jobs: + container-image-build: + runs-on: ubuntu-latest + steps: + - name: Extract metadata (tags, labels) + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push images + uses: docker/build-push-action@v6 + with: + push: false # This is handled in another workflow! + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=docker,dest=${{ runner.temp }}/build.tar + + - name: Upload docker image to GHA + uses: actions/upload-artifact@v4 + with: + name: build + path: ${{ runner.temp }}/build.tar diff --git a/.github/workflows/pr-build-test-branch.yml b/.github/workflows/pr-build-test-branch.yml new file mode 100644 index 0000000000..379b66faff --- /dev/null +++ b/.github/workflows/pr-build-test-branch.yml @@ -0,0 +1,97 @@ +name: PRs » Build Pull Request Page + +on: + pull_request: + types: + - opened + - synchronize + +concurrency: + group: pull-request-page + cancel-in-progress: false + +env: + NODE_VERSION: 24 + +jobs: + detect-repo-owner: + runs-on: ubuntu-latest + outputs: + server: ${{ steps.test-server.outputs.server }} + branch: ${{ steps.branch-name.outputs.branch }} + steps: + - name: Checkout sources + uses: actions/checkout@v5 + + - name: Determine the correct test server + id: test-server + run: echo "server=https://`./.github/get-release-server.sh ${{ github.ref_name }}`" >> $GITHUB_OUTPUT + + - name: Determine branch name + id: branch-name + run: | + #Temp becomes something like r/17.x + export TEMP=${{ github.ref_name }} + #Strip the r/ prefix, giving us just 17.x. If this is main/develop this does nothing + echo "branch=${TEMP#r\/}" >> $GITHUB_OUTPUT + + build-pr: + runs-on: ubuntu-latest + needs: detect-repo-owner + steps: + - name: Generate build path + run: echo "build=${{github.event.number}}/$(date +%Y-%m-%d_%H-%M-%S)/" >> $GITHUB_OUTPUT + id: build-path + + - name: Checkout sources + uses: actions/checkout@v5 + + - name: Get Node.js + uses: actions/setup-node@v5 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Run npm ci + run: npm ci + + - name: Build the app + run: | + npm run build + mkdir -p admin-interface-test/${{ steps.build-path.outputs.build }} + mv build/* admin-interface-test/${{ steps.build-path.outputs.build }}/ + tar cf ${{ runner.temp }}/build.tar admin-interface-test + env: + VITE_TEST_SERVER_URL: ${{needs.detect-repo-owner.outputs.server}} + NODE_ENV: development + VITE_TEST_SERVER_AUTH: "admin:opencast" + + - name: Upload build to GHA + uses: actions/upload-artifact@v4 + with: + name: build + path: ${{ runner.temp }}/build.tar + + + check-no-modified-translations: + name: Translations only via Crowdin + if: github.repository_owner == 'opencast' + runs-on: ubuntu-latest + + steps: + - name: Checkout Sources + uses: actions/checkout@v4 + + - name: Get changed locale files + uses: dorny/paths-filter@v3 + id: filter_locales + with: + filters: | # !(pattern) matches anything but pattern + locales: + - 'src/i18n/org/opencastproject/adminui/languages/!lang-(en_US)*.json' + + - name: Check for changes in translations + if: steps.filter_locales.outputs.locales == true + uses: actions/github-script@v7 + with: + script: | + core.setFailed('You should not alter translations outside of Crowdin.') diff --git a/.github/workflows/pr-deploy-container-image.yml b/.github/workflows/pr-deploy-container-image.yml index 7022e81613..30f8bf1cfb 100644 --- a/.github/workflows/pr-deploy-container-image.yml +++ b/.github/workflows/pr-deploy-container-image.yml @@ -1,27 +1,19 @@ -name: PRs » Publish container image +name: PRs » Push container image on: - push: - branches-ignore: - - 'dependabot/**' - pull_request: + workflow_run: + workflows: ["PRs » Build container image"] types: - - opened - - synchronize + - completed jobs: - container-image: + container-image-deploy: runs-on: ubuntu-latest permissions: contents: read packages: write pull-requests: write steps: - - uses: actions/checkout@v5 - - - name: Prepare commit hash - run: git rev-parse HEAD > commit - - name: Log in to the container registry uses: docker/login-action@v4 with: @@ -36,12 +28,16 @@ jobs: images: ghcr.io/${{ github.repository }} - name: Build and push images - uses: docker/build-push-action@v7 + uses: docker/build-push-action@v6 with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + name: build + path: ${{ runner.temp }} + run-id: ${{ github.event.workflow_run.id }} + + - name: Load image + run: | + docker load --input ${{ runner.temp }}/build.tar + docker push ghcr.io/${{ github.repository }} - name: Add comment if: github.event_name == 'pull_request' diff --git a/.github/workflows/pr-deploy-test-branch.yml b/.github/workflows/pr-deploy-test-branch.yml index ef1123a97a..6da7d97bde 100644 --- a/.github/workflows/pr-deploy-test-branch.yml +++ b/.github/workflows/pr-deploy-test-branch.yml @@ -1,75 +1,19 @@ name: PRs » Publish Pull Request Page on: - pull_request: + workflow_run: + workflows: ["PRs » Build Pull Request Page"] types: - - opened - - synchronize + - completed concurrency: group: pull-request-page cancel-in-progress: false -env: - NODE_VERSION: 24 - jobs: - detect-repo-owner: - if: github.repository_owner == 'opencast' - runs-on: ubuntu-latest - outputs: - server: ${{ steps.test-server.outputs.server }} - branch: ${{ steps.branch-name.outputs.branch }} - steps: - - name: Checkout sources - uses: actions/checkout@v5 - - - name: Determine the correct test server - id: test-server - run: echo "server=https://`./.github/get-release-server.sh ${{ github.ref_name }}`" >> $GITHUB_OUTPUT - - - name: Determine branch name - id: branch-name - run: | - #Temp becomes something like r/17.x - export TEMP=${{ github.ref_name }} - #Strip the r/ prefix, giving us just 17.x. If this is main/develop this does nothing - echo "branch=${TEMP#r\/}" >> $GITHUB_OUTPUT - deploy-pr: runs-on: ubuntu-latest - needs: detect-repo-owner steps: - - name: Generate build path - run: echo "build=${{github.event.number}}/$(date +%Y-%m-%d_%H-%M-%S)/" >> $GITHUB_OUTPUT - id: build-path - - - name: Checkout sources - uses: actions/checkout@v5 - - - name: Ensure our node version matches the main repo's version - run: | - [[ "$(curl -s https://raw.githubusercontent.com/opencast/opencast/refs/heads/${{ github.base_ref }}/pom.xml | \ - grep node.version | grep -Eo 'v[0-9.]+' | cut -f 1 -d '.' | cut -c 2-)" == "$NODE_VERSION" ]] \ - && exit 0 \ - || (echo "Node version does not match"; exit 1) - - - name: Get Node.js - uses: actions/setup-node@v5 - with: - node-version: $NODE_VERSION - - - name: Run npm ci - run: npm ci - - - name: Build the app - run: | - npm run build - env: - VITE_TEST_SERVER_URL: ${{needs.detect-repo-owner.outputs.server}} - NODE_ENV: development - VITE_TEST_SERVER_AUTH: "admin:opencast" - - name: Prepare git run: | git config --global user.name "Admin Interface Deployment Bot" @@ -95,12 +39,16 @@ jobs: run: | git clone -b gh-pages "git@github.com:${{ github.repository_owner }}/admin-interface-test.git" admin-interface-test + - name: Fetch build from GHA + uses: actions/download-artifact@v4 + with: + name: build + path: ${{ runner.temp }}/build.tar + run-id: ${{ github.event.workflow_run.id }} + - name: Store build in the clone - env: - DEPLOY_PATH: admin-interface-test/${{ steps.build-path.outputs.build }} run: | - mkdir -p ${DEPLOY_PATH} - cp -rv build/* ${DEPLOY_PATH} + tar xf ${{ runner.temp }}/build.tar - name: Cleanup test repository working-directory: admin-interface-test @@ -142,27 +90,3 @@ jobs: ](https://test.admin-interface.opencast.org/${{ steps.build-path.outputs.build }}). It might take a few minutes for it to become available. - - check-no-modified-translations: - name: Translations only via Crowdin - if: github.repository_owner == 'opencast' - runs-on: ubuntu-latest - - steps: - - name: Checkout Sources - uses: actions/checkout@v4 - - - name: Get changed locale files - uses: dorny/paths-filter@v4 - id: filter_locales - with: - filters: | # !(pattern) matches anything but pattern - locales: - - 'src/i18n/org/opencastproject/adminui/languages/!lang-(en_US)*.json' - - - name: Check for changes in translations - if: steps.filter_locales.outputs.locales == true - uses: actions/github-script@v9 - with: - script: | - core.setFailed('You should not alter translations outside of Crowdin.') diff --git a/.github/workflows/pr-test-build.yml b/.github/workflows/pr-test-build.yml index 4ee04b614f..caaffaf12f 100644 --- a/.github/workflows/pr-test-build.yml +++ b/.github/workflows/pr-test-build.yml @@ -34,7 +34,7 @@ jobs: - name: Get Node.js uses: actions/setup-node@v5 with: - node-version: $NODE_VERSION + node-version: ${{ env.NODE_VERSION }} - name: Run npm ci run: npm ci