diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..449ddf4 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,133 @@ +name: Generate_Docker_Image_Test + +on: + push: + branches: + - test + workflow_dispatch: + repository_dispatch: + types: [trigger-test-build] + +jobs: + build-test: + runs-on: ubuntu-latest + outputs: + update_needed: ${{ steps.version_check.outputs.update_needed }} + latest: ${{ steps.version_check.outputs.latest }} + stable_version: ${{ steps.get_stable_version.outputs.stable_version }} + nightly_version: ${{ steps.get_nightly_version.outputs.nightly_version }} + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + with: + persist-credentials: true + + - name: Get Stable Version + id: get_stable_version + env: + GH_PAT: ${{ secrets.GH_PAT }} + run: | + stable=$(curl -s -H "Authorization: Bearer $GH_PAT" https://api.github.com/repos/urnetwork/connect/releases/latest \ + | jq -r '.name') + echo "stable_version=$stable" >> $GITHUB_OUTPUT + + - name: Get Nightly Version + id: get_nightly_version + env: + GH_PAT: ${{ secrets.GH_PAT }} + run: | + nightly=$(curl -s -H "Authorization: Bearer $GH_PAT" https://api.github.com/repos/urnetwork/build/releases/latest \ + | jq -r '.name') + echo "nightly_version=$nightly" >> $GITHUB_OUTPUT + + - name: Fetch Latest Release Info + id: version_check + env: + GH_PAT: ${{ secrets.GH_PAT }} + run: | + raw=$(curl -s -H "Authorization: Bearer $GH_PAT" https://api.github.com/repos/urnetwork/build/releases/latest \ + | jq -r '.tag_name') + latest=${raw#v} + echo "latest=$latest" >> $GITHUB_OUTPUT + + if [[ -f version.txt ]]; then + stored=$(> $GITHUB_OUTPUT + + if [[ "$latest" != "$stored" ]]; then + echo "update_needed=true" >> $GITHUB_OUTPUT + else + echo "update_needed=false" >> $GITHUB_OUTPUT + fi + + - name: Update version.txt + if: steps.version_check.outputs.update_needed == 'true' || github.event_name == 'workflow_dispatch' + run: echo "${{ steps.version_check.outputs.latest }}" > version.txt + + - name: Update README.md Build section + if: steps.version_check.outputs.update_needed == 'true' || github.event_name == 'workflow_dispatch' + run: | + sed -i \ + "s|^[-*][[:space:]]*UrNetwork_stable[[:space:]]v.*|- UrNetwork_stable ${{ steps.get_stable_version.outputs.stable_version }}|" \ + README.md + sed -i \ + "s|^[-*][[:space:]]*UrNetwork_nightly[[:space:]]v.*|- UrNetwork_nightly ${{ steps.get_nightly_version.outputs.nightly_version }}|" \ + README.md + + - name: Commit version.txt back to test + if: steps.version_check.outputs.update_needed == 'true' || github.event_name == 'workflow_dispatch' + run: | + git config user.email "${{ secrets.GIT_USER_EMAIL }}" + git config user.name "${{ secrets.GIT_USER_NAME }}" + git add version.txt README.md || true + if ! git diff --cached --quiet; then + git commit -m "Update version.txt to ${{ steps.version_check.outputs.latest }} [skip ci][test]" + git remote set-url origin https://techroy23:${{ secrets.GH_PAT }}@github.com/techroy23/Docker-UrNetwork.git + git push origin test + else + echo "No changes to commit, skipping git commit/push." + fi + + - name: Set up QEMU + if: steps.version_check.outputs.update_needed == 'true' || github.event_name == 'workflow_dispatch' + uses: docker/setup-qemu-action@v3 + with: + platforms: all + + - name: Set Up Docker Buildx + if: steps.version_check.outputs.update_needed == 'true' || github.event_name == 'workflow_dispatch' + uses: docker/setup-buildx-action@v3 + + - name: Log in to GHCR + if: steps.version_check.outputs.update_needed == 'true' || github.event_name == 'workflow_dispatch' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GHCR_TOKEN }} + + - name: Log in to Docker Hub + if: steps.version_check.outputs.update_needed == 'true' || github.event_name == 'workflow_dispatch' + uses: docker/login-action@v3 + with: + registry: docker.io + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} + + - name: Build and push image to GHCR & Docker Hub + if: steps.version_check.outputs.update_needed == 'true' || github.event_name == 'workflow_dispatch' + uses: docker/build-push-action@v6 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ghcr.io/${{ github.repository_owner }}/docker-urnetwork:test-${{ steps.version_check.outputs.latest }} + ghcr.io/${{ github.repository_owner }}/docker-urnetwork:test-latest + docker.io/techroy23/docker-urnetwork:test-${{ steps.version_check.outputs.latest }} + docker.io/techroy23/docker-urnetwork:test-latest + secrets: | + id=gh_token,src=${{ secrets.GH_PAT }}