<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Intelligent Agent]]></title><description><![CDATA[Exploring the intersection of cutting-edge software engineering, AI advancements, and the ethical implications of emerging technologies.]]></description><link>https://www.intelligentagent.blog</link><image><url>https://substackcdn.com/image/fetch/$s_!6A08!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff26bf574-5e97-4fcf-83c9-15ce6ee54d32_460x460.png</url><title>Intelligent Agent</title><link>https://www.intelligentagent.blog</link></image><generator>Substack</generator><lastBuildDate>Thu, 09 Apr 2026 19:10:44 GMT</lastBuildDate><atom:link href="https://www.intelligentagent.blog/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Intelligent Agent]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[intelligentagent@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[intelligentagent@substack.com]]></itunes:email><itunes:name><![CDATA[Nat Fernández]]></itunes:name></itunes:owner><itunes:author><![CDATA[Nat Fernández]]></itunes:author><googleplay:owner><![CDATA[intelligentagent@substack.com]]></googleplay:owner><googleplay:email><![CDATA[intelligentagent@substack.com]]></googleplay:email><googleplay:author><![CDATA[Nat Fernández]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Streamlining Your Development Workflow with Dev Containers, Cloud Run, and GitHub Actions]]></title><description><![CDATA[From local development to production, learn how to setup your projects for a more efficient, consistent, and automated software development process.]]></description><link>https://www.intelligentagent.blog/p/streamlining-your-development-workflow</link><guid isPermaLink="false">https://www.intelligentagent.blog/p/streamlining-your-development-workflow</guid><dc:creator><![CDATA[Nat Fernández]]></dc:creator><pubDate>Tue, 08 Oct 2024 15:32:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bcb488-626a-4fca-98ba-bd4f0e55ecfd_576x576.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The purpose of this walkthrough is to get you up and running quickly, and show you how to set up and deploy a containerized application using a CI/CD pipeline. Although there are many ways of achieving this goal, we are going to do it with <a href="https://containers.dev/">Dev Containers</a>, <a href="https://cloud.google.com/run/">Cloud Run</a>, and <a href="https://docs.github.com/en/actions">GitHub Actions</a>. A certain familiarity with Docker, Google Cloud Platform (GCP), and GitHub is assumed.</p><p>Sample code is available <a href="https://github.com/inteagent/devcontainter-cloudrun-actions">here</a>, so you can follow along or use it as a boilerplate for your future projects.</p><p></p><h2>Dev Containers</h2><p>The <a href="https://containers.dev/">Development Container Specification</a> provides a framework for creating consistent and reproducible development environments packaged as Docker containers. These containers can be tailored to include all the necessary tools and dependencies for application execution during the development phase, which is incredibly helpful, as the configuration of secrets, settings, and other variables may differ between development and production environments. There are many other benefits to using dev containers, such as consistency across development machines, fast workspace setup, and isolation from other projects on your system.</p><h2>Cloud Run</h2><p><a href="https://cloud.google.com/run/">Cloud Run</a> is a fully managed serverless platform offered by Google Cloud. It's a great solution if you want to deploy containerized applications quickly without managing the underlying infrastructure, while also benefiting from automatic scaling and pay-per-use pricing.</p><h2>GitHub Actions</h2><p><a href="https://docs.github.com/en/actions">GitHub Actions</a> is a CI/CD platform provided by GitHub. It allows developers to automate their software workflows directly within their GitHub repositories. Developers can create custom workflows using YAML files, allowing for flexible and tailored automation processes.</p><p></p><h2>Let's Dive In</h2><p>Before we begin, make sure you have <a href="https://docs.docker.com/get-docker/">Docker</a> installed on your machine with at least 4GB of free resources. You will also need a <a href="https://cloud.google.com/resource-manager/docs/creating-managing-projects">GCP project</a>, and a <a href="https://github.com/">GitHub account</a>. It's always a good idea to create a new GCP project to run an experiment or follow a tutorial, so you can simply delete the entire project without affecting other work or incurring in unnecessary charges.</p><p></p><h4>Run the Application Locally on a Dev Container Using a JetBrains IDE</h4><p><em>For instructions on how to use dev containers with Visual Studio Code, check out <a href="https://code.visualstudio.com/docs/devcontainers/tutorial">this tutorial</a>.</em></p><ol><li><p>Dev containers are defined using a <code>devcontainer.json</code> file and optionally a <code>Dockerfile</code>. In the sample project, you will find a directory called <code>.devcontainer</code> that includes such files.</p><pre><code>// devcontainer.json

{
  "name": 'my-devcontainer@3.11',
  "build": {
    "dockerfile": 'Dockerfile'
  },
  "containerEnv": {
    "GOOGLE_CLOUD_PROJECT": 'YOUR-PROJECT-ID',
    "CLOUD_RUN_SERVICE": 'YOUR-CLOUD-RUN-SERVICE-NAME',
    "ENV_VARIABLE": '${LOCAL_ENV_VARIABLE}',
  }
}</code></pre><pre><code># Dockerfile

FROM python:3.11-slim

# Install system dependencies.
RUN apt-get update &amp;&amp; apt-get install -y \
    apt-transport-https \
    ca-certificates \
    procps \
    gnupg \
    curl \
    git \
    python3-pip

# Import the Google Cloud public key.
RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg

# Add the Google Cloud SDK distribution URI as a package source.
RUN echo 'deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main' | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# Update and install the gcloud CLI.
RUN apt-get update &amp;&amp; apt-get install -y google-cloud-cli

# Install dev environment dependencies.
RUN pip install 'Flask==3.0.3' 'Werkzeug==3.0.3' 'pytest==8.2.0'</code></pre></li><li><p>Right click on the <code>.devcontainer/devcontainer.json</code> file and select:</p><p><em><strong>Dev Containers &#8594; Create Dev Container and Mount Sources</strong></em> from the context menu. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nxxJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nxxJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png 424w, https://substackcdn.com/image/fetch/$s_!nxxJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png 848w, https://substackcdn.com/image/fetch/$s_!nxxJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png 1272w, https://substackcdn.com/image/fetch/$s_!nxxJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nxxJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png" width="541" height="119" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bc0afef-db86-4538-a184-ba874df0406e_541x119.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:119,&quot;width&quot;:541,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29316,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nxxJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png 424w, https://substackcdn.com/image/fetch/$s_!nxxJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png 848w, https://substackcdn.com/image/fetch/$s_!nxxJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png 1272w, https://substackcdn.com/image/fetch/$s_!nxxJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc0afef-db86-4538-a184-ba874df0406e_541x119.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p></li><li><p>After creating the dev container, select a JetBrains IDE from the list and click <em><strong>Continue</strong></em>. The selected IDE will be downloaded and the client will connect to it. </p></li><li><p>Once ready, you will see the IDE running in the dev container. If nothing happens, go to <em><strong>Dev Containers &#8594; Show Dev Containers</strong></em> and choose the container to run. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y7Bt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y7Bt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png 424w, https://substackcdn.com/image/fetch/$s_!y7Bt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png 848w, https://substackcdn.com/image/fetch/$s_!y7Bt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png 1272w, https://substackcdn.com/image/fetch/$s_!y7Bt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y7Bt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png" width="810" height="248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:248,&quot;width&quot;:810,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:37470,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y7Bt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png 424w, https://substackcdn.com/image/fetch/$s_!y7Bt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png 848w, https://substackcdn.com/image/fetch/$s_!y7Bt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png 1272w, https://substackcdn.com/image/fetch/$s_!y7Bt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7deb8958-6df7-47d9-8cf4-24d47a52de73_810x248.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p>You can now run the application by opening the terminal in the dev container IDE and typing: </p><pre><code><code>python3 main.py</code></code></pre></li><li><p>Open a browser window and navigate to the url shown in the terminal logs to see the application running locally. If you see the message &#8220;Hello, World!&#8221; then the application is running successfully. If you see an error, make sure you are forwarding the port &#8212;see additional notes in the sample repository&#8217;s README.md file.</p></li></ol><p></p><h4>Set Up Your Cloud Run Service </h4><ol><li><p>In the <code>devcontainer.json</code> file, update the <code>GOOGLE_CLOUD_PROJECT</code> and <code>CLOUD_RUN_SERVICE</code> environment variables with your GCP Project ID and the name of the Cloud Run service. You don't need to set up the service in advance, just pick a unique name. Rebuild the dev container.</p></li><li><p>Open a new terminal in the dev container IDE and run the following command to authenticate with GCP:</p><pre><code>gcloud init</code></pre></li><li><p>Click on the link and follow the sign-in prompts. Once finished, copy the verification code and paste it in the terminal.</p></li><li><p>Enable the Artifact Registry API on your GCP project and create a repository. If you don&#8217;t already have an artifacts repository, just pick a name and a new one will be created:</p><pre><code>gcloud artifacts repositories create <strong>YOUR-GCR-ARTIFACTS-REPO</strong> 
  --repository-format docker 
  --project <strong>YOUR-PROJECT-ID</strong> 
  --location us-central1</code></pre></li><li><p>In the sample project, you will find a <code>cloudbuild.yaml</code>, a configuration file used in Google Cloud Build, which is a service for executing your builds on Google Cloud Platform. </p><pre><code>steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-f', 'Dockerfile', '-t', 'us-central1-docker.pkg.dev/<strong>YOUR-PROJECT-ID</strong>/<strong>YOUR-GCR-ARTIFACTS-REPO</strong>/<strong>YOUR-SERVICE-NAME</strong>:latest', '.']
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'us-central1-docker.pkg.dev/<strong>YOUR-PROJECT-ID</strong>/<strong>YOUR-GCR-ARTIFACTS-REPO</strong>/<strong>YOUR-SERVICE-NAME</strong>:latest']</code></pre><p>Using this file, build the container image and push it to the Artifact Registry:</p><pre><code>gcloud builds submit 
  --config=cloudbuild.yaml
  --project <strong>YOUR-PROJECT-ID </strong>.</code></pre></li><li><p>Make sure your image appears in the <a href="https://console.cloud.google.com/artifacts">Artifact Registry</a>. </p></li><li><p>The sample project includes basic tests that build and deploy the app. You can run these tests by simply typing:</p><pre><code>pytest</code></pre></li></ol><p></p><h4>Deploy to Cloud Run Using GitHub Actions</h4><ol><li><p>In your <a href="https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts">GCP dashboard</a>, create a service account and generate a key for it in JSON format. Give the service account the following roles: <code>artifactregistry.writer</code>, <code>run.admin</code>, and <code>iam.serviceAccountUser</code>.</p></li><li><p>In your GitHub repository settings, add the key to<em><strong> Secrets &amp; Variables &#8594; Actions &#8594; Repository Secrets</strong></em>. Name it <strong>GCP_KEY</strong>.</p></li><li><p>Inside the <code>.github/workflows</code> directory you will find a YAML file named<code> cloud-run-deploy.yaml</code>. This file contains the required instructions to deploy the application every time you push to the main branch.</p><pre><code>name: Deploy to Cloud Run

env:
  SERVICE_NAME: YOUR-CLOUD-RUN-SERVICE-NAME
  PROJECT_ID: YOUR-PROJECT-ID
  DOCKER_IMAGE_URL: us-central1-docker.pkg.dev/YOUR-PROJECT-ID/YOUR-GCR-ARTIFACTS-REPO/YOUR-CLOUD-RUN-SERVICE-NAME

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  dockerize-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Google Cloud Auth
        uses: 'google-github-actions/auth@v2'
        with:
          credentials_json: '${{ secrets.GCP_KEY }}'
          project_id: ${{ env.PROJECT_ID }}

      - name: Set up Cloud SDK
        uses: 'google-github-actions/setup-gcloud@v2'

      - name: Configure Docker
        run: |
          gcloud auth configure-docker us-central1-docker.pkg.dev

      - name: Build and Push Docker Image
        run: |
          docker build -t ${{ env.DOCKER_IMAGE_URL }}:latest -f Dockerfile .
          docker push ${{ env.DOCKER_IMAGE_URL }}:latest

      - name: Deploy to Cloud Run
        run: |
          echo SERVICE_NAME $SERVICE_NAME
          gcloud run deploy $SERVICE_NAME \
            --image ${{ env.DOCKER_IMAGE_URL }}:latest \
            --platform managed \
            --region us-central1 \
            --allow-unauthenticated</code></pre></li><li><p>Push to the main branch and check the Actions tab in your GitHub repository.</p></li><li><p>Once the deployment is successful, you can access the application by clicking on the Cloud Run &#8220;Service URL&#8221; in the GitHub Actions logs.</p></li></ol><p></p><h2>Wrapping Up</h2><p>By leveraging Dev Containers for consistent development environments, Cloud Run for secure and scalable services, and GitHub Actions for automated workflows, you've set up a robust and efficient system for developing all sorts of applications. As you continue to build and refine your projects, I hope this setup can serve as a solid foundation, easily adaptable to your specific needs. Happy coding!</p><p></p><h2>Resources</h2><p><a href="https://containers.dev/">Development Containers Specification</a> by Microsoft</p><p><a href="https://code.visualstudio.com/docs/devcontainers/containers">Developing inside a Container</a>  by Visual Studio Code</p><p><a href="https://blog.jetbrains.com/idea/2024/07/using-dev-containers-in-jetbrains-ides-part-1/">Using Dev Containers in JetBrains IDEs</a> by JetBrains</p><p><a href="https://hub.docker.com/_/python">Docker Official Images for Python</a> by Docker</p><p><a href="https://github.com/thaddavis/how-to-deploy-a-dockerized-fastapi-to-google-cloud-run">How to Deploy a Dockerized FastAPI to Cloud Run</a> by @thaddavis</p><p><a href="https://cloud.google.com/run/docs/quickstarts/build-and-deploy/deploy-python-service">Quickstart: Deploy a Python Service to Cloud Run</a> by Google</p><p><a href="https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/run/helloworld">Cloud Run Hello World Sample</a> by Google</p><p></p>]]></content:encoded></item></channel></rss>