-
Notifications
You must be signed in to change notification settings - Fork 105
CI⚡️CD #52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
CI⚡️CD #52
Changes from all commits
9b46d07
4dd64d4
645c7ea
daa2f28
11bf031
be09b14
53bc60f
ffb3057
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,100 @@ | ||||||||||||||||
| name: replicate-cd | ||||||||||||||||
|
|
||||||||||||||||
| on: | ||||||||||||||||
| push: | ||||||||||||||||
| branches: | ||||||||||||||||
| - main | ||||||||||||||||
|
|
||||||||||||||||
| jobs: | ||||||||||||||||
| push: | ||||||||||||||||
| runs-on: ubuntu-latest | ||||||||||||||||
| env: | ||||||||||||||||
| BASE_MODEL: 'replicate-internal/official-sdxl-prod' | ||||||||||||||||
| PROD_MODEL: 'replicate-internal/official-sdxl-prod' | ||||||||||||||||
| PROD_DEPLOYMENT: 'replicate-internal/sdxl-prod-official-deployment' | ||||||||||||||||
|
|
||||||||||||||||
| steps: | ||||||||||||||||
| - name: checkout | ||||||||||||||||
| uses: actions/checkout@v4 | ||||||||||||||||
| with: | ||||||||||||||||
| fetch-depth: 0 | ||||||||||||||||
|
|
||||||||||||||||
| - name: what changed | ||||||||||||||||
| id: what-changed | ||||||||||||||||
| run: | | ||||||||||||||||
| FILES_CHANGED=$(git diff --name-only --diff-filter=AMR origin/main HEAD | xargs) | ||||||||||||||||
| echo "FILES_CHANGED=$FILES_CHANGED" >> $GITHUB_ENV | ||||||||||||||||
| if echo "$FILES_CHANGED" | grep -q 'cog.yaml'; then | ||||||||||||||||
| echo "cog-push=true" >> $GITHUB_OUTPUT | ||||||||||||||||
| else | ||||||||||||||||
| echo "cog-push=false" >> $GITHUB_OUTPUT | ||||||||||||||||
| fi | ||||||||||||||||
| if ${{ contains(github.event.head_commit.message, '[cog build]') }}; then | ||||||||||||||||
| echo "cog-push=true" >> $GITHUB_OUTPUT | ||||||||||||||||
| fi | ||||||||||||||||
|
|
||||||||||||||||
| # if cog.yaml changes - cog build and push. else - yolo build and push! | ||||||||||||||||
| - name: did-it-tho | ||||||||||||||||
| env: | ||||||||||||||||
| COG_PUSH: ${{ steps.what-changed.outputs.cog-push }} | ||||||||||||||||
| run: | | ||||||||||||||||
| echo "cog push?: $COG_PUSH" | ||||||||||||||||
| echo "changed files: $FILES_CHANGED" | ||||||||||||||||
|
|
||||||||||||||||
| - name: setup-cog | ||||||||||||||||
| if: steps.what-changed.outputs.cog-push == 'true' | ||||||||||||||||
| uses: replicate/setup-cog@v1.0.3 | ||||||||||||||||
| with: | ||||||||||||||||
| token: ${{ secrets.REPLICATE_API_TOKEN }} | ||||||||||||||||
| install-cuda: false | ||||||||||||||||
|
Comment on lines
+46
to
+49
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Bumped to v2 here, where CUDA drivers are not installed by default. |
||||||||||||||||
|
|
||||||||||||||||
| - name: cog-build | ||||||||||||||||
| if: steps.what-changed.outputs.cog-push == 'true' | ||||||||||||||||
| run: | | ||||||||||||||||
| cog build | ||||||||||||||||
|
|
||||||||||||||||
|
Comment on lines
+51
to
+55
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Can you try taking this |
||||||||||||||||
| - name: cog-push | ||||||||||||||||
| if: steps.what-changed.outputs.cog-push == 'true' | ||||||||||||||||
| run: | | ||||||||||||||||
| cog push r8.im/"$PROD_MODEL" | ||||||||||||||||
|
|
||||||||||||||||
| - name: install-yolo | ||||||||||||||||
| run: | | ||||||||||||||||
| sudo curl -o /usr/local/bin/yolo -L "https://github.com/replicate/yolo/releases/latest/download/yolo_$(uname -s)_$(uname -m)" | ||||||||||||||||
| sudo chmod +x /usr/local/bin/yolo | ||||||||||||||||
|
|
||||||||||||||||
| # yolo as hack for pushing environment variables | ||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. TIL 👀 |
||||||||||||||||
| - name: yolo-push-env | ||||||||||||||||
| if: steps.what-changed.outputs.cog-push == 'true' | ||||||||||||||||
| env: | ||||||||||||||||
| REPLICATE_API_TOKEN: ${{secrets.REPLICATE_API_TOKEN}} | ||||||||||||||||
| SENTRY_DSN: ${{secrets.SENTRY_DSN}} | ||||||||||||||||
| run: | | ||||||||||||||||
| touch meaningless_file.txt | ||||||||||||||||
| echo "adding environment variables to $PROD_MODEL" | ||||||||||||||||
| yolo push -e SENTRY_DSN="$SENTRY_DSN" --base $PROD_MODEL --dest $PROD_MODEL meaningless_file.txt | ||||||||||||||||
|
|
||||||||||||||||
| - name: yolo-push | ||||||||||||||||
| if: steps.what-changed.outputs.cog-push == 'false' | ||||||||||||||||
| env: | ||||||||||||||||
| REPLICATE_API_TOKEN: ${{secrets.REPLICATE_API_TOKEN}} | ||||||||||||||||
| SENTRY_DSN: ${{secrets.SENTRY_DSN}} | ||||||||||||||||
| run: | | ||||||||||||||||
| echo "pushing changes from $BASE_MODEL to $PROD_MODEL" | ||||||||||||||||
| echo "changed files: $FILES_CHANGED" | ||||||||||||||||
| yolo push -e SENTRY_DSN="$SENTRY_DSN" --base $BASE_MODEL --dest $PROD_MODEL $FILES_CHANGED | ||||||||||||||||
|
|
||||||||||||||||
| - name: update deployment | ||||||||||||||||
| env: | ||||||||||||||||
| REPLICATE_API_TOKEN: ${{secrets.REPLICATE_API_TOKEN}} | ||||||||||||||||
|
|
||||||||||||||||
| run: | | ||||||||||||||||
| sudo apt-get install jq | ||||||||||||||||
| export LATEST_VERSION=$(curl -s -H "Authorization: Token $REPLICATE_API_TOKEN" \ | ||||||||||||||||
| https://api.replicate.com/v1/models/$PROD_MODEL/versions | jq -r '.results[0].id') | ||||||||||||||||
| curl -s \ | ||||||||||||||||
| -X PATCH \ | ||||||||||||||||
| -H "Authorization: Token $REPLICATE_API_TOKEN" \ | ||||||||||||||||
| -H "Content-Type: application/json" \ | ||||||||||||||||
| -d '{"version": "'$LATEST_VERSION'" }' \ | ||||||||||||||||
| https://api.replicate.com/v1/deployments/$PROD_DEPLOYMENT | ||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,117 @@ | ||
| name: replicate-ci | ||
|
|
||
| on: | ||
| pull_request: | ||
| branches: | ||
| - main | ||
|
|
||
| jobs: | ||
| push: | ||
| runs-on: ubuntu-latest | ||
| env: | ||
| BASE_MODEL: 'replicate-internal/official-sdxl-prod' | ||
| STAGING_MODEL: 'replicate-internal/official-sdxl-staging' | ||
| STAGING_DEPLOYMENT: 'replicate-internal/sdxl-staging-official' | ||
|
|
||
| steps: | ||
| - name: checkout | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
|
|
||
| - name: what changed | ||
| id: what-changed | ||
| run: | | ||
| FILES_CHANGED=$(git diff --name-only --diff-filter=AMR origin/main HEAD | xargs) | ||
| echo "FILES_CHANGED=$FILES_CHANGED" >> $GITHUB_ENV | ||
| if echo "$FILES_CHANGED" | grep -q 'cog.yaml'; then | ||
| echo "cog-push=true" >> $GITHUB_OUTPUT | ||
| else | ||
| echo "cog-push=false" >> $GITHUB_OUTPUT | ||
| fi | ||
| if ${{ contains(github.event.head_commit.message, '[cog build]') }}; then | ||
| echo "cog-push=true" >> $GITHUB_OUTPUT | ||
| fi | ||
|
|
||
| # if cog.yaml changes - cog build and push. else - yolo build and push! | ||
| - name: did-it-tho | ||
| env: | ||
| COG_PUSH: ${{ steps.what-changed.outputs.cog-push }} | ||
| run: | | ||
| echo "cog push?: $COG_PUSH" | ||
| echo "changed files: $FILES_CHANGED" | ||
|
|
||
| - name: setup-cog | ||
| if: steps.what-changed.outputs.cog-push == 'true' | ||
| uses: replicate/setup-cog@v1.0.3 | ||
| with: | ||
| token: ${{ secrets.REPLICATE_API_TOKEN }} | ||
| install-cuda: false | ||
|
|
||
| - name: cog-build | ||
| if: steps.what-changed.outputs.cog-push == 'true' | ||
| run: | | ||
| cog build | ||
|
|
||
| - name: cog-push | ||
| if: steps.what-changed.outputs.cog-push == 'true' | ||
| run: | | ||
| cog push r8.im/"$STAGING_MODEL" | ||
|
|
||
| - name: install-yolo | ||
| run: | | ||
| sudo curl -o /usr/local/bin/yolo -L "https://github.com/replicate/yolo/releases/latest/download/yolo_$(uname -s)_$(uname -m)" | ||
| sudo chmod +x /usr/local/bin/yolo | ||
|
|
||
| # TODO: once you confirm sentry works, remove from staging. | ||
| # yolo as hack for pushing environment variables | ||
| - name: yolo-push-env | ||
| if: steps.what-changed.outputs.cog-push == 'true' | ||
| env: | ||
| REPLICATE_API_TOKEN: ${{secrets.REPLICATE_API_TOKEN}} | ||
| SENTRY_DSN: ${{secrets.SENTRY_DSN}} | ||
| run: | | ||
| touch meaningless_file.txt | ||
| echo "adding environment variables to $STAGING_MODEL" | ||
| yolo push -e SENTRY_DSN="$SENTRY_DSN" --base $STAGING_MODEL --dest $STAGING_MODEL meaningless_file.txt | ||
|
|
||
| - name: yolo-push | ||
| if: steps.what-changed.outputs.cog-push == 'false' | ||
| env: | ||
| REPLICATE_API_TOKEN: ${{secrets.REPLICATE_API_TOKEN}} | ||
| SENTRY_DSN: ${{secrets.SENTRY_DSN}} | ||
| run: | | ||
| echo "pushing changes from $BASE_MODEL to $STAGING_MODEL" | ||
| echo "changed files: $FILES_CHANGED" | ||
| yolo push -e SENTRY_DSN="$SENTRY_DSN" --base $BASE_MODEL --dest $STAGING_MODEL $FILES_CHANGED | ||
|
|
||
| - uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: '3.10' | ||
|
|
||
| - name: install python test deps | ||
| run: | | ||
| pip install -r requirements_test.txt | ||
|
|
||
| - name: test model | ||
| env: | ||
| REPLICATE_API_TOKEN: ${{secrets.REPLICATE_API_TOKEN}} | ||
| TEST_ENV: 'staging' | ||
| run: | | ||
| pytest tests/test_predict.py | ||
|
|
||
| - name: update deployment | ||
| env: | ||
| REPLICATE_API_TOKEN: ${{secrets.REPLICATE_API_TOKEN}} | ||
|
|
||
| run: | | ||
| sudo apt-get install jq | ||
| export LATEST_VERSION=$(curl -s -H "Authorization: Token $REPLICATE_API_TOKEN" \ | ||
| https://api.replicate.com/v1/models/$STAGING_MODEL/versions | jq -r '.results[0].id') | ||
| curl -s \ | ||
| -X PATCH \ | ||
| -H "Authorization: Token $REPLICATE_API_TOKEN" \ | ||
| -H "Content-Type: application/json" \ | ||
| -d '{"version": "'$LATEST_VERSION'" }' \ | ||
| https://api.replicate.com/v1/deployments/$STAGING_DEPLOYMENT | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
did-it-tho⭐There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hah the title of this step was borne out of ...debugging frustration.
but it shall stand.