diff --git a/.github/workflows/artifact_check.yml b/.github/workflows/artifact_check.yml new file mode 100644 index 0000000..1d4c797 --- /dev/null +++ b/.github/workflows/artifact_check.yml @@ -0,0 +1,106 @@ +name: Check for new artifacts + +on: + workflow_dispatch: + + schedule: + # https://crontab.guru/#0_7_*_*_* + # Every saturday at 7am + - cron: "0 7 * * *" + +jobs: + check_release: + runs-on: ubuntu-latest + outputs: + latest_release_tag: ${{ steps.get_latest_release.outputs.latest_release }} + new_release_found: ${{ steps.compare.outputs.new_release_found }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Get latest release + id: get_latest_release + run: | + LATEST_RELEASE=$(curl -s -H "Authorization: token ${{ secrets.PRIVATE_SG_ACCESS_TOKEN }}" https://api.github.com/repos/sourcegraph/sourcegraph/releases/latest | jq -r .tag_name) + echo "latest_release=${LATEST_RELEASE}" >> $GITHUB_OUTPUT + + - name: Read TAG file + id: read_current_tag + run: | + current_tag=$(cat TAG) + echo "current_tag=${current_tag}" >> $GITHUB_OUTPUT + + - name: Compare releases + id: compare + env: + LATEST_RELEASE: ${{ steps.get_latest_release.outputs.latest_release }} + TAG: ${{ steps.read_current_tag.outputs.current_tag }} + run: | + if [ "${LATEST_RELEASE}" == "${CURRENT_TAG}" ]; then + echo "Latest release (${LATEST_RELEASE}) matches current tag (${CURRENT_TAG})." + echo "new_release_found=false" >> $GITHUB_OUTPUT + else + echo "new_release_found=true" >> $GITHUB_OUTPUT + fi + + pull_latest_artifacts: + runs-on: ubuntu-latest + needs: [check_release] + if: needs.check_release.outputs.new_release_found == 'true' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Update TAG file + env: + latest_release_tag: ${{ needs.check_release.outputs.latest_release_tag }} + run: echo "$latest_release_tag" > TAG + + - name: Pull database migrations + env: + latest_release_tag: ${{ needs.check_release.outputs.latest_release_tag }} + run: | + # TODO: Remove this when we start pushing schemas on every releaase. + normalized_version=$(echo "$latest_release_tag" | awk -F. '{print $1"."$2".0"}' | sed 's/^v//; s/^/v/') + file_name="migrations-${normalized_version}.tar.gz" + + # Download the tar file using curl + curl -O "https://storage.googleapis.com/schemas-migrations/migrations/$file_name" + + # extract tar file + tar -xvf "$file_name" + + # delete the tar + rm -rf "$file_name" + + - name: Commit changes + env: + latest_release_tag: ${{ needs.check_release.outputs.latest_release_tag }} + run: | + git config user.name "GitHub Action" + git config user.email "action@github.com" + git add migrations + git commit -m "Add artifacts for $latest_release_tag" + + - name: Push changes + run: | + git push origin main + + - name: Create new tag + env: + latest_release_tag: ${{ needs.check_release.outputs.latest_release_tag }} + run: | + git tag $latest_release_tag + git push origin $latest_release_tag + + - name: Create Release + env: + latest_release_tag: ${{ needs.check_release.outputs.latest_release_tag }} + run: | + RELEASE_NAME="Release $latest_release_tag" + BODY="Automatically created release with tag $latest_release_tag." + curl -X POST -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + -d "{\"tag_name\": \"$latest_release_tag\", \"name\": \"$RELEASE_NAME\", \"body\": \"$BODY\"}" \ + "https://api.github.com/repos/${{ github.repository }}/releases" \ No newline at end of file diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml deleted file mode 100644 index 6ea98b1..0000000 --- a/.github/workflows/update.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Check for new artifacts - -on: - workflow_dispatch: - - schedule: - # https://crontab.guru/#0_22_*_*_6 - # Every saturday at 10pm - - cron: '0 22 * * 6' - -jobs: - check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 \ No newline at end of file diff --git a/TAG b/TAG new file mode 100644 index 0000000..e69de29 diff --git a/gql/.gitkeep b/gql/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/migrations/.gitkeep b/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..f176519 --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "local>sourcegraph/renovate-config" + ] +}