name: Build And Publish Docker on: workflow_dispatch jobs: build: container: image: node:lts-bookworm steps: - uses: actions/checkout@v3 with: submodules: 'true' - name: Install deps run: curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh && apt update && apt install -y jq - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@master - name: Login to Self-Hosted Registry uses: docker/login-action@v3 with: registry: fung.uy username: ${{ secrets.MYCO_REGISTRY_USER }} password: ${{ secrets.MYCO_PERSONAL_ACCESS_TOKEN }} - name: Get tags from GitLab repository id: get_tags run: | TAGS=$(curl "https://gitlab.com/api/v4/projects/liberaforms%2Fliberaforms/repository/tags" | jq -r '.[].name') echo "All available tags:" echo "$TAGS" echo "$TAGS" > /tmp/all_tags.txt - name: Filter out RC and dev tags and get the latest version id: filter_tags run: | if [ -f "/tmp/all_tags.txt" ]; then TAGS=$(cat /tmp/all_tags.txt) echo "All tags before filtering:" echo "$TAGS" # Use simple grep commands separately to ensure proper filtering # Retain only tags that don't contain "-dev" and don't contain "-RC" FILTERED_TAGS=$(echo "$TAGS" | grep -v "\-dev" | grep -v "\-RC") echo "Tags after filtering:" echo "$FILTERED_TAGS" if [ -z "$FILTERED_TAGS" ]; then echo "No tags matched the filter criteria" echo "latest_tag=" >> $GITHUB_OUTPUT else # Sort versions and get the latest LATEST_TAG=$(echo "$FILTERED_TAGS" | sort -V | tail -n 1) echo "Latest tag excluding RC and dev: $LATEST_TAG" echo "latest_tag=$LATEST_TAG" >> $GITHUB_OUTPUT fi else echo "Error: Tag file not found" echo "latest_tag=" >> $GITHUB_OUTPUT fi - name: Build and Push with Latest Tag uses: docker/build-push-action@v4 with: builder: ${{ steps.buildx.outputs.name }} context: ./liberaforms file: ./liberaforms/Dockerfile platforms: linux/amd64 push: true tags: fung.uy/mycosystems/liberaforms:${{ steps.filter_tags.outputs.latest_tag }}