Skip to content

Action upload-artifact attempts to upload via ROOT_URL (external network) inside docker #35619

@elmodor

Description

@elmodor

Description

This is the same as #32146 but the issue still exists.

Docker

services:
  gitea:
    image: docker.gitea.com/gitea:1.24.6-rootless
    container_name: gitea
    volumes:
      - ./data:/var/lib/gitea
      - ./config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:2222"

  runner:
    image: docker.io/gitea/act_runner:latest
    depends_on:
      - gitea
    environment:
      CONFIG_FILE: /config.yaml
      GITEA_INSTANCE_URL: "http://gitea:3000"
      GITEA_RUNNER_REGISTRATION_TOKEN: "<token>"
      GITEA_RUNNER_NAME: "Test"
      GITEA_RUNNER_LABELS: "linux_amd64:host"

    volumes:
      - ./config.yaml:/config.yaml
      - ./data_runner:/data

Gitea Config

[server]
ROOT_URL = https://<url>/

Runner Config

log:
  level: info

runner:
  capacity: 1
  timeout: 3h
  insecure: true
  fetch_timeout: 10s
  fetch_interval: 5s

container:
  network: "docker-gitea_default"

Workflow

      - uses: actions/upload-artifact@v3
      # also fails with https://gitea.com/actions/gitea-upload-artifact@v4
        with:
          name: artifact
          path: artifacts/file.txt

Error

Error: connect ECONNREFUSED <external_ip>:443
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '<external_ip>',
  port: 443
}
Retry limit has been reached for chunk at offset 0 to https://<public_address>/api/actions_pipeline/_apis/pipelines/workflows/<number>/artifacts/<uuid>/upload?itemPath=file.txt
::warning::Aborting upload for /root/.cache/act/<uuid>/hostexecutor/arttifacts/file.txt due to failure
::error::aborting artifact upload

I check all the env vars, they all point to the internal gitea instance (http://gitea:3000). I changed the ROOT_URL inside the app.ini to verify, and it is using the ROOT_URL specified in the app.ini for the upload-artifact action.

Since I am running both in docker on the same docker host, the runner can not access the public ip of the gitea server (default blocked by docker).

Solution

It should, same as other actions e.g. checkout, use the internal gitea url specified by GITEA_INSTANCE_URL

Gitea Version

1.24.6 built with GNU Make 4.4.1, gp 1.24.7

Can you reproduce the bug on the Gitea demo site?

No

Log Gist

No response

Screenshots

No response

Git Version

2.49.1

Operating System

Linux 6.8.0-65

How are you running Gitea?

Gitea and Gitea act_runner running in docker compose (same docker compose file, same network)

Database

PostgreSQL

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions