Skip to content

Semantic-released error on already released assets #729

Open
@zckv

Description

@zckv

The problem

An error is produced on publish command when the asset is already in the release. This error is on github.py:263, and is not critical. The program still return 0 as a status code.

The error happen because the return code is 422 on POST request on existing asset: https://docs.github.com/en/rest/releases/assets?apiVersion=2022-11-28#list-release-assets

To reproduce, use python-semantic-release/upload-to-gh-release@main or semantic-release publish on a release where the assets are already in the GitHub release. The problem can happen naturally with a commit that doesn't trigger a new version, where "No release will be made, VERSION has already been released!" message is displayed after semantic-release version

Expected behavior

There are two possible behavior, as the conflict isn't yet documented in the documentation nor in the code:

  • Automatically replace the released asset with the newer version
  • Display a clear warning, as the error don't explain much anout what caused it

I lean toward the second option. I think that a release should contain only the assets built on the tagged version. And it is easier to do.

Logs

From this job output: https://github.com/zckv/semantic-versioning-example/actions/runs/6394206017/job/17355099525

Run python-semantic-release/upload-to-gh-release@main
  with:
    github_token: ***
    tag: v0.7.1-rc.1
    root_options: -vv
    directory: .
  env:
    GH_TOKEN: ***
/usr/bin/docker run --name bb3a12d5905664366928da1b2d596e686_d54e32 --label 94351b --workdir /github/workspace --rm -e "GH_TOKEN" -e "INPUT_GITHUB_TOKEN" -e "INPUT_TAG" -e "INPUT_ROOT_OPTIONS" -e "INPUT_DIRECTORY" -e "HOME" -e "GITHUB_JOB" -e "GITHUB_REF" -e "GITHUB_SHA" -e "GITHUB_REPOSITORY" -e "GITHUB_REPOSITORY_OWNER" -e "GITHUB_REPOSITORY_OWNER_ID" -e "GITHUB_RUN_ID" -e "GITHUB_RUN_NUMBER" -e "GITHUB_RETENTION_DAYS" -e "GITHUB_RUN_ATTEMPT" -e "GITHUB_REPOSITORY_ID" -e "GITHUB_ACTOR_ID" -e "GITHUB_ACTOR" -e "GITHUB_TRIGGERING_ACTOR" -e "GITHUB_WORKFLOW" -e "GITHUB_HEAD_REF" -e "GITHUB_BASE_REF" -e "GITHUB_EVENT_NAME" -e "GITHUB_SERVER_URL" -e "GITHUB_API_URL" -e "GITHUB_GRAPHQL_URL" -e "GITHUB_REF_NAME" -e "GITHUB_REF_PROTECTED" -e "GITHUB_REF_TYPE" -e "GITHUB_WORKFLOW_REF" -e "GITHUB_WORKFLOW_SHA" -e "GITHUB_WORKSPACE" -e "GITHUB_ACTION" -e "GITHUB_EVENT_PATH" -e "GITHUB_ACTION_REPOSITORY" -e "GITHUB_ACTION_REF" -e "GITHUB_PATH" -e "GITHUB_ENV" -e "GITHUB_STEP_SUMMARY" -e "GITHUB_STATE" -e "GITHUB_OUTPUT" -e "RUNNER_OS" -e "RUNNER_ARCH" -e "RUNNER_NAME" -e "RUNNER_ENVIRONMENT" -e "RUNNER_TOOL_CACHE" -e "RUNNER_TEMP" -e "RUNNER_WORKSPACE" -e "ACTIONS_RUNTIME_URL" -e "ACTIONS_RUNTIME_TOKEN" -e "ACTIONS_CACHE_URL" -e "ACTIONS_ID_TOKEN_REQUEST_URL" -e "ACTIONS_ID_TOKEN_REQUEST_TOKEN" -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/semantic-versioning-example/semantic-versioning-example":"/github/workspace" 94351b:b3a12d5905664366928da1b2d596e686
[14:13:21] DEBUG    [semantic_release.cli.commands.main] DEBUG       main.py:104
                    main.main: logging level set to: DEBUG                      
           DEBUG    [semantic_release.cli.commands.main] DEBUG       main.py:122
                    main.main: global cli options:                              
                    GlobalCommandLineOptions(noop=False,                        
                    verbosity=2, config_file='pyproject.toml',                  
                    strict=False)                                               
           INFO     [semantic_release.cli.util] INFO                  util.py:78
                    util.load_raw_config_file: Loading configuration            
                    from pyproject.toml                                         
           DEBUG    [semantic_release.cli.util] DEBUG                 util.py:81
                    util.load_raw_config_file: Trying to parse                  
                    configuration pyproject.toml in TOML format                 
           DEBUG    [semantic_release.cli.config] DEBUG            config.py:235
                    config.select_branch_options: Rejecting group               
                    'main' as '(main|master)' doesn't match                     
                    '2-publish-error-on-existing-asset-when-upload              
                    ing'                                                        
           DEBUG    [semantic_release.cli.config] DEBUG            config.py:235
                    config.select_branch_options: Rejecting group               
                    'dev' as 'dev*' doesn't match                               
                    '2-publish-error-on-existing-asset-when-upload              
                    ing'                                                        
           INFO     [semantic_release.cli.config] INFO             config.py:228
                    config.select_branch_options: Using group                   
                    'publish' options, as                                       
                    '2-publish-error-on-existing-asset-when-upload              
                    ing' matches                                                
                    '2-publish-error-on-existing-asset-when-upload              
                    ing'                                                        
           DEBUG    [semantic_release.hvcs.util] DEBUG                util.py:48
                    util.build_requests_session: setting up default             
                    session authentication                                      
           DEBUG    [semantic_release.changelog.template] DEBUG   template.py:55
                    template.environment: {'template_dir':                      
                    'templates', 'block_start_string': '{%',                    
                    'block_end_string': '%}',                                   
                    'variable_start_string': '{{',                              
                    'variable_end_string': '}}',                                
                    'comment_start_string': '{#',                               
                    'comment_end_string': '#}',                                 
                    'line_statement_prefix': None,                              
                    'line_comment_prefix': None, 'trim_blocks':                 
                    False, 'lstrip_blocks': False,                              
                    'newline_sequence': '\n',                                   
                    'keep_trailing_newline': False, 'extensions':               
                    (), 'autoescape': True, 'autoescape_value':                 
                    True}                                                       
           DEBUG    [semantic_release.version.translator] DEBUG translator.py:40
                    translator._invert_tag_format_to_re:                        
                    inverted tag_format 'v{version}' to                         
                    'v(?P<version>.*)'                                          
           DEBUG    [semantic_release.cli.masking_filter]   masking_filter.py:30
                    DEBUG masking_filter.add_mask_for:                          
                    Adding redact pattern                                       
                    'context.hvcs_client.token' to                              
                    _redact_patterns                                            
           DEBUG    [semantic_release.cli.masking_filter]   masking_filter.py:30
                    DEBUG masking_filter.add_mask_for:                          
                    Adding redact pattern                                       
                    'context.hvcs_client.token' to                              
                    _redact_patterns                                            
           INFO     [semantic_release.cli.commands.publish] INFO   publish.py:48
                    publish.publish: Uploading distributions to                 
                    release                                                     
           DEBUG    [semantic_release.hvcs.github] DEBUG           helpers.py:44
                    helpers._wrapper:                                           
                    upload_dists(<semantic_release.hvcs.github.Git              
                    hub object at 0x7f980dc42530>,                              
                    tag='v0.7.1-rc.1', dist_glob='dist/*')                      
           DEBUG    [semantic_release.hvcs.github] DEBUG           helpers.py:44
                    helpers._wrapper:                                           
                    get_release_id_by_tag(<semantic_release.hvcs.g              
                    ithub.Github object at 0x7f980dc42530>,                     
                    tag='v0.7.1-rc.1')                                          
           DEBUG    [semantic_release.hvcs.github] DEBUG            github.py:73
                    github._get_repository_owner_and_name: getting              
                    repository owner and name from environment                  
                    variables                                                   
           DEBUG    [urllib3.connectionpool] DEBUG        connectionpool.py:1048
                    connectionpool._new_conn: Starting                          
                    new HTTPS connection (1):                                   
                    api.github.com:443                                          
           DEBUG    [urllib3.connectionpool] DEBUG         connectionpool.py:546
                    connectionpool._make_request:                               
                    https://api.github.com:443 "GET                             
                    /repos/zckv/semantic-versioning-exampl                      
                    e/releases/tags/v0.7.1-rc.1 HTTP/1.1"                       
                    200 None                                                    
[14:13:22] DEBUG    [semantic_release.hvcs.github] DEBUG           helpers.py:55
                    helpers._wrapper: Github.get_release_id_by_tag              
                    -> 123507536                                                
           DEBUG    [semantic_release.hvcs.github] DEBUG           helpers.py:44
                    helpers._wrapper:                                           
                    upload_asset(<semantic_release.hvcs.github.Git              
                    hub object at 0x7f980dc42530>, 123507536,                   
                    'dist/hello.txt', )                                         
           DEBUG    [semantic_release.hvcs.github] DEBUG           helpers.py:44
                    helpers._wrapper:                                           
                    asset_upload_url(<semantic_release.hvcs.github              
                    .Github object at 0x7f980dc42530>, 123507536,               
                    )                                                           
           DEBUG    [urllib3.connectionpool] DEBUG         connectionpool.py:546
                    connectionpool._make_request:                               
                    https://api.github.com:443 "GET                             
                    /repos/zckv/semantic-versioning-exampl                      
                    e/releases/123507536 HTTP/1.1" 200                          
                    None                                                        
           DEBUG    [semantic_release.hvcs.github] DEBUG           helpers.py:55
                    helpers._wrapper: Github.asset_upload_url ->                
                    https://uploads.github.com/repos/zckv/semantic              
                    -versioning-example/releases/123507536/assets               
           DEBUG    [urllib3.connectionpool] DEBUG        connectionpool.py:1048
                    connectionpool._new_conn: Starting                          
                    new HTTPS connection (1):                                   
                    uploads.github.com:443                                      
[14:13:23] DEBUG    [urllib3.connectionpool] DEBUG         connectionpool.py:546
                    connectionpool._make_request:                               
                    https://uploads.github.com:443 "POST                        
                    /repos/zckv/semantic-versioning-exampl                      
                    e/releases/123507536/assets?name=hello                      
                    .txt HTTP/1.1" 422 206                                      
           ERROR    [semantic_release.hvcs.github] ERROR           github.py:263
                    github.upload_dists: error uploading asset                  
                    dist/hello.txt                                              
                    ╭──── Traceback (most recent call last) ─────╮              
                    │ /usr/local/lib/python3.10/site-packages/se │              
                    │ mantic_release/hvcs/github.py:260 in       │              
                    │ upload_dists                               │              
                    │                                            │              
                    │   257 │   │   │   f for f in glob.glob(dis │              
                    │   258 │   │   ):                           │              
                    │   259 │   │   │   try:                     │              
                    │ ❱ 260 │   │   │   │   self.upload_asset(re │              
                    │   261 │   │   │   │   n_succeeded += 1     │              
                    │   262 │   │   │   except HTTPError:  # noq │              
                    │   263 │   │   │   │   log.exception("error │              
                    │                                            │              
                    │ /usr/local/lib/python3.10/site-packages/se │              
                    │ mantic_release/helpers.py:52 in _wrapper   │              
                    │                                            │              
                    │    49 │   │   │   )                        │              
                    │    50 │   │   │                            │              
                    │    51 │   │   │   # Call function          │              
                    │ ❱  52 │   │   │   result = func(*args, **k │              
                    │    53 │   │   │                            │              
                    │    54 │   │   │   # Log result             │              
                    │    55 │   │   │   logger.debug("%s -> %s", │              
                    │                                            │              
                    │ /usr/local/lib/python3.10/site-packages/se │              
                    │ mantic_release/hvcs/github.py:222 in       │              
                    │ upload_asset                               │              
                    │                                            │              
                    │   219 │   │   )                            │              
                    │   220 │   │                                │              
                    │   221 │   │   with open(file, "rb") as dat │              
                    │ ❱ 222 │   │   │   response = self.session. │              
                    │   223 │   │   │   │   url,                 │              
                    │   224 │   │   │   │   params={"name": os.p │              
                    │   225 │   │   │   │   headers={            │              
                    │                                            │              
                    │ /usr/local/lib/python3.10/site-packages/re │              
                    │ quests/sessions.py:637 in post             │              
                    │                                            │              
                    │   634 │   │   :rtype: requests.Response    │              
                    │   635 │   │   """                          │              
                    │   636 │   │                                │              
                    │ ❱ 637 │   │   return self.request("POST",  │              
                    │   638 │                                    │              
                    │   639 │   def put(self, url, data=None, ** │              
                    │   640 │   │   r"""Sends a PUT request. Ret │              
                    │                                            │              
                    │ /usr/local/lib/python3.10/site-packages/re │              
                    │ quests/sessions.py:589 in request          │              
                    │                                            │              
                    │   586 │   │   │   "allow_redirects": allow │              
                    │   587 │   │   }                            │              
                    │   588 │   │   send_kwargs.update(settings) │              
                    │ ❱ 589 │   │   resp = self.send(prep, **sen │              
                    │   590 │   │                                │              
                    │   591 │   │   return resp                  │              
                    │   592                                      │              
                    │                                            │              
                    │ /usr/local/lib/python3.10/site-packages/re │              
                    │ quests/sessions.py:710 in send             │              
                    │                                            │              
                    │   707 │   │   r.elapsed = timedelta(second │              
                    │   708 │   │                                │              
                    │   709 │   │   # Response manipulation hook │              
                    │ ❱ 710 │   │   r = dispatch_hook("response" │              
                    │   711 │   │                                │              
                    │   712 │   │   # Persist cookies            │              
                    │   713 │   │   if r.history:                │              
                    │                                            │              
                    │ /usr/local/lib/python3.10/site-packages/re │              
                    │ quests/hooks.py:30 in dispatch_hook        │              
                    │                                            │              
                    │   27 │   │   if hasattr(hooks, "__call__") │              
                    │   28 │   │   │   hooks = [hooks]           │              
                    │   29 │   │   for hook in hooks:            │              
                    │ ❱ 30 │   │   │   _hook_data = hook(hook_da │              
                    │   31 │   │   │   if _hook_data is not None │              
                    │   32 │   │   │   │   hook_data = _hook_dat │              
                    │   33 │   return hook_data                  │              
                    │                                            │              
                    │ /usr/local/lib/python3.10/site-packages/se │              
                    │ mantic_release/hvcs/util.py:34 in <lambda> │              
                    │                                            │              
                    │   31 │   """                               │              
                    │   32 │   session = Session()               │              
                    │   33 │   if raise_for_status:              │              
                    │ ❱ 34 │   │   session.hooks = {"response":  │              
                    │   35 │                                     │              
                    │   36 │   if retry:                         │              
                    │   37 │   │   if isinstance(retry, bool):   │              
                    │                                            │              
                    │ /usr/local/lib/python3.10/site-packages/re │              
                    │ quests/models.py:1021 in raise_for_status  │              
                    │                                            │              
                    │   1018 │   │   │   )                       │              
                    │   1019 │   │                               │              
                    │   1020 │   │   if http_error_msg:          │              
                    │ ❱ 1021 │   │   │   raise HTTPError(http_er │              
                    │   1022 │                                   │              
                    │   1023 │   def close(self):                │              
                    │   1024 │   │   """Releases the connection  │              
                    ╰────────────────────────────────────────────╯              
                    HTTPError: 422 Client Error: Unprocessable                  
                    Entity for url:                                             
                    https://uploads.github.com/repos/zckv/semantic              
                    -versioning-example/releases/123507536/assets?              
                    name=hello.txt                                              
           DEBUG    [semantic_release.hvcs.github] DEBUG           helpers.py:55
                    helpers._wrapper: Github.upload_dists -> 0                  
0s

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working properlyconfirmedPrevent from becoming stale

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions