name: Release and Publish Containers on: push: branches: - main tags: - 'v*' workflow_dispatch: inputs: version: description: 'Version to release (e.g., v1.0.0)' required: true default: 'v1.0.0' env: REGISTRY: ghcr.io jobs: release-and-publish: runs-on: ubuntu-latest permissions: contents: write packages: write steps: - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Login to ECR uses: docker/login-action@v3 with: registry: 471112909428.dkr.ecr.us-east-1.amazonaws.com username: ${{ secrets.AWS_ACCESS_KEY_ID }} password: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Set version id: set_version run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV elif [[ $GITHUB_REF == refs/tags/* ]]; then echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV else echo "VERSION=$(date +'%Y.%m.%d')-$(git rev-parse --short HEAD)" >> $GITHUB_ENV fi - name: Build and push Actor image id: build working-directory: ./docker run: | make docker-build VERSION=${{ env.VERSION }} make publish-ecr VERSION=${{ env.VERSION }} echo "image=471112909428.dkr.ecr.us-east-1.amazonaws.com/arcadeai/arcade-ai:${{ env.VERSION }}" >> $GITHUB_OUTPUT - name: Deploy to Amazon ECS if: github.event_name == 'push' env: GITHUB_TOKEN: ${{ secrets.PAT }} run: gh workflow -R ArcadeAI/Team run Deploy -f actor-version=${{ env.VERSION }} - name: Generate release notes id: generate_release_notes if: github.event_name != 'push' run: | echo "Release notes for version ${{ env.VERSION }}" > release_notes.md echo "" >> release_notes.md echo "Changes in this release:" >> release_notes.md git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" >> release_notes.md - name: Create Release id: create_release if: github.event_name != 'push' uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ env.VERSION }} release_name: Release ${{ env.VERSION }} body_path: release_notes.md draft: false prerelease: false - name: Upload Release Asset uses: actions/upload-release-asset@v1 if: github.event_name != 'push' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./release_notes.md asset_name: release_notes.md asset_content_type: text/markdown