Repository navigation
Set DPI to 96 for Xvfb and X resources for consistent scaling #69
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Dev Build | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: false | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - feature/wip | |
| - feature/add-web | |
| - feature/web | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| packages: write | |
| pages: write | |
| id-token: write | |
| env: | |
| REGISTRY: ghcr.io | |
| IMAGE_NAME: ${{ github.repository }} | |
| jobs: | |
| secrets: | |
| name: Detect Secrets | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - uses: gitleaks/gitleaks-action@v2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| docker-build: | |
| name: Docker Build (${{ matrix.arch }}) | |
| needs: secrets | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - runner: ubuntu-latest | |
| arch: amd64 | |
| platform: linux/amd64 | |
| - runner: ubuntu-24.04-arm | |
| arch: arm64 | |
| platform: linux/arm64 | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set lowercase image name | |
| run: echo "IMAGE_NAME_LC=${IMAGE_NAME,,}" >> $GITHUB_ENV | |
| - name: Free disk space | |
| run: | | |
| sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL | |
| sudo docker image prune -af | |
| df -h | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Build and push ci group | |
| run: docker buildx bake --push ci | |
| env: | |
| VERSION: v0.0.0-${{ matrix.arch }} | |
| PLATFORMS: ${{ matrix.platform }} | |
| REGISTRY: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LC }} | |
| docker-test: | |
| name: Docker Test (${{ matrix.arch }}, ${{ matrix.variant }}) | |
| needs: docker-build | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - runner: ubuntu-latest | |
| arch: amd64 | |
| variant: base | |
| test_run: "TestBaseImage|TestDotenv" | |
| timeout: 600s | |
| - runner: ubuntu-24.04-arm | |
| arch: arm64 | |
| variant: base | |
| test_run: "TestBaseImage|TestDotenv" | |
| timeout: 600s | |
| - runner: ubuntu-latest | |
| arch: amd64 | |
| variant: ultimate | |
| test_run: "" | |
| timeout: 1200s | |
| - runner: ubuntu-24.04-arm | |
| arch: arm64 | |
| variant: ultimate | |
| test_run: "" | |
| timeout: 1200s | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set lowercase image name | |
| run: echo "IMAGE_NAME_LC=${IMAGE_NAME,,}" >> $GITHUB_ENV | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache-dependency-path: go.sum | |
| - name: Run container tests | |
| env: | |
| DEVCELL_TEST_IMAGE: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LC }}:v0.0.0-${{ matrix.arch }}-${{ matrix.variant }} | |
| DEVCELL_BASE_IMAGE: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LC }}:v0.0.0-${{ matrix.arch }}-base | |
| DEVCELL_TEST_BASE_IMAGE: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LC }}:v0.0.0-${{ matrix.arch }}-base | |
| DEVCELL_USER_IMAGE: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LC }}:v0.0.0-${{ matrix.arch }}-${{ matrix.variant }} | |
| MCP_SECRET_TEST_PASSWORD: fake-secret-ci-value | |
| MCP_SECRET_GITHUB_TOKEN: fake-token-ci-value | |
| run: | | |
| if [ -n "${{ matrix.test_run }}" ]; then | |
| go test -v -run "${{ matrix.test_run }}" -timeout ${{ matrix.timeout }} ./test/... | |
| else | |
| go test -v -timeout ${{ matrix.timeout }} ./test/... | |
| fi | |
| docker-manifest: | |
| name: Docker Manifests | |
| needs: [docker-build] | |
| if: always() && needs.docker-build.result == 'success' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set lowercase image name | |
| run: echo "IMAGE_NAME_LC=${IMAGE_NAME,,}" >> $GITHUB_ENV | |
| env: | |
| IMAGE_NAME: ${{ github.repository }} | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Create manifests | |
| run: | | |
| R=${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LC }} | |
| for suffix in "" "-base" "-ultimate"; do | |
| docker buildx imagetools create \ | |
| -t "${R}:dev${suffix}" \ | |
| -t "${R}:latest${suffix}" \ | |
| -t "${R}:v0.0.0${suffix}" \ | |
| "${R}:v0.0.0-amd64${suffix}" \ | |
| "${R}:v0.0.0-arm64${suffix}" | |
| done | |
| cell-build: | |
| name: Cell CLI Dev Build | |
| needs: secrets | |
| runs-on: ubuntu-latest | |
| env: | |
| RELEASE_VERSION: v0.0.0 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache-dependency-path: go.sum | |
| - name: Set SHORT_SHA | |
| run: echo "SHORT_SHA=$(echo ${GITHUB_SHA} | cut -c1-8)" >> $GITHUB_ENV | |
| - name: Delete existing tag | |
| run: | | |
| git config --global user.email "dmitry@atd.sh" | |
| git config --global user.name "Dmitry Kireev" | |
| git tag -d "${{ env.RELEASE_VERSION }}" || echo "No local tag to delete" | |
| git push origin :refs/tags/${{ env.RELEASE_VERSION }} || echo "No remote tag to delete" | |
| - name: Add tag | |
| run: | | |
| git tag -a ${{ env.RELEASE_VERSION }} -m "Development release" | |
| git push origin ${{ github.ref_name }} | |
| - name: Run GoReleaser | |
| uses: goreleaser/goreleaser-action@v6 | |
| with: | |
| distribution: goreleaser | |
| version: "~> v2" | |
| args: release --clean -f .goreleaser.dev.yaml | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }} | |
| SHORT_SHA: ${{ env.SHORT_SHA }} | |
| - name: Publish release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: gh release edit "${{ env.RELEASE_VERSION }}" --draft=false --latest=false | |
| deploy-site: | |
| name: Deploy Site | |
| needs: secrets | |
| if: github.ref == 'refs/heads/main' | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: github-pages | |
| url: ${{ steps.deployment.outputs.page_url }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| - name: Generate CLI docs | |
| run: go run $(ls cmd/*.go | grep -Ev '(_test|gendoc|main)\.go' | tr '\n' ' ') cmd/gendoc.go web/src/content/cell | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| cache-dependency-path: web/package-lock.json | |
| - name: Setup Pages | |
| uses: actions/configure-pages@v5 | |
| - name: Install dependencies | |
| run: npm ci | |
| working-directory: web | |
| - name: Build with Astro | |
| run: npm run build | |
| working-directory: web | |
| - name: Upload artifact | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: ./web/dist | |
| - name: Deploy to GitHub Pages | |
| id: deployment | |
| uses: actions/deploy-pages@v4 |