remote-build results in filenames with literal `%40`
Metadata
Current evaluation
charmcraft remote-build incorrectly URL-encodes @ as %40 in output filenames, causing naming inconsistencies. The report was closed without resolution or fix, remaining abandoned.
Suggested action: —
No scores available.
Issue body
### Bug Description
When I remote-build grafana-agent-operator, the resulting filenames look as follows.
1. A literal `%40` is used instead of `@`.
2. Naming schema is inconsistent between log files and charms:
- `grafana-agent_ubuntu` vs `grafana_ubuntu` (`-agent` omitted)
- dash vs. `@`.
```
grafana-agent_ubuntu%4020.04-arm64.charm
grafana-agent_ubuntu%4022.04-amd64.charm
grafana-agent_ubuntu%4022.04-arm64.charm
grafana-agent_ubuntu%4024.04-amd64.charm
grafana-agent_ubuntu%4024.04-arm64.charm
grafana_ubuntu-20.04-amd64-2025-10-15T23:33:58.txt
grafana_ubuntu-20.04-arm64-2025-10-15T23:33:58.txt
grafana_ubuntu-22.04-amd64-2025-10-15T23:33:58.txt
grafana_ubuntu-22.04-arm64-2025-10-15T23:33:58.txt
grafana_ubuntu-24.04-amd64-2025-10-15T23:33:58.txt
grafana_ubuntu-24.04-arm64-2025-10-15T23:33:58.txt
```
### To Reproduce
1. Clone https://github.com/canonical/grafana-agent-operator/pull/337
2. `charmcraft remote-build --launchpad-accept-public-upload`
### Environment
Ubuntu 25.04
charmcraft 3.5.3 rev7286
### charmcraft.yaml
```yaml
# Copyright 2021-2025 Canonical Ltd.
# See LICENSE file for licensing details.
name: grafana-agent
type: charm
subordinate: true
description: A subordinate charm for Grafana Agent and an essential part of the COS Lite bundle.
summary: |
This Charmed Operator handles deployment, scaling, configuration, and Day 2 operations specific to Grafana Agent.
links:
documentation: https://discourse.charmhub.io/t/grafana-agent-docs-index/13452
website: https://charmhub.io/grafana-agent
source: https://github.com/canonical/grafana-agent-operator
issues: https://github.com/canonical/grafana-agent-operator/issues
platforms:
ubuntu@20.04:amd64:
ubuntu@20.04:arm64:
ubuntu@20.04:s390x:
ubuntu@20.04:ppc64el:
ubuntu@22.04:amd64:
ubuntu@22.04:arm64:
ubuntu@22.04:s390x:
ubuntu@22.04:ppc64el:
ubuntu@24.04:amd64:
ubuntu@24.04:arm64:
ubuntu@24.04:s390x:
ubuntu@24.04:ppc64el:
assumes:
- juju >= 3.6
parts:
charm:
# Uncomment the commented out portions of this part to build from source.
source: .
plugin: uv
# build-environment:
# - UV_NO_BINARY: "true"
# - MAKEOPTS: -j$(nproc) # Use all available cores for building pyyaml
# override-pull: |
# craftctl default
# rustup default 1.84
build-packages:
# - libffi-dev
# - libssl-dev
# - libyaml-dev
# - pkg-config
- git
build-snaps:
- astral-uv
# - rustup
override-build: |
craftctl default
git describe --always > $CRAFT_PART_INSTALL/version
cos-tool:
plugin: dump
source: https://github.com/canonical/cos-tool/releases/latest/download/cos-tool-${CRAFT_ARCH_BUILD_FOR}
source-type: file
permissions:
- path: cos-tool-${CRAFT_ARCH_BUILD_FOR}
mode: "755"
requires:
certificates:
interface: tls-certificates
limit: 1
optional: true
description: |
Certificate for the grafana agent server (API endpoint is served on :12345 by default)
to use to authenticate to clients, and the CA certificate of the signing CA.
We currently assume that the same CA signs all scrape targets (e.g. principal units).
juju-info:
description: |
`juju-info` provides basic compatibility with all charms.
If all you want is /var/log logs and node_exporter metrics,
this relation will be enough.
interface: juju-info
scope: container
optional: true
cos-agent:
description: |
`cos-agent` is a dedicated relation for the grafana agent machine
charm. It will allow you to set up custom scrape jobs, fetch files
from arbitrary locations, send alert rules, dashboards, etc.
interface: cos_agent
scope: container
optional: true
send-remote-write:
interface: prometheus_remote_write
optional: true
logging-consumer:
interface: loki_push_api
optional: true
grafana-cloud-config:
interface: grafana_cloud_config
limit: 1
optional: true
receive-ca-cert:
interface: certificate_transfer
optional: true
description: |
Obtain TLS information (certificate, ca, chain) from another charm.
tracing:
interface: tracing
limit: 1
optional: true
provides:
grafana-dashboards-provider:
interface: grafana_dashboard
optional: true
peers:
peers:
interface: grafana_agent_replica
config:
options:
classic_snap:
description: |
Choose whether to use the classic snap over the strictly confined
one. Defaults to "true".
type: boolean
default: true
tls_insecure_skip_verify:
description: |
Flag to skip the verification for insecure TLS.
If "true", self-signed certs can be seamlessly used; this setting
will be applied to all of the Agent configurations (Prometheus,
Loki).
type: boolean
default: false
global_scrape_timeout:
description: >
How long to wait before timing out a scrape from a target.
Supported units: y, w, d, h, m, s.
type: string
default: "10s"
global_scrape_interval:
description: >
How frequently should instances be scraped.
Supported units: y, w, d, h, m, s.
type: string
default: "1m"
always_enable_zipkin:
description: >
Force-enable the receiver for the 'zipkin' protocol in Grafana Agent,
even if there is no integration currently requesting it.
type: boolean
default: false
always_enable_otlp_grpc:
description: >
Force-enable the receiver for the 'otlp_grpc' protocol in Grafana Agent,
even if there is no integration currently requesting it.
type: boolean
default: false
always_enable_otlp_http:
description: >
Force-enable the receiver for the 'otlp_http' protocol in Grafana Agent,
even if there is no integration currently requesting it.
type: boolean
default: false
always_enable_jaeger_grpc:
description: >
Force-enable the receiver for the 'jaeger_grpc' protocol in Grafana Agent,
even if there is no integration currently requesting it.
type: boolean
default: false
always_enable_jaeger_thrift_http:
description: >
Force-enable the receiver for the 'jaeger_thrift_http' protocol in Grafana Agent,
even if there is no integration currently requesting it.
type: boolean
default: false
tracing_sample_rate_charm:
description: >
This property defines the percentage of charm traces that are sent to tracing backend.
Setting it to 100 would mean all charm traces are kept, setting to 0 means charm traces
aren't sent to tracing backend at all. Anything outside of 0-100 range will be normalised
to this range by Grafana Agent.
type: float
default: 100.0
tracing_sample_rate_workload:
description: >
This property defines the percentage of workload traces that are sent to tracing backend.
Setting it to 100 would mean all workload traces are kept, setting to 0 means workload traces
aren't sent to tracing backend at all. Anything outside of 0-100 range will be normalised
to this range by Grafana Agent.
type: float
default: 1.0
tracing_sample_rate_error:
description: >
This property defines the percentage of error traces (regardless of the type) that are sent to tracing backend.
Setting it to 100 would mean all error traces are kept, setting to 0 means error traces
aren't sent to tracing backend at all. Anything outside of 0-100 range will be normalised
to this range by Grafana Agent.
type: float
default: 100.0
reporting_enabled:
description: |
Toggle reporting of usage info to grafana, such as enabled feature flags.
Ref: https://grafana.com/docs/agent/latest/static/configuration/flags/#report-information-usage
type: boolean
default: true
log_level:
description: |
Grafana Agent server log level (only log messages with the given severity
or above). Must be one of: [debug, info, warn, error].
If not set, the Grafana Agent default (info) will be used.
type: string
default: info
path_exclude:
description: >
Glob for a set of log files present in `/var/log` that should be ignored by Grafana Agent.
For example, `/var/log/**/{app_one,app_two}.log` will result in the agent ignoring both
`/var/log/app_one.log` and `/var/log/app_two.log`.
Note that the value you provide here is not interpreted as a path, but rather as a glob matcher.
Specifically, if you want to exclude logs in the `/var/log/test` folder, you should set the
config to `/var/log/test/**`.
Ref (__path_exclude__): https://grafana.com/docs/loki/latest/send-data/promtail/scraping/
type: string
default: ""
forward_alert_rules:
description: >
Toggle forwarding of alert rules.
type: boolean
default: true
extra_alert_labels:
description: >
Comma separated key-value pairs of labels to be added to all alerts.
This could be useful for differentiating between staging and production environments.
type: string
```
### Relevant log output
```shell
Waiting to hear from Launchpad about your decision...
Stopped: ubuntu@20.04 (amd64),ubuntu@20.04 (ppc64el),ubuntu@20.04 (s390x); Building: ubuntu@20.04 (arm64), ubuntu@22.04 (amd64), ubuntu@22.04 (arm64), ubuntu@22.04 (ppc64el), ubuntu@22.04 (s3\u2026 / (StoppedBuild completed.rtifacts... :: Downloading 5 files (<---)
Log files: grafana_ubuntu-24.04-amd64-2025-10-15T23:33:58.txt, grafana_ubuntu-24.04-arm64-2025-10-15T23:33:58.txt, grafana_ubuntu-24.04-ppc64el-2025-10-15T23:33:58.txt, grafana_ubuntu-24.04-s390x-2025-10-15T23:33:58.txt
Artifacts: grafana-agent_ubuntu%4020.04-arm64.charm, grafana-agent_ubuntu%4022.04-amd64.charm, grafana-agent_ubuntu%4022.04-arm64.charm, grafana-agent_ubuntu%4024.04-amd64.charm, grafana-agent_ubuntu%4024.04-arm64.charm
```
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| qwen/qwen3.6-35b-a3b | — | — | charmcraft remote-build incorrectly URL-encodes @ as %40 in output filenames, causing naming inconsistencies. The report was closed without resolution or fix, remaining abandoned. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed without resolution or comments. The report detailed charmcraft remote-build incorrectly URL-encoding the @ symbol as %40 in filenames and inconsistent naming between log files and charms. | |
| qwen/qwen3.6-35b-a3b | — | — | Closed without resolution or comments, indicating the issue was abandoned. The bug reported charmcraft remote-build incorrectly URL-encoding @ as %40 in generated filenames. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Closed without resolution. charmcraft remote-build incorrectly URL-encodes @ as %40 in generated filenames and shows inconsistent naming. The issue was abandoned due to inactivity, with no comments or fixes provided. |
Update history
No update history recorded yet.
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #2598 Remote build fails when getting project name | charmcraft | closed | Closed without resolution. The charmcraft remote-build AttributeError persisted in later versions, with multiple users reporting ongoing CI failures and no fix provided. |