name: Publishes a new version of abstracto
on: workflow_dispatch
permissions:
  packages: write
  contents: write
jobs:
  publish:
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4
        with:
          ref: master
      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          distribution: 'corretto'
          java-version: 17
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: '21.x'
      - name: Load current version
        id: version
        working-directory: ./abstracto-application
        run: echo "version=$(mvn -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec | cut -d- -f1)" >> $GITHUB_ENV
      - name: Create a Release
        uses: elgohr/Github-Release-Action@v5
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          title: Release of version ${{ env.version }}
      - name: Release maven packages
        uses: qcastel/github-actions-maven-release@v1.12.43
        env:
          JAVA_HOME: /usr/lib/jvm/java-17-openjdk/
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          maven-project-folder: "abstracto-application/"
          git-release-bot-name: "release-bot"
          git-release-bot-email: "release-bot@sheldan.dev"
          release-branch-name: master
          maven-args: "-Dmaven.javadoc.skip=true -s settings.xml -DskipTests"
          access-token: ${{ secrets.GITHUB_TOKEN }}
      - name: Install node dependencies and build
        working-directory: ./ui/experience-tracking
        run: npm ci
      - name: Build ui application
        working-directory: ./ui/experience-tracking
        run: npm run build
      - name: Copy built UI
        run: cp -R ui/experience-tracking/build/* python/components/experience-tracking/resources/templates/experience/leaderboards/
      - name: Login to Harbor
        uses: docker/login-action@v2
        with:
          registry: harbor.sheldan.dev
          username: ${{ secrets.HARBOR_USERNAME }}
          password: ${{ secrets.HARBOR_TOKEN }}
      - name: Update .env version
        run:
          sed -i '2s/.*/VERSION=${{ env.version }}/' .env
      - name: Load env file
        id: dotenv
        uses: falti/dotenv-action@v1.0.4
        with:
          path: .env
      - name: Build and push Docker containers
        run: docker compose build && docker compose push
        env:
          REGISTRY_PREFIX: ${{ steps.dotenv.outputs.registry_prefix }}
          VERSION: ${{ steps.dotenv.outputs.version }}
      - name: Fix file permissions
        run:
          sudo chmod -R ugo+rwX . # https://github.com/actions/checkout/issues/164
      - name: Commit updated versions
        uses: EndBug/add-and-commit@v9
        with:
          author_name: "release-bot"
          author_email: "release-bot@sheldan.dev"