Deliver submits previous build, not the latest

New Issue Checklist

[x] Updated fastlane to the latest version
[x] I read the Contribution Guidelines
[x] I read docs.fastlane.tools
[x] I searched for existing GitHub issues

Issue Description
Upload a build (5.0.33 (9) "previous")
Shortly after (probably while the previous build is still processing), upload another build (5.1.0 (0) "latest") and submit it.
Fastlane selects the previous build instead of the latest build.
After rejecting that build and re-submitting the correct, latest build is selected.
This has happened to me twice now. When I went to App Store Connect, the version was set to 5.1.0, but the submitted build was 5.0.33 (9).
Command executed
fastlane --env main upload submit:1 release:1
Complete output when running fastlane, including the stack trace and command used

[⠙] 🚀 Ignoring ffi-1.14.2 because its extensions are not built. Try: gem pristine ffi --version 1.14.2
[✔] 🚀
[10:53:04]: Loading from './fastlane/.env.main'
[10:53:04]: fastlane detected a Gemfile in the current directory
[10:53:04]: However, it seems like you didn't use `bundle exec`
[10:53:04]: To launch fastlane faster, please use
[10:53:04]:
[10:53:04]: $ bundle exec fastlane upload submit:1 release:1
[10:53:04]:
[10:53:04]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
Fastfile:150: warning: key :app_version is duplicated and overwritten on line 151
[10:53:05]: ----------------------------------------
[10:53:05]: --- Step: Verifying fastlane version ---
[10:53:05]: ----------------------------------------
[10:53:05]: Your fastlane version 2.210.1 matches the minimum requirement of 2.20.0  ✅
[10:53:05]: ------------------------------
[10:53:05]: --- Step: default_platform ---
[10:53:05]: ------------------------------
[10:53:05]: Driving the lane 'ios upload' 🚀
[10:53:05]: ---------------------
[10:53:05]: --- Step: deliver ---
[10:53:05]: ---------------------
[10:53:05]: Successfully loaded '/Users/timothycosta/Desktop/lingq/fastlane/Deliverfile' 📄
+--------------------------------------+----------------------------------------------------------------------+
|                                Detected Values from './fastlane/Deliverfile'                                |
+--------------------------------------+----------------------------------------------------------------------+
| metadata_path                        | ./fastlane/LingQ/metadata/                                           |
| screenshots_path                     | ./fastlane/LingQ/screenshots/                                        |
| app_icon                             | ./fastlane/LingQ/app_icon.png                                        |
| primary_category                     | EDUCATION                                                            |
| secondary_category                   | TRAVEL                                                               |
| run_precheck_before_submit           | false                                                                |
| precheck_include_in_app_purchases    | false                                                                |
| force                                | true                                                                 |
| overwrite_screenshots                | true                                                                 |
| app_rating_config_path               | fastlane/app_rating_config.json                                      |
| ignore_language_directory_validation | true                                                                 |
| submission_information               | {:add_id_info_tracks_install=>true,                                  |
|                                      | :add_id_info_tracks_action=>true, :add_id_info_uses_idfa=>true,      |
|                                      | :add_id_info_limits_tracking=>true,                                  |
|                                      | :export_compliance_uses_encryption=>false,                           |
|                                      | :export_compliance_encryption_updated=>false,                        |
|                                      | :content_rights_contains_third_party_content=>false,                 |
|                                      | :content_rights_has_rights=>true}                                    |
| app_review_information               | {:first_name=>"xxxx", :last_name=>"xxxx",                        |
|                                      | :phone_number=>"16049259544", :email_address=>"xxxx@xxxx",      |
|                                      | :demo_user=>"xxxx", :demo_password=>"xxxx", :notes=>"\nTo      |
|                                      | test in-app purchases create a new account. You will be prompted     |
|                                      | after signup to purchase.  \nOr, tap the crown in the top left       |
|                                      | corner of the screen after logging in.\n\nSubscriptions can be       |
|                                      | viewed via More -> Settings -> App -> Subscription Info.\n\n\nThe    |
|                                      | referral id on the signup screen allows users to join study groups.  |
|                                      | Study groups\nallow group leaders to share lessons and track users'  |
|                                      | progress.\n\nTo test a referral id, select English as your learning  |
|                                      | language during signup.\nThen, on the registration screen, tap       |
|                                      | 'Referral ID' and enter APPTEST2020 in the added field.\nAfter       |
|                                      | login has completed you will have a new section 'iOS Test' at the    |
|                                      | top of the Library tab.\n\n"}                                        |
| release_notes                        | {"default"=>"5.1.0\n- iOS 16 lock screen widgets\n  - Easily track   |
|                                      | your daily progress on your lock screen!\n- Siri support\n  - Try    |
|                                      | 'Play my korean playlist in LingQ'!\n- New Sentence Mode             |
|                                      | features:\n  - See a list of all your vocabulary with the 'Show      |
|                                      | Vocabulary' button\n  - Use the 'Study Sentence' button to access    |
|                                      | new activities like Matching, Speaking, and Translation.\n  - Tap    |
|                                      | and hold the speaker button for 0.5x playback speed \n\n",           |
|                                      | "it"=>"5.1.0\n- iOS 16 lock screen widgets\n  - Easily track your    |
|                                      | daily progress on your lock screen!\n- Siri support\n  - Try 'Play   |
|                                      | my korean playlist in LingQ'!\n- New Sentence Mode features:\n  -    |
|                                      | See a list of all your vocabulary with the 'Show Vocabulary'         |
|                                      | button\n  - Use the 'Study Sentence' button to access new            |
|                                      | activities like Matching, Speaking, and Translation.\n  - Tap and    |
|                                      | hold the speaker button for 0.5x playback speed \n\n"}               |
+--------------------------------------+----------------------------------------------------------------------+
[10:53:05]: Login to App Store Connect (xxxx@xxxx)
[10:53:09]: Login successful
+--------------------------------------------------------------------+----------------------------------------------------------------------+
|                                                          deliver 2.210.1 Summary                                                          |
+--------------------------------------------------------------------+----------------------------------------------------------------------+
| submit_for_review                                                  | true                                                                 |
| automatic_release                                                  | true                                                                 |
| phased_release                                                     | false                                                                |
| skip_metadata                                                      | true                                                                 |
| skip_screenshots                                                   | true                                                                 |
| edit_live                                                          | false                                                                |
| username                                                           |<EMAIL_ADDRESS>                                             |
| app_identifier                                                     | xxxx                                                     |
| platform                                                           | ios                                                                  |
| use_live_version                                                   | false                                                                |
| metadata_path                                                      | ./fastlane/LingQ/metadata/                                           |
| screenshots_path                                                   | ./fastlane/LingQ/screenshots/                                        |
| skip_binary_upload                                                 | false                                                                |
| skip_app_version_update                                            | false                                                                |
| force                                                              | true                                                                 |
| overwrite_screenshots                                              | true                                                                 |
| sync_screenshots                                                   | false                                                                |
| verify_only                                                        | false                                                                |
| reject_if_possible                                                 | false                                                                |
| reset_ratings                                                      | false                                                                |
| app_rating_config_path                                             | fastlane/app_rating_config.json                                      |
| submission_information.add_id_info_tracks_install                  | true                                                                 |
| submission_information.add_id_info_tracks_action                   | true                                                                 |
| submission_information.add_id_info_uses_idfa                       | true                                                                 |
| submission_information.add_id_info_limits_tracking                 | true                                                                 |
| submission_information.export_compliance_uses_encryption           | false                                                                |
| submission_information.export_compliance_encryption_updated        | false                                                                |
| submission_information.content_rights_contains_third_party_content | false                                                                |
| submission_information.content_rights_has_rights                   | true                                                                 |
| dev_portal_team_id                                                 | FXD5S9TV5H                                                           |
| run_precheck_before_submit                                         | false                                                                |
| precheck_default_rule_level                                        | warn                                                                 |
| app_icon                                                           | ./fastlane/LingQ/app_icon.png                                        |
| primary_category                                                   | EDUCATION                                                            |
| secondary_category                                                 | TRAVEL                                                               |
| app_review_information.first_name                                  | xxxx                                                                 |
| app_review_information.last_name                                   | xxxx                                                             |
| app_review_information.phone_number                                | xxxxx                                                          |
| app_review_information.email_address                               | xxxx                                                       |
| app_review_information.demo_user                                   | xxxx                                                             |
| app_review_information.demo_password                               | ********                                                             |
| app_review_information.notes                                       |  To test in-app purchases create a new account. You will be          |
|                                                                    | prompted after signup to purchase.   Or, tap the crown in the top    |
|                                                                    | left corner of the screen after logging in.  Subscriptions can be    |
|                                                                    | viewed via More -> Settings -> App -> Subscription Info.   The       |
|                                                                    | referral id on the signup screen allows users to join study groups.  |
|                                                                    | Study groups allow group leaders to share lessons and track users'   |
|                                                                    | progress.  To test a referral id, select English as your learning    |
|                                                                    | language during signup. Then, on the registration screen, tap        |
|                                                                    | 'Referral ID' and enter APPTEST2020 in the added field. After login  |
|                                                                    | has completed you will have a new section 'iOS Test' at the top of   |
|                                                                    | the Library tab.                                                     |
| release_notes.default                                              | 5.1.0 - iOS 16 lock screen widgets   - Easily track your daily       |
|                                                                    | progress on your lock screen! - Siri support   - Try 'Play my        |
|                                                                    | korean playlist in LingQ'! - New Sentence Mode features:   - See a   |
|                                                                    | list of all your vocabulary with the 'Show Vocabulary' button   -    |
|                                                                    | Use the 'Study Sentence' button to access new activities like        |
|                                                                    | Matching, Speaking, and Translation.   - Tap and hold the speaker    |
|                                                                    | button for 0.5x playback speed                                       |
| release_notes.it                                                   | 5.1.0 - iOS 16 lock screen widgets   - Easily track your daily       |
|                                                                    | progress on your lock screen! - Siri support   - Try 'Play my        |
|                                                                    | korean playlist in LingQ'! - New Sentence Mode features:   - See a   |
|                                                                    | list of all your vocabulary with the 'Show Vocabulary' button   -    |
|                                                                    | Use the 'Study Sentence' button to access new activities like        |
|                                                                    | Matching, Speaking, and Translation.   - Tap and hold the speaker    |
|                                                                    | button for 0.5x playback speed                                       |
| ignore_language_directory_validation                               | true                                                                 |
| precheck_include_in_app_purchases                                  | false                                                                |
+--------------------------------------------------------------------+----------------------------------------------------------------------+
[10:54:11]: Detected languages: ["default", "it", "zh-Hans", "zh-Hant", "fr-FR", "de-DE", "es-ES", "ja", "el", "es-MX", "en-AU", "ru", "en-GB", "nl-NL", "fr-CA", "en-CA", "pt-PT", "pt-BR", "ko", "en-US", "tr"]
[10:54:11]: Finished the upload to App Store Connect
[10:54:12]: Selecting the latest build...
[10:54:12]: Waiting for processing on... app_id: xxxx, app_version: , build_version: , platform: IOS
[10:54:12]: Searching for the latest build
[10:54:53]: Successfully finished processing the build 5.0.33 - 8 for IOS
[10:54:53]: Selecting build 5.0.33 (8)...
[10:54:54]: Successfully selected build
[10:54:56]: Successfully updated IDFA declarations on App Store Connect
[10:54:57]: Successfully updated contents rights declaration on App Store Connect
[10:55:38]: Successfully submitted the app for review!
[10:55:38]: upload finished
+------+----------------------------+-------------+
|                fastlane summary                 |
+------+----------------------------+-------------+
| Step | Action                     | Time (in s) |
+------+----------------------------+-------------+
| 1    | Verifying fastlane version | 0           |
| 2    | default_platform           | 0           |
| 3    | deliver                    | 152         |
+------+----------------------------+-------------+
[10:55:38]: fastlane.tools finished successfully 🎉

Environment

🚫 fastlane environment 🚫
Stack

Key
Value

OS
12.6

Ruby
2.6.8

Bundler?
false

Git
git version 2.33.0

Installation Source
/usr/local/bin/fastlane

Host
macOS 12.6 (21G115)

Ruby Lib Dir
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib

OpenSSL Version
LibreSSL 2.8.3

Is contained
false

Is homebrew
false

Is installed via Fabric.app
false

Xcode Path
/Applications/Xcode-14.0.1.app/Contents/Developer/

Xcode Version
14.0.1

Swift Version
5.7

System Locale

Error

No Locale with UTF8 found 🚫

fastlane files:
`./fastlane/Fastfile`
# Customise this file, documentation can be found here:
#
# https://github.com/fastlane/fastlane/tree/master/fastlane/docs
# All available actions: https://docs.fastlane.tools/actions
# can also be listed using the `fastlane actions` command

# If you want to automatically update fastlane if a new version is available:
# update_fastlane

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "2.20.0"

# START FIX
# Fix for https://github.com/fastlane/fastlane/issues/16055
# Because we won't downgrade to Ruby 2.6.

module DataHashFix
  def inspect_value
    attributes.map do |k|
      v = send(k).inspect
      v = v.gsub("\n", "\n\t") # note no !

      "\t#{k}=#{v}"
    end.join(", \n")
  end
end

Spaceship::Base::DataHash.include DataHashFix

# END FIX

all_languages = ["de","el","es","eo","en","fr","it","ja","ko","nl","pl","pt","ru","sv","zh",]

all_localizations = ["de", "en-US", "es", "es-MX", "fr", "fr-CA", "it", "ja", "ko", "nl", "pt-BR", "pt-PT", "ru", "zh-Hans", "zh-Hant"]

purchase_pairs = { "de-DE" => "de",
                   "en-US" => "en",
#                   "es-ES" => "es",
                   "es-MX" => "es-MX",
                   "fr-FR" => "fr",
                   "fr-CA" => "fr",
                   "it" => "it",
                   "ja" => "ja",
                   "ko" => "ko",
                   "nl-NL" => "nl",
                   "pt-BR" => "pt-BR",
                   "pt-PT" => "pt-PT",
                   "ru" => "ru",
                   "zh-Hans" => "zh-Hans",
                   "zh-Hant" => "zh-Hant",
                 }

screenshot_pairs = {
  "de" => ["de-DE"],
  "en" => ["en-US"],
  "es" => ["es-ES", "es-MX"],
  "fr" => ["fr-FR", "fr-CA"],
  #"it" => ["it"],
  "ja" => ["ja"],
  "ko" => ["ko"],
  "nl" => ["nl-NL"],
  "pt-BR" => ["pt-BR", "pt-PT"],
  "ru" => ["ru"],
  "zh-Hans" => ["zh-Hans"],
  "zh-Hant" => ["zh-Hant"],
}

default_platform :ios

platform :ios do
  before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
    #cocoapods
  end

  desc "Fetch and upload dSYM files to Firebase Crashlytics"
  lane :upload_dsyms do |options|
    version = options[:version] || ENV['MARKETING_VERSION'] # get_version_number(target: "LingQ")
    build = options[:build] || ENV['BUILD_VERSION'] # get_build_number
    # UI.message "Downloading DSYMS for #{version} (#{build})"
    # download_dsyms(version: version, build_number: build, wait_for_dsym_processing: true)
    UI.message "Uploading DSYMS"
    upload_symbols_to_crashlytics(gsp_path: "./iLingQ/GoogleService-Info.plist", binary_path: "./upload-symbols")
    clean_build_artifacts
  end

  desc "Deploy a new version to the App Store"
  lane :release do
    # match(type: "appstore")
    # snapshot
    gym # Build your app - more options available
    deliver(force: true)
    # frameit
  end

  desc "Uses 'fetch_metadata.rb to update the metadata from google sheets"
  lane :fetch_metadata do |options|
  # Note: When moving to a new machine, run this via the command line in order to
  # see the required URL and input the code.
    sh "ruby fetch_metadata.rb #{ENV['LANG_CODE']}/metadata/ #{ENV['TAB_NAME']}"
  end

  desc "Upload beta build with 'notes'"
  lane :beta do |options|
    changelog = options[:changelog] || prompt(text: "Changelog: ", multi_line_end_keyword: "END")
    build
    upload_to_testflight(changelog: changelog)
  end

  lane :privacy_info do |options|
    upload_app_privacy_details_to_app_store(
    username<EMAIL_ADDRESS>    team_name: "The Linguist Institute",
    app_identifier: "#{ENV['APP_IDENTIFIER']}",
    json_path: "fastlane/app_privacy_details.json"
  )
  end

  desc "Upload build, metadata, etc..."
  lane :upload do |options|
    skip_metadata_fetch = options[:skip_metadata_fetch] ? true : false
    skip_metadata = options[:metadata] ? false : true
    skip_screenshots = options[:screenshots] ? false : true
    individual = options[:individual] || []
    submit = options[:submit] ? true : false
    release = options[:release] ? true : false
    phased = options[:phased] ? true : false
    edit_live = options[:edit_live] ? true : false

    if !skip_metadata && !skip_metadata_fetch
      UI.message "Fetching metadata"
      fetch_metadata
    end

    if options[:binary]
      deliver(ipa: "./fastlane/#{ENV['LANG_CODE']}/bin/#{ENV['LANG_CODE']}.ipa", submit_for_review: submit, automatic_release: release, phased_release: phased, skip_metadata: skip_metadata, skip_screenshots: skip_screenshots, individual_metadata_items: individual, edit_live: edit_live)
    else
      deliver(submit_for_review: submit, automatic_release: release, phased_release: phased, skip_metadata: skip_metadata, skip_screenshots: skip_screenshots, edit_live: edit_live)
    end

  end

  desc "Setup provisioning, certificates, capabilities, etc..."
  lane :provision do |options|
    produce(
      app_identifier: ENV['APP_IDENTIFIER'],
      app_name: ENV['APP_NAME'],
      language: "English",
      app_version: "1.0",
      app_version: "1.0",
      sku: ENV['APP_SKU'],
    )
    produce(
      app_identifier: "#{ENV['APP_IDENTIFIER']}.Import-Lesson",
      app_name: "Import Lesson",
      skip_itc: true #Use this to avoid creating a new app and just register the app_identifier
      )
    produce(
      app_identifier: "#{ENV['APP_IDENTIFIER']}.Widget",
      app_name: "LingQ",
      skip_itc: true #Use this to avoid creating a new app and just register the app_identifier
    )
    produce(
      app_identifier: "#{ENV['APP_IDENTIFIER']}.LingQ-Intents",
      app_name: "LingQ",
      skip_itc: true #Use this to avoid creating a new app and just register the app_identifier
    )
    produce(
      app_identifier: "#{ENV['APP_IDENTIFIER']}.Notifications-Service",
      app_name: "LingQ",
      skip_itc: true #Use this to avoid creating a new app and just register the app_identifier
    )
#    produce(
#      app_identifier: "#{ENV['APP_IDENTIFIER']}.watchkitapp",
#      app_name: "LingQ",
#      skip_itc: true #Use this to avoid creating a new app and just register the app_identifier
#    )
#    produce(
#      app_identifier: "#{ENV['APP_IDENTIFIER']}.watchkitapp.watchkitextension",
#      app_name: "LingQ",
#      skip_itc: true #Use this to avoid creating a new app and just register the app_identifier
#    )

    group = "group.lingq.#{ENV['LANG_CODE']}"
    sh "fastlane produce enable_services --associated-domains --push-notification --in-app-purchase --app-group --siri-kit -a #{ENV['APP_IDENTIFIER']}"
    sh "fastlane produce enable_services --associated-domains --push-notification --in-app-purchase --app-group -a #{ENV['APP_IDENTIFIER']}.Import-Lesson"
    sh "fastlane produce enable_services --associated-domains --push-notification --in-app-purchase --app-group -a #{ENV['APP_IDENTIFIER']}.Widget"
    sh "fastlane produce enable_services --associated-domains --push-notification --in-app-purchase --app-group -a #{ENV['APP_IDENTIFIER']}.LingQ-Intents"
    sh "fastlane produce enable_services --associated-domains --push-notification --in-app-purchase --app-group -a #{ENV['APP_IDENTIFIER']}.Notifications-Service"
#    sh "fastlane produce enable_services --associated-domains --push-notification --in-app-purchase --app-group -a #{ENV['APP_IDENTIFIER']}.watchkitapp"
#    sh "fastlane produce enable_services --associated-domains --push-notification --in-app-purchase --app-group -a #{ENV['APP_IDENTIFIER']}.watchkitapp.watchkitextension"

    sh "fastlane produce group -g #{group} -n 'LingQ Group' --app-identifier #{ENV['APP_IDENTIFIER']}"
    sh "fastlane produce group -g #{group} -n 'LingQ Group' --app-identifier #{ENV['APP_IDENTIFIER']}.Import-Lesson"
    sh "fastlane produce group -g #{group} -n 'LingQ Group' --app-identifier #{ENV['APP_IDENTIFIER']}.Widget"
    sh "fastlane produce group -g #{group} -n 'LingQ Group' --app-identifier #{ENV['APP_IDENTIFIER']}.LingQ-Intents"
    sh "fastlane produce group -g #{group} -n 'LingQ Group' --app-identifier #{ENV['APP_IDENTIFIER']}.Notifications-Service"
#    sh "fastlane produce group -g #{group} -n 'LingQ Group' --app-identifier #{ENV['APP_IDENTIFIER']}.watchkitapp"
#    sh "fastlane produce group -g #{group} -n 'LingQ Group' --app-identifier #{ENV['APP_IDENTIFIER']}.watchkitapp.watchkitextension"

    sh "fastlane produce associate_group #{group} -a #{ENV['APP_IDENTIFIER']}"
    sh "fastlane produce associate_group #{group} -a #{ENV['APP_IDENTIFIER']}.Import-Lesson -i 1"
    sh "fastlane produce associate_group #{group} -a #{ENV['APP_IDENTIFIER']}.Widget -i 1"
    sh "fastlane produce associate_group #{group} -a #{ENV['APP_IDENTIFIER']}.LingQ-Intents -i 1"
    sh "fastlane produce associate_group #{group} -a #{ENV['APP_IDENTIFIER']}.Notifications-Service -i 1"
#    sh "fastlane produce associate_group #{group} -a #{ENV['APP_IDENTIFIER']}.watchkitapp -i 1"
#    sh "fastlane produce associate_group #{group} -a #{ENV['APP_IDENTIFIER']}.watchkitapp.watchkitextension -i 1"

    UI.important("Don't forget to run `fastlane bootstrap force:1` to regenerate profiles which include these services.")
  end

  lane :bootstrap do |options|
    force = options[:force] ? true : false
    read_only = options[:readonly] ? true : false
    match(type: "development", force: force, clone_branch_directly: true, verbose: true, readonly: read_only, shallow_clone: true)
    match(type: "appstore", force: force, clone_branch_directly: true, verbose: true, readonly: read_only, shallow_clone: true)
    match(type: "adhoc", force: force, clone_branch_directly: true, verbose: true, readonly: read_only, shallow_clone: true)
  end

  desc "A more efficient method of `bootstrap` for all apps because it avoids re-cloning the repository each time"
  lane :bootstrap_all do |options|
    force = options[:force] ? true : false
    base = "com.lingq.iLingQ"
    apps = [base, "#{base}.Import-Lesson", "#{base}.Widget"]
    all_languages.each do |lang|
      apps.push("#{base}.#{lang}")
      apps.push("#{base}.#{lang}.Import-Lesson")
      apps.push("#{base}.#{lang}.Widget")
      apps.push("#{base}.#{lang}.Notifications-Service")
      apps.push("#{base}.#{lang}.watchkitapp")
      apps.push("#{base}.#{lang}.watchkitapp.watchkitextension")
    end
    match(type: "appstore", app_identifier:apps, force: force)
    match(type: "development", app_identifier:apps, force: force)
    match(type: "adhoc", app_identifier:apps, force: force)
  end

  lane :fix_signing do |options|
    lane provision
    lane certificates
    lane bootstrap force:1
  end

  after_all do |lane|
    UI.message "#{lane} finished"
    next
    # sh "osascript -e 'display notification \"Finished #{lane}\" with title \"fastlane --env #{ENV['LANG_CODE']}\" sound name \"default\"'"
  end

  error do |lane, exception|
    # sh "osascript -e 'display notification \"#{lane} - #{exception.message}\" with title \"ERROR : fastlane --env #{ENV['LANG_CODE']}\" sound name \"default\"'"
    # slack(
    #   message: exception.message,
    #   success: false
    # )
  end
  desc "Environment Settings"
  lane :check_env do
    puts "APP_IDENTIFIER: #{ENV['APP_IDENTIFIER']}"
    puts "APP_NAME: #{ENV['APP_NAME']}"
    puts "APP_SKU: #{ENV['APP_SKU']}"
    puts "LANG_CODE #{ENV['LANG_CODE']}"
  end

  desc "Building"
  lane :build do |options|
    check_env
    update_project(options)
    #provision(options)
    gym(export_method: "app-store") #, export_xcargs: "-allowProvisioningUpdates")
  end

  desc "Setting up xcconfig, plist, etc..."
  lane :update_project do
    fastlane_require 'xcodeproj'
    code = ENV['LANG_CODE']
    path = "../LingQ.xcconfig"
    config = Xcodeproj::Config.new(path)
    config.attributes['CURRENT_PROJECT_VERSION'] = ENV['BUILD_VERSION']
    config.attributes['MARKETING_VERSION'] = ENV['MARKETING_VERSION']
    config.attributes['LQ_APP_IDENTIFIER'] = ENV['APP_IDENTIFIER']
    config.attributes['LQ_APP_LANGUAGE'] = code
    config.attributes['LQ_APP_NAME'] = ENV['APP_NAME']
    config.attributes['LQ_DISPLAY_NAME'] = ENV['DISPLAY_NAME']
    config.attributes['LQ_PREMIUM_AUTO'] = ENV['PREMIUM_AUTO']
    config.attributes['LQ_PREMIUM_AUTO_6'] = ENV['PREMIUM_AUTO_6']
    config.attributes['LQ_PREMIUM_AUTO_12'] = ENV['PREMIUM_AUTO_12']
    config.attributes['LQ_PREMIUM_AUTO_NO_TRIAL'] = ENV['PREMIUM_AUTO_NO_TRIAL']
    config.attributes['LQ_PREMIUM_AUTO_6_NO_TRIAL'] = ENV['PREMIUM_AUTO_6_NO_TRIAL']
    config.attributes['LQ_PREMIUM_AUTO_12_NO_TRIAL'] = ENV['PREMIUM_AUTO_12_NO_TRIAL']
    config.attributes['LQ_PREMIUM_AUTO_12_DISCOUNT_1'] = ENV['PREMIUM_AUTO_12_DISCOUNT_1']
    config.attributes['LQ_PREMIUM_AUTO_12_DISCOUNT_2'] = ENV['PREMIUM_AUTO_12_DISCOUNT_2']
    config.attributes['LQ_KOCHAVA_TOKEN'] = ENV['KOCHAVA_TOKEN']
    config.attributes['LQ_CT_APP_ID'] = ENV['CT_APP_ID']
    config.attributes['FB_LOGIN_SCHEME'] = ENV['FB_LOGIN_SCHEME']
    config.attributes['GOOGLE_LOGIN_SCHEME'] = ENV['GOOGLE_LOGIN_SCHEME']
    if ENV['GOOGLE_SERVICES'] != nil
      config.attributes['GOOGLE_SERVICES'] = ENV['GOOGLE_SERVICES']
    else
      config.attributes['GOOGLE_SERVICES'] = 'default.plist'
    end
    if ENV['APP_ICON'] != nil
      config.attributes['LQ_APP_ICON'] = ENV['APP_ICON']
    else
      config.attributes['LQ_APP_ICON'] = "AppIcon-#{code}"
    end
    File.write(path, config.to_s) # A bug prevents config from writing itself

    UI.message ENV['USE_APPLE_SIGNIN']

    update_plist(
      plist_path: "iLingQ/iLingQ.entitlements",
      block: proc do |plist|
      if ENV['USE_APPLE_SIGNIN']
        UI.message "Adding"
        plist["com.apple.developer.applesignin"] = ["Default"]
      else
        UI.message "Removing"
        plist.delete("com.apple.developer.applesignin")
      end
  end
    )

    next

    UI.message "Updating provisioning profile specifiers"
    path = "../iLingQ.xcodeproj"
    proj = Xcodeproj::Project.open(path)
    targets = ["LingQ", "Import Lesson", "LingQ WidgetExtension", "LingQ Intents", "Notifications-Service"]
    prefixes = { "Ad Hoc" => "AdHoc", "Release" => "AppStore", "Debug" => "Development", "Notifications-Service" => "Notifications-Service" }
    suffixes = { "LingQ" => "", "LingQ WidgetExtension" => ".Widget", "Import Lesson" => ".Import-Lesson", "Notifications-Service" => ".Notifications-Service" }
    proj.targets.each do |target|
      next if !targets.include? target.name
      UI.message "#{target.name}"
      target.build_configuration_list.build_configurations.each do |config|
        profile = "match #{prefixes[config.name]} #{ENV['APP_IDENTIFIER']}#{suffixes[target.name]}"
        config.build_settings["PROVISIONING_PROFILE_SPECIFIER"] = profile
        config.build_settings["PRODUCT_BUNDLE_IDENTIFIER"] = "#{ENV['APP_IDENTIFIER']}#{suffixes[target.name]}"
        UI.message profile
      end
    end

    proj.save

    # Note that plist is relative to project file
    update_info_plist(
      plist_path: "Info.plist", block: lambda { |plist|
        plist['LQ_LANG_CODE'] = ENV['LANG_CODE']
      }
    )

    update_app_identifier(
      plist_path: "Info.plist",
      xcodeproj: "iLingQ.xcodeproj",
      app_identifier: ENV['APP_IDENTIFIER']
    )
  end

  desc "Create screenshots"
  lane :screenshots do
    check_env
    update_project
    snapshot
    copy_screenshots
  end

  lane :copy_screenshots do

    base = "#{ENV['LANG_CODE']}/screenshots"
    sh "cp iPad-01Splash.png #{base}/en-US/"

    screenshot_pairs.each do |code, array|
      array.each do |dir|
        next if dir == "en-US"
        UI.message "Copying into #{base}/#{dir}"
        FileUtils.mkdir_p("#{base}/#{dir}")
        sh "cp *01Splash.png #{base}/#{dir}/"
        begin # This may fail if there are no results
          # Do not move because we need these multiple times for some languages
          sh "cp #{base}/en-US/*-#{code}.png* #{base}/#{dir}/"
        rescue
        end
      end
      begin
        sh "rm #{base}/en-US/*-#{code}*" if code != "en"
      rescue
        UI.message "#{base}/en-US/*-#{code}* does not exist"
      end
    end
  end

  lane :fix_screenshots_dirs do
    base = "#{ENV['LANG_CODE']}/screenshots"
    screenshot_pairs.each do |code, array|
      array.each do |dir|
        FileUtils.rm("#{base}/#{dir}")
        FileUtils.cp_r("#{base}/#{code}", "#{base}/#{dir}")
      end
      FileUtils.rm("#{base}/#{code}")
    end
  end

  lane :frames do
    Dir.chdir ENV['fastlane'] do
      sh "./framer --screenshots_dir #{ENV['LANG_CODE']}"
    end
  end

  desc "Download metadata and screenshots from itunes connect"
  lane :download_itc do |options|
    check_env
    update_project
    sh "fastlane deliver --force download_metadata"
    sh "fastlane deliver --force download_screenshots"
  end

  desc "Create all the folders for each language"
  lane :create_folders do |options|
    fastlane_require 'fileutils'
    puts FileUtils.getwd
    all_languages.each do |lang|
      puts lang
      if options[:delete] && Dir.exist?(lang)
        puts "Deleting #{lang}"
        FileUtils.rm lang, :force => true
      end
      if !Dir.exist?(lang)
        FileUtils.mkdir lang
      end
      FileUtils.cp_r "all/.", lang, :remove_destination => false
      FileUtils.rm_rf "#{lang}/bin/"
    end
  end

  desc "Executes the given lane for all languages plus the main app"
  lane :for_all_apps do |options|
    lane = options[:lane]
    skip = options[:skip_main] ? true : false
    puts "Doing #{lane} for all languages.  Skip main app: #{skip}"
    if !lane
      UI.error "No `lane` parameter passed to `for_all`."
      raise "No `lane` parameter passed to `for_all`."
    end
    if !skip
      sh "fastlane #{lane}"
    end
    all_languages.each do |lang|
      sh "fastlane --env #{lang} #{lane}"
    end
  end

  desc "Copies `files` from fastlane/LingQ/base_dir/ to fastlane/LANG_CODE/base_dir/.  Default base_dir is `metadata`"
  lane :copy_files do |options|
    fastlane_require 'fileutils'
    files_string = options[:files]
    base_dir = options[:base_dir] ? options[:base_dir] : "metadata"
    if !files_string
      UI.error "`copy_files requires an argument `files` with a comma separated list, e.g. `fastlane copy_files files:1.txt,2.txt`"
    end
    files = files_string.split(",")
    quit = false
    files.each do |name|
      file = "LingQ/#{base_dir}/#{name}"
      if !File.exist?(file)
        UI.error "No file #{file} exists"
        quit = true
      end
    end
    if quit
      raise "copy_files called with invalid file names"
    end
    files.each do |name|
      file = "all/#{base_dir}/#{name}"
      all_languages.each do |lang|
        copy = "#{lang}/#{base_dir}/#{name}"
        FileUtils.cp file, copy
      end
    end
    sh "fastlane for_all_apps lane:overwrite_name skip_main:1"
  end

  lane :overwrite_name do |options|
    fastlane_require 'fileutils'
    fastlane_require 'pathname'
    lang = ENV['LANG_CODE']
    root = "#{lang}/metadata"
    Dir.entries(root).each do |dir|
      name = "#{root}/#{dir}/name.txt"
      if File.exists?(name)
        File.write(name, ENV['APP_NAME'])
      end
    end
  end

  lane :certificates do |options|
    force = options[:force] ? "--force" : ""
    fastlane_require 'fileutils'
    certificates = "#{ENV['LANG_CODE']}/certificates"
    id = ENV['APP_IDENTIFIER']

    if !Dir.exist?(certificates)
      FileUtils.mkdir certificates
    end

    Dir.chdir certificates do
      sh "fastlane pem #{force} -a #{id} -u<EMAIL_ADDRESS>      #sh "fastlane pem --development  -a #{id} -u<EMAIL_ADDRESS>      # Export with password for pusher, keychain, etc...
      sh "openssl pkcs12 -in production_#{id}_ios.p12 -out pusher_production_#{id}_ios.pem -password pass: -passout pass:pusher"
      sh "openssl pkcs12 -export -in pusher_production_#{id}_ios.pem -out pusher_#{id}_ios.p12 -passin pass:pusher -passout pass:pusher"
    end
  end

  class Subscription
    attr_accessor :id, :family, :duration, :trial, :tier, :refName
    def initialize(env, family, duration, trial, tier, refName)
      @id = ENV[env]
      @family = family
      @duration = duration # 1m, 6m, 1y
      @trial = trial
      @tier = tier # Pricing
      @refName = refName
      UI.crash! "ENV['#{env}'] may not be nil" if @id == nil || @id == ""
    end
  end

  lane :create_purchases do |options|

    submit = options[:submit] ? true : false

    fastlane_require 'spaceship'

    Spaceship::Tunes.login
    app = Spaceship::Application.find(ENV['APP_IDENTIFIER'])

    notes = "Account can be upgraded after signing up a new user and tapping the crown button on the homescreen."
    screenshot = "purchase.png"

    # Populate names and descriptions
    versions = {}
    #{"es-ES" => "es"}.each do |loc, lang|
    purchase_pairs.each do |loc, lang|
      name = localized_string(lang, "app.purchase.name")
      description = localized_string(lang, "app.purchase.description")
      versions[loc] = { name: name, description: description }
    end

    # Create purchase family
    fam1 = "premiumAutoRenewable"
    fam2 = "discountedYearly1"
    fam3 = "discountedYearly2"

    subscriptions = [
#      Subscription.new('PREMIUM_AUTO',              fam1,  '1m', 24,  '1w',     '1 Month Auto Renewal'),
#      Subscription.new('PREMIUM_AUTO_NO_TRIAL',      fam1, '1m', '0w', 26, '1 Month Auto Renewal - No Trial'),
#      Subscription.new('PREMIUM_AUTO_6',            fam1,  '6m', 102, '1w',     '6 Month Auto Renewal'),
      Subscription.new('PREMIUM_AUTO_6_NO_TRIAL',    fam1, '6m', '0w', 102, '6 Month Auto Renewal - No Trial'),
#      Subscription.new('PREMIUM_AUTO_12',           fam1,  '1y', 138, '1w',     '12 Month Auto Renewal'),
#      Subscription.new('PREMIUM_AUTO_12_NO_TRIAL',   fam1, '1y', '0w', 138, '12 Month Auto Renewal - No Trial'),
#      Subscription.new('PREMIUM_AUTO_12_DISCOUNT_1', fam2, '1y', '0w', 133, '12 Month Auto Renewal - Discount 1'),
#      Subscription.new('PREMIUM_AUTO_12_DISCOUNT_2', fam3, '1y', '0w', 128, '12 Month Auto Renewal - Discount 2')
    ]
    # Some documentation at https://github.com/fastlane/fastlane/issues/15437
    subscriptions.each do |sub|

      # Find or create the family
      family = app.in_app_purchases.families.all.find { |p| p.name == sub.family }
      if family == nil
        UI.success "Creating in-app purchase family: #{sub.family}"
        app.in_app_purchases.families.create!(name: sub.family, product_id: sub.id, reference_name: sub.family, versions: versions)
        family = app.in_app_purchases.families.all.find { |p| p.name == sub.family }
      end
      UI.crash! "Family not found: #{sub.family}" if family == nil

      # Find or create the product
      product = app.in_app_purchases.all.find { |p| p.product_id == sub.id }
      if product == nil
        UI.success "Creating #{sub.id}"
        app.in_app_purchases.create!(type: Spaceship::Tunes::IAPType::RECURRING,
          versions: versions,
          reference_name: sub.refName,
          product_id: sub.id,
          cleared_for_sale: true,
          review_notes: notes,
          review_screenshot: screenshot,
          pricing_intervals: [ {
            country: "WW",
            begin_date: nil,
            end_date: nil,
            tier: sub.tier,
            grandfathered: { value: "FUTURE_NONE" }
          } ],
          family_id: family.family_id
        )
        product = app.in_app_purchases.all.find { |p| p.product_id == sub.id }
      end

      UI.crash! "Product not found: #{sub.id}" if product == nil

      edit = product.edit
      edit.pricing_intervals = [ {
        country: "WW",
        begin_date: nil, #(Date.today + 1).to_s,
        end_date: nil,
        tier: sub.tier,
        grandfathered: { value: "FUTURE_NONE" }
      } ]

      edit.subscription_duration = sub.duration
      edit.subscription_free_trial = sub.trial
      edit.subscription_price_target = { currency: "USD", tier: sub.tier }
      edit.reference_name = sub.refName
      edit.cleared_for_sale = false
      edit.review_notes = notes
      edit.review_screenshot = screenshot
      edit.versions = versions
      UI.success "Saving update for #{sub.id}"
      edit.save!
      UI.success "Saved: #{sub.id}"

      if submit
        UI.success "Submitting: #{sub.id}"
        product.client.submit_iap!(app_id: app.apple_id, purchase_id: product.product_id)
        UI.success "Submitted: #{sub.id}"
      end
    end

    UI.message("Finished updating subscriptions")
  end

  lane :update_descriptions do |options|
    code = ENV['LANG_CODE']
    UI.crash! "Cannot run 'update_translations' on main app" if code == 'LingQ'

    dirs = get_directories("#{code}/metadata/")
    UI.message dirs

    for d in dirs do
      strings = get_localizations(d)
      language = strings["language.name.#{code}"]
      UI.error "language.name.#{code} does not exist" if language == nil
      description = strings["app.description"].gsub("%1$@", language)
      base = "#{code}/metadata/#{d}"
      File.write("#{base}/description.txt", description)
    end
  end

  def get_directories(path)
    dirs = Dir.entries(path).select { |f| File.directory? "#{path}/#{f}" }
    dirs = dirs.select { |f| f != "." && f != ".." }
    return dirs
  end

  def localized_string(language, key)
    localizations = get_localizations(language)
    value = localizations[key]
    UI.crash! "Invalid key: #{key} for language: #{language}" if value == nil
    return value
  end

  def get_localizations(directory_name)
    directory_name = "en" if directory_name == "default"
    directory_name = directory_name.split("-")[0] unless File.exists? "localizations/#{directory_name}.lproj"
    return parse_strings("localizations/#{directory_name}.lproj/LanguageSpecific.strings")
  end

  def parse_strings(path)

    UI.crash! "Couldn't find strings file at path '#{path}'" unless File.exist? path
    UI.crash! "Must be .strings file, only got '#{path}'" unless path.end_with? ".strings"

    result = {}

    content = File.read path

    content.split("\n").each_with_index do |line, index|
      begin
        # We don't care about comments and empty lines
        if line.start_with? '"'
          key = line.match(/"(.*)" \= /)[1]
          value = line.match(/ \= "(.*)"/)[1]
          value = value.gsub("\\n", "\n")
          value = value.gsub('\\"', '"')
          result[key] = value
        end
      rescue => ex
        UI.error "Error parsing #{path} line #{index + 1}: '#{line}'"
        UI.verbose "#{ex.message}\n#{ex.backtrace.join('\n')}"
      end
    end

    if result.empty?
    end

    return result
  end

end

`./fastlane/Appfile`
app_identifier ENV['APP_IDENTIFIER']
apple_id<EMAIL_ADDRESS># Your Apple email address

team_id "FXD5S9TV5H"  # Developer Portal Team ID

# you can even provide different app identifiers, Apple IDs and team names per lane:
# More information: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md

fastlane gems

Gem
Version
Update-Status

fastlane
2.210.1
✅ Up-To-Date

Loaded fastlane plugins:
No plugins Loaded
Loaded gems

Gem
Version

did_you_mean
1.3.0

atomos
0.1.3

CFPropertyList
2.3.6

claide
1.0.3

colored2
3.1.2

nanaimo
0.3.0

xcodeproj
1.19.0

rouge
2.0.7

xcpretty
0.3.0

terminal-notifier
2.0.0

unicode-display_width
1.7.0

terminal-table
1.8.0

plist
3.6.0

public_suffix
4.0.6

addressable
2.8.0

multipart-post
2.0.0

word_wrap
1.0.0

optparse
0.1.1

tty-screen
0.8.1

tty-cursor
0.7.1

tty-spinner
0.9.3

artifactory
3.0.15

babosa
1.0.4

colored
1.2

highline
2.0.3

commander
4.6.0

excon
0.78.1

faraday-net_http
1.0.1

ruby2_keywords
0.0.2

faraday
1.3.0

http-cookie
1.0.3

faraday-cookie_jar
0.0.7

faraday_middleware
1.0.0

fastimage
2.2.1

gh_inspector
1.1.3

json
2.1.0

mini_magick
4.11.0

naturally
2.2.0

rubyzip
2.3.0

security
0.1.3

xcpretty-travis-formatter
1.0.1

dotenv
2.7.6

bundler
2.2.5

simctl
1.6.8

jwt
2.2.2

uber
0.1.0

declarative
0.0.20

declarative-option
0.1.0

representable
3.0.4

retriable
3.1.2

mini_mime
1.0.2

multi_json
1.15.0

signet
0.14.0

memoist
0.16.2

os
1.1.1

googleauth
0.14.0

httpclient
2.8.3

rexml
<IP_ADDRESS>

google-apis-core
0.2.0

google-apis-playcustomapp_v1
0.3.0

google-apis-androidpublisher_v3
0.5.0

google-cloud-env
1.4.0

google-cloud-errors
1.0.1

google-cloud-core
1.5.0

google-apis-iamcredentials_v1
0.1.0

google-apis-storage_v1
0.1.0

digest-crc
0.6.3

google-cloud-storage
1.31.1

emoji_regex
3.2.1

jmespath
1.4.0

aws-partitions
1.416.0

aws-eventstream
1.1.0

aws-sigv4
1.2.2

aws-sdk-core
3.111.0

aws-sdk-kms
1.41.0

aws-sdk-s3
1.87.0

unf_ext
<IP_ADDRESS>

unf
0.1.4

domain_name
0.5.20190701

rake
13.0.3

forwardable
1.2.0

logger
1.3.0

date
2.0.0

stringio
0.0.2

zlib
1.0.0

ipaddr
1.2.2

openssl
2.1.2

ostruct
0.1.0

strscan
1.0.0

io-console
0.4.7

fileutils
1.1.0

etc
1.0.1

libxml-ruby
3.2.1

psych
3.1.0

mutex_m
0.1.0

generated on: 2022-10-18

I just had this happen again (though I killed the process before it finished). In this case the builds were not in quick succession. I uploaded 5.1.3 (2) yesterday, and 5.1.3 (3) a few minutes ago. But fastlane tried to submit the (2) build.
[16:55:38]: Finished the upload to App Store Connect
[16:55:40]: Selecting the latest build...
[16:55:40]: Waiting for processing on... app_id: 379385811, app_version: , build_version: , platform: IOS
[16:55:40]: Searching for the latest build
[16:56:30]: Successfully finished processing the build 5.1.3 - 2 for IOS
[16:56:30]: Selecting build 5.1.3 (2)...

I wonder if this might not be a problem with Apple not reporting the most recent build for some time?
I just went into App Store Connect. Build #2 was selected for submission. But when I removed it and tried to select a different one #3 was not visible. I went to TestFlight and saw that #3 was processing there. When I came back to the "prepare for submission" page, #3 was visible.

This is still an issue. This definitely appears to be new behavior. I used to be able to upload a build and immediately after that submit it. Fastlane would wait for the actual latest build to be ready.

This is still an issue and is quite dangerous behavior. Is it possible to force fastlane to only submit a version and build I specify, instead of "the latest"?


[Feature]:  Can you consider adding a parameter at the specified template level

Requirement
I want to be able to increase the level of the index template similar to the specified number of index fragments.
Problem
We are writing an jaeger-span index to an ES cluster. An index template already exists in the cluster, and the index matched by that template is *, which does not take effect when the index created by parameter such as ES_ARCHIVE_NUM_SHARDS is specified, because the order value in the default created index is 0. I solved this problem by manually increasing the order value of the index written by jaeger.
So I want to be able to add command-line arguments to specify the order value of the template.
Proposal
No response
Open questions
No response

Let's step back.

If the template does not exist on the server Jaeger backend is supposed to create one.
If the template already exists, what is the expectation from the Jaeger backend? I see only two options:
a. either it does not do anything, or
b. it makes sure it overrides the template with what the backend thinks is the appropriate shape (possibly controlled by a flag that enables/disables this overriding behavior)

If this mode of operations makes sense, then I don't see that your proposal fits very well in it. Your use case sounds more similar to 2b, but then I don't think Jaeger should be expecting any external inputs like order value, it should do whatever is necessary to update the template.
Thoughts?

In fact, the existing template is a common template in the cluster, which has nothing to do with jaeger, but because the index set by that template matches all the indexes. when jaeger specifies a replica or shard through the parameter, the actual result is not as expected.
I understand that usually jaeger should use a separate cluster, but sometimes it may connect to a common ES cluster.
For example, this cluster has such a default template at this time:
GET _template/default_template
{
  "index_patterns": ["*"],
  "settings": {
    "order": 0,
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

Then I want the index of jaeger-span to have a shards of 5 and a replicas of 0. How should I specify the startup parameters at this time?

Jaeger indexes have specific names, could they not be addressed by that common part of the name instead of "*"?

This is the default configuration of the cluster to restrict other index settings.


Obtain document-topic representation after training?

Hi jhlau, thanks for sharing your implementation.
I wonder where can I obtain the document-topic representation learnt during training for the training documents (in a unsupervised setting)? I don't necessarily want to infer topic distribution for some unseen documents in this case as I only need a unsupervised way to learn document representation that embeds topic information.
Thanks!

You'll have to infer the topic distribution for the training documents unfortunately, as the model doesn't really keep track of them unlike LDA models (which stores them in a matrix).
In theory you can explicitly 'save' the inferred topic distribution during training, and I've thought of doing it, but it's bad for two reasons:
-the topic distribution learnt for the first batch could be different to the last batch, as the model is still changing
-it won't scale well memory wise for very large document collection


Django template update

Fix #1890 Django template needs updating
This updates the polls sample based on the version in PTVS-samples repo.  I took care of not reverting any updates we already had (.pyproj changes for 3.0).
I looked at all the other django templates, and could not see any using old django code.
By the way, I compared django-manage createproject/createapp between django 1.9 and 1.10, and the only difference is is comments/urls where 1.9 is replaced with 1.10.

👍


ci: update reference docs

This PR is auto-generated by a nightly GitHub action to update the reference docs from source code in withastro/astro.

Lunaria Status Overview
🌕 This pull request will trigger status changes.

Learn more
By default, every PR changing files present in the Lunaria configuration's files property will be considered and trigger status changes accordingly.
You can change this by adding one of the keywords present in the ignoreKeywords property in your Lunaria configuration file in the PR's title (ignoring all files) or by including a tracker directive in the merged commit's description.

Tracked Files

Locale
File
Note

en
reference/configuration-reference.mdx
Source changed, localizations will be marked as outdated.

Warnings reference

Icon
Description

🔄
The source for this localization has been updated since the creation of this pull request, make sure all changes in the source have been applied.

⚠ DO NOT MERGE BEFORE https://github.com/withastro/astro/pull/12000 ⚠
The Content Layer RFC link was updated in #9410 but this is the configuration-reference.mdx file so the update should have been done in astro repo. If we merge this PR now, the fix would be overwritten!


fix issues compilation with cocoapods

Coverage remained the same at 92.56% when pulling 819205e4a7bd83b8da9a387bdefb556dd8f5581b on remirobert:master into 139f131b53b0b835e96af79f605bfc3bee1c616a on IFTTT:master.

Thanks for getting this in! (FYI- you'll have to point CocoaPods to the commit when this is merged in to use it for now, until we create a new Pod version number and submit it to CocoaPods (should be tomorrow).
For today, this should work in your podfile-
pod 'jot', :git => 'https://github.com/IFTTT/jot.git', :commit => '620115d933'


Users do not necessarily have roles.

Roles are what inform which scopes are permitted per user, and
scopes are optional. By reference, roles should also be optional,
with the default behavior being "Yes we know who you are, but no
you can't have any scope".

Coverage remained the same at 100.0% when pulling e17928651f191a995aaf2611b16c18a5bfef1131 on feature/user_roles into b5a9d5103f66ca54ab9340a82c2ad667e5efe924 on develop.


Beartype 0.10.2 on Python 3.9.10: typing.Mapping imported implicitly by third-party packages

Hi @leycec , 0.10.2 now emits beartype.roar.BeartypeDecorHintPep585DeprecationWarning even if it's a 3rd-party package which uses things like typing.Mapping. Found a minimal example :)
from dataclasses import dataclass

from beartype import beartype
from xarray import Dataset

@beartype
@dataclass
class Dummy:
    dataset: Dataset

:sweat_smile:
Fascinating... and horrifying! So pytest is ignoring your helpful desire to promote warnings to exceptions. Thanks for everything and yet at the same time nothing, pytest.
To help us help you, would you mind injecting this at the very top of the {your_package_name_here}.__init__ submodule for your project?
# Coerce all non-fatal warnings into fatal exceptions.
import warnings
warnings.filterwarnings("error")

Let's see what pops up.

Just updated the issue and found the cause @leycec
Is this what they call real-time communication?

Thanks so much for that rapid action, @dycw! Pinch me, I'm either dreaming or we're both trapped in a historically accurate simulation of a terrifying cyberpunk dystopia after being force-neuralinked to the same irradiated basement server in a burned-out New Vegas hovel.
So. @beartype is actually playing nicely for once here. In this case, upstream is in dire jeopardy of having its API yanked out from under it in 2025 when PEP 585 deprecations go live:
...
from typing import (
    ...
    Mapping,
    ...
)
...
class Dataset(DataWithCoords, DatasetArithmetic, Mapping):

Yikes. That's rough, xarray. Upstream needs to generalize that to instead read something like:
...
from sys import version_info

if version_info >= (3, 9):
    from collections.abc import Mapping
else:
    from typing import Mapping
...
class Dataset(DataWithCoords, DatasetArithmetic, Mapping):

Would you mind filing an issue at the upstream issue tracker on behalf of all tensor typing QA gentlemen such as ourselves? It doesn't look like there are any existing open issues – but I also didn't look very hard. :smirk:


Allow suppressing unsupported FFI calls

In the project I'm working on we have many tests that we'd potentially like to run with Miri in our CI/CD. These tests may invoke syscalls or other unsupported FFI operations that we would like to suppress and treat as successful tests for a few reasons:

Reduce the developer burden of applying cfg(miri) to ignore specific tests.
Tests invoking unsupported foreign functions will still be emulated up until they perform the foreign function call. Testing to this point may still yield valuable results.
Opting out of specific tests requires conscious thought of whether a test should be re-enabled after a refactoring to remove a foreign function call that would otherwise raise an error.

I believe this could be handled with the introduction of a new -Z variable, -Zmiri-ignore-ffi-failure, that would simply treat these failures as an early exit with status code 0. Here's the proposed change to Miri:

Click to view diff
diff --git a/src/bin/miri.rs b/src/bin/miri.rs
index 4a1ea3a5..78f9b196 100644
--- a/src/bin/miri.rs
+++ b/src/bin/miri.rs
@@ -230,6 +230,9 @@ fn main() {
                 "-Zmiri-disable-isolation" => {
                     miri_config.communicate = true;
                 }
+                "-Zmiri-ignore-ffi-failures" => {
+                    miri_config.ignore_unsupported_ffi_failures = true;
+                }
                 "-Zmiri-ignore-leaks" => {
                     miri_config.ignore_leaks = true;
                 }
diff --git a/src/eval.rs b/src/eval.rs
index 1e46015f..8acc3020 100644
--- a/src/eval.rs
+++ b/src/eval.rs
@@ -35,6 +35,8 @@ pub struct MiriConfig {
     pub communicate: bool,
     /// Determines if memory leaks should be ignored.
     pub ignore_leaks: bool,
+    /// Determines if failures caused by unsupported FFI failures should be ignored.
+    pub ignore_unsupported_ffi_failures: bool,
     /// Environment variables that should always be isolated from the host.
     pub excluded_env_vars: Vec<String>,
     /// Command-line arguments passed to the interpreted program.
@@ -206,6 +208,7 @@ pub fn create_ecx<'mir, 'tcx: 'mir>(
 pub fn eval_main<'tcx>(tcx: TyCtxt<'tcx>, main_id: DefId, config: MiriConfig) -> Option<i64> {
     // Copy setting before we move `config`.
     let ignore_leaks = config.ignore_leaks;
+    let ignore_unsupported_ffi_failures= config.ignore_unsupported_ffi_failures;

     let (mut ecx, ret_place) = match create_ecx(tcx, main_id, config) {
         Ok(v) => v,
@@ -267,6 +270,14 @@ pub fn eval_main<'tcx>(tcx: TyCtxt<'tcx>, main_id: DefId, config: MiriConfig) ->
             }
             Some(return_code)
         }
-        Err(e) => report_error(&ecx, e),
+        Err(e) => {
+            if let InterpError::Unsupported(UnsupportedOpInfo::UnsupportedForeignFunction(_name)) = e.kind() {
+                if ignore_unsupported_ffi_failures {
+                    // clean exit
+                    return Some(0);
+                }
+            }
+            report_error(&ecx, e)
+        }
     }
 }
diff --git a/src/shims/posix/linux/foreign_items.rs b/src/shims/posix/linux/foreign_items.rs
index f7d7706e..d78e6da3 100644
--- a/src/shims/posix/linux/foreign_items.rs
+++ b/src/shims/posix/linux/foreign_items.rs
@@ -214,7 +214,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
                 this.write_null(dest)?;
             }

-            _ => throw_unsup_format!("can't call foreign function: {}", link_name),
+            _ => throw_unsup_foreign_function(link_name),
         };

         Ok(true)
diff --git a/src/shims/posix/macos/foreign_items.rs b/src/shims/posix/macos/foreign_items.rs
index 9a7d3be1..03656395 100644
--- a/src/shims/posix/macos/foreign_items.rs
+++ b/src/shims/posix/macos/foreign_items.rs
@@ -156,7 +156,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
                 this.write_scalar(addr, dest)?;
             }

-            _ => throw_unsup_format!("can't call foreign function: {}", link_name),
+            _ => throw_unsup_foreign_function(link_name),
         };

         Ok(true)
diff --git a/src/shims/windows/foreign_items.rs b/src/shims/windows/foreign_items.rs
index b246ccc3..e4211669 100644
--- a/src/shims/windows/foreign_items.rs
+++ b/src/shims/windows/foreign_items.rs
@@ -415,7 +415,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
                 this.write_scalar(Scalar::from_i32(1), dest)?;
             }

-            _ => throw_unsup_format!("can't call foreign function: {}", link_name),
+            _ => throw_unsup_foreign_function(link_name),
         }

         Ok(true)

This would require changes to rustc_middle as well for a new macro, throw_unsup_foreign_function, and a new UnsupportedOpInfo variant, UnsupportedOpInfo::UnsupportedForeignFunction(String).

If there is a better way of going about this please let me know, otherwise I would be happy to tackle this issue as proposed.

I believe this could be handled with the introduction of a new -Z variable, -Zmiri-ignore-ffi-failure, that would simply treat these failures as an early exit with status code 0.

That would exit the binary, and no more tests would be run... how is that helpful?

Is each test not a separate binary already? You can run cargo miri test --no-fail-fast today and it will run all tests but will still raise unsupported foreign function errors. This behavior is helpful to prevent blocking a PR on features that are simply unsupported in Miri.

No, all tests of a crate run within the same process on different threads. Rustc produces a single executable that is then run as a regular program by cargo. Only doctests are an exception in that they are each separately compiled and executed directly by rustdoc.

--no-fail-fast causes cargo to run the test executable for each crate even if a single fails. If you get an unsupported foreign function error from miri, the rest of the tests in the current crate will not run, but the tests for other crates will still run with --no-fail-fast.

I see now. Sorry for the misunderstanding -- that definitely changes things. The general idea here is to just fail the individual test gracefully, but exiting early and hiding the fact other tests were not run is not desirable.
I'm clearly not super familiar with Miri/cargo-test internals, but help me understand a bit better: the changes I proposed above in eval::eval_main would return the status for the test executable and not the individual test, is that correct?

Maybe we can raise a panic instead of an unknown FFI error. Then the regular panic handler will just mark the test as failed instead of stopping the world

I'm clearly not super familiar with Miri/cargo-test internals, but help me understand a bit better: the changes I proposed above in eval::eval_main would return the status for the test executable and not the individual test, is that correct?

Yes.
A test is just a single binary where you don't write main, but instead a main is supplied by the testing harness and that iterates over all #[test] functions and calls them in a big loop. Miri then just interprets that binary as regular Rust code (i.e., Miri is not even aware of the concept of a "test").

Maybe we can raise a panic instead of an unknown FFI error. Then the regular panic handler will just mark the test as failed instead of stopping the world

Most FFI functions are nounwind, so I am not sure how much sense this makes and how well it'll work...
@landaire
If you have so many tests that need FFI support, I am not sure how much Miri can really help. Maybe you can group the tests into different files? #![cfg(not(miri))] at the top of a file will disable all tests in that file for Miri.

@oli-obk that may work. The way we run tests in Azure Pipelines is to consume output from cargo test -- -Z unstable-options --format json. A test failing from a panic looks like this:
{ "type": "suite", "event": "started", "test_count": 1 }
{ "type": "test", "event": "started", "name": "tests::panic_test" }
{ "type": "test", "name": "tests::panic_test", "event": "failed", "stdout": "thread 'tests::panic_test' panicked at 'yo', src/main.rs:7:9\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n" }
{ "type": "suite", "event": "failed", "passed": 0, "failed": 1, "allowed_fail": 0, "ignored": 0, "measured": 0, "filtered_out": 0, "exec_time": 0.000117601 }

We could then enlighten the tool that parses test output to ignore panic-related failures as a success when passed a special flag or something.
@RalfJung

If you have so many tests that need FFI support, I am not sure how much Miri can really help.

Miri has already provided value in finding multiple instances of UB in our unsafe code.

Maybe you can group the tests into different files? #![cfg(not(miri))] at the top of a file will disable all tests in that file for Miri.

This is certainly possible but I'd like to go back to my original points:

Reduce the developer burden of applying cfg(miri) to ignore specific tests.
Tests invoking unsupported foreign functions will still be emulated up until they perform the foreign function call. Testing to this point may still yield valuable results.
Opting out of specific tests requires conscious thought of whether a test should be re-enabled after a refactoring to remove a foreign function call that would otherwise raise an error.

Additionally, it's a rather large project split across many crates with inter-dependencies. A massive refactoring for Miri is possible but is not an ideal solution IMO.
An alternative solution I hadn't thought of I guess is to run each test separately via cargo test -- --list, but I still have the issue of distinguishing a "legitimate violation" from unsupported features. String matching on errors can be done in our pipeline but is a bit of a hack. It's better than nothing though if this feature is not desired within Miri itself.

Interesting, so you have a mix of code that needs FFI and code that doesn't?

We're doing some work that at the core of the application relies on Windows syscalls or other FFI boundaries. So for simple data structures and pure rust functionality we can run them cleanly, but more complicated integration tests that need to cross the FFI boundary we of course fail when this happens. Unfortunately with abstraction it may not necessarily be obvious if the API needs to make an FFI call.
Even for FFI wrappers we may still have unsafe pure Rust setup that contains bugs, so exercising those tests as far as possible is still desired.

(Btw, we're always happy for submissions to our "trophy case" :D )

This is unfortunately the only public finding: https://github.com/icedland/iced/issues/168
I can outline a couple interesting patterns that I may write a future blog post about:

We had code similar to this, the intent was to copy an enum to a new location. The enum represents fixed-size (small) or dynamically-allocated data and the data_ptr() -> *const FirstFieldStructType implementation returned a pointer to the first field which was then being used to read the whole data structure (which no proper borrow existed for). Conversation in Zulip here
It's found multiple occasions where pointer aliasing rules were not being obeyed and a *const T was being converted to a *mut T. This appears to be mostly from an as_ptr(&self) -> *const T call being converted to *mut T when as_mut_ptr(&mut self) -> *mut T existed -- this is a good code smell and gave me a decent grep: self\..+ as \*mut. So far I've only seen one case where this pattern "valid" and the refactoring solution was to use an UnsafeCell<T>.
Right now I'm battling a case very similar to #1800 where a Box<T> gets aliased and stored somewhere. When the Box gets dropped, Miri raises the same trying to reborrow for SharedReadOnly violation from std::ptr::drop_in_place.

I understand it's still experimental but the stacked borrows work has been the majority of issues so far.
Systems engineering can be hard 😅.

So, this seems like an experiment worth doing.

I will give it a go and report back here/in Zulip. I appreciate the feedback from everyone so far.

Panicking at the point of an FFI call I think unfortunately introduces UB:
   --> C:\Users\lander\.rustup\toolchains\miri\lib\rustlib\src\rust\library\core\src\panicking.rs:42:6
    |
42  |     }
    |      ^ accessing a dead local variable
    |
    = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
    = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information

    = note: inside `core::panicking::panic` at C:\Users\lander\.rustup\toolchains\miri\lib\rustlib\src\rust\library\core\src\panicking.rs:42:6

Here's my patch: https://gist.github.com/landaire/d1351ba8cf2f5dd23db0d0c7dc553f77

Panicking at the point of an FFI call I think unfortunately introduces UB:

Let's discuss on Zulip.


Link the client-go documentation

/area documentation
What would you like to be added:
The Falco go client https://github.com/falcosecurity/client-go
now has a documentation page at https://godoc.org/github.com/falcosecurity/client-go/pkg/client
I think that we want to link that in the main website when we document the gRPC feature.
We can wait
Why is this needed:
Because we want the world to use the go client!
Blocked by #77

Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.
If this issue is safe to close now please do so with /close.
Provide feedback via https://github.com/falcosecurity/community.
/lifecycle stale

@fntlnz Please let me know if this issue can be marked as closed because the website https://falco.org/docs/grpc/client-go/ does have the link to https://godoc.org/github.com/falcosecurity/client-go/pkg/client

Stale issues rot after 30d of inactivity.
Mark the issue as fresh with /remove-lifecycle rotten.
Rotten issues close after an additional 30d of inactivity.
If this issue is safe to close now please do so with /close.
Provide feedback via https://github.com/falcosecurity/community.
/lifecycle rotten

Rotten issues close after 30d of inactivity.
Reopen the issue with /reopen.
Mark the issue as fresh with /remove-lifecycle rotten.
Provide feedback via https://github.com/falcosecurity/community.
/close

Rotten issues close after 30d of inactivity.
Reopen the issue with /reopen.
Mark the issue as fresh with /remove-lifecycle rotten.
Provide feedback via https://github.com/falcosecurity/community.
/close

@poiana: Closing this issue.

In response to this:

Rotten issues close after 30d of inactivity.
Reopen the issue with /reopen.
Mark the issue as fresh with /remove-lifecycle rotten.
Provide feedback via https://github.com/falcosecurity/community.
/close

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@poiana: Closing this issue.

In response to this:

Rotten issues close after 30d of inactivity.
Reopen the issue with /reopen.
Mark the issue as fresh with /remove-lifecycle rotten.
Provide feedback via https://github.com/falcosecurity/community.
/close

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.


Restores astro-compress

AstroCompress has been restored. This fixes it.

Thank you. We fixed that.


Add a section explaining how to use nearby feature in the tutorial

Summary:
It is quite confusing to use the nearby feature and it would be very helpful for new users if the tutorial explained this as well.
Would you like to work on the issue?
Yes
With some guidance :)
Please let us know whether you want to fix the issue by yourself. If not, anyone can get the issue assigned to them.

I agree that we would need documentation about Nearby.
However, I don't think the tutorial is the best place. The tutorial is for ultra-important policy explanation (copyright, and what kind of pictures are expected). The tutorial is not meant to explain anything technical (features, buttons, UI) as it would make it too long. The tutorial is to prevent behaviors that would get us into big trouble.
How about a walk-through at https://github.com/commons-app/commons-app-documentation/blob/master/android/How-to-install-and-use-the-app.md ?

Yes, making the tutorial too long won't really help.
A documentation sounds good!
We could add a link to the documentation in the tutorial if the users want to know more about Nearby.

Of course, please feel free to add a new section at https://github.com/commons-app/commons-app-documentation/blob/master/android/How-to-install-and-use-the-app.md I believe you have edit rights, please let us know if not.
I agree that a "User guide" link in the hamburger menu could be a good idea. Please note that it would be an "enhancement" rather than a "bug", though, which has an impact on who can implement it per https://github.com/commons-app/commons-app-documentation/blob/master/android/Volunteers-welcome!.md#developers
Cheers!

Ah, sorry, my link was wrong, the documentation is now here: https://commons-app.github.io/docs.html


Skip tests when doing a manual full sync

Motivation
We're running tests when we do a manual full sync.
Review
This PR isn't urgent.
Reviewer Checklist

[ ] Code implements Specs and Designs
[ ] Tests for Expected Behaviour
[ ] Tests for Errors

@mergifyio update


Update README.md

Add the content of .dir-locals.el to make it easier for non-lisp/elisp programmer.
Also recommend using Bear to generate the compile_commands.json file

Pull Request Test Coverage Report for Build 298

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-12.7%) to 55.835%

Totals

Change from base Build 296:
-12.7%

Covered Lines:
311

Relevant Lines:
557

💛  - Coveralls

Pull Request Test Coverage Report for Build 298

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-12.7%) to 55.835%

Totals

Change from base Build 296:
-12.7%

Covered Lines:
311

Relevant Lines:
557

💛  - Coveralls


Update free-courses-en.md

What does this PR do?
Add Resources - Video links for various courses.
For resources
Resources for learning C, C++, C#, Data Structures, and Algorithms
Why is this valuable (or not)
These tutorials are extremely useful for beginners to learn programming languages.
How do we know it's really free?
All the links I provided are from the YouTube channel, freeCodeCamp.org, which provides hours of free lectures that are useful for beginners in programming.
For book lists, is it a book?
No, they are video links.
Checklist:

[x] Not a duplicate
[ ] Included author(s) if appropriate
[x] Lists are in alphabetical order
[ ] Needed indications added (PDF, access notes, under construction)

for youtube, we'll link to playlists as courses, but not individual videos, in general

OK, linter satisfied! Could you add the  (FreeCodeCamp) notations. These help the readers figure out where the video is coming from. You can also add the lecturer name where appropriate.

instead of [freeCodeCamp](https://www.freecodecamp.org), just use (freeCodeCamp)

Thanks, and welcome to free-programming-books!


Remove prediscovery unit since systemd dependency failures may not be

restarted.

"Restart=on-failure only applies to process failures (does not apply to failure due to dependency failures)", and "If there's even a small chance that a dependency might fail on start and you care about resiliency, don't use Before/After and instead perform a check on some artifact that the dependency produces" - https://unix.stackexchange.com/a/216254

CI runs three through five passed the Cloud stage. Run four also passed e2e.


List of courses not available - "profile is private"

I think the guys at datacamp must have updated their website, as I am now getting an error while listing courses:
First I set up my token, which works fine. Output is:
INFO: Hi, Jorrit
INFO: Active subscription found

However, then when attempting to read courses the selenium window shows a "profile is private" before closing and Python crashes (stack below).
D:\dev\python\datacamp_downloader_31\.venv\Scripts>datacamp courses
+--------+------------------------------------------+------------+------------+------------+
| ID     | Title                                    | Datasets   | Exercises  | Videos     |
+--------+------------------------------------------+------------+------------+------------+
Please wait |Traceback (most recent call last):
  File "C:\Program Files\Python38\lib\runpy.py", line 194, in _run_module_as_main
Please wait /    return _run_code(code, main_globals, None,
  File "C:\Program Files\Python38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "D:\dev\python\datacamp_downloader_31\.venv\Scripts\datacamp.exe\__main__.py", line 7, in <module>
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\typer\main.py", line 214, in __call__
    return get_command(self)(*args, **kwargs)
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\typer\main.py", line 497, in wrapper
    return callback(**use_params)  # type: ignore
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\datacamp_downloader\downloader.py", line 67, in courses
    datacamp.list_completed_courses(refresh)
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\datacamp_downloader\datacamp_utils.py", line 44, in wrapper
    return f(*args, **kwargs)
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\datacamp_downloader\helper.py", line 72, in wrapper
    output = f(*args)
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\datacamp_downloader\datacamp_utils.py", line 181, in list_completed_courses
    for i, course in enumerate(self.get_completed_courses(refresh), 1):
  File "d:\dev\python\datacamp_downloader_31\.venv\lib\site-packages\datacamp_downloader\datacamp_utils.py", line 410, in get_completed_courses
    completed_courses = data["props"]["pageProps"]["completed_courses"]
KeyError: 'completed_courses'

Thank you for reporting this. I've just created PR #47 to fix the issue. Would you mind checking if the PR really fixes the problem reported?

Hey, sorry for the delay,
I see you have already merged the fix. Just wanted to add that I tested it and it works without any bugs now.


Why is the shard of the register_lock index single-sliced

Please answer these questions before submitting your issue.

Why do you submit this issue?
[x] Question or discussion
[ ] Bug
[ ] Requirement
[ ] Feature or performance improvement

Question

What do you want to know?
Why is the shard of the register_lock index single-sliced.

Bug

Which version of SkyWalking, OS and JRE?

Which company or project?

What happen?
If possible, provide a way for reproducing the error. e.g. demo application, component version.
Es a node down register_lock is not available

Requirement or improvement

Please describe about your requirements or improvement suggestions.

We are using it as an unique seq creator. Not for metadata storage. Distributed lock is bad for performance.

The availability of skywalking will be reduced because of this. Is it necessary to solve this problem in 6.4.0 milestone?
Whether the es consistency feature can be satisfied。
Zk or redis to implement distributed lock instead

We are using it as an unique seq creator. Not for metadata storage. Distributed lock is bad for performance.

@wu-sheng The availability of skywalking will be reduced because of this. Is it necessary to solve this problem in 6.4.0 milestone?
Whether the es consistency feature can be satisfied。
Zk or redis to implement distributed lock instead

No plan to do this, yet. Zk is low performance too.

You could do anything you want. We haven't plan to do that. Adding another component is not good for end user. It is not that necessary.

You could do anything you want. We haven't plan to do that. Adding another component is not good for end user. It is not that necessary.

tks


ASH - Another Simple HUD

Mod name
ASH - Another Simple HUD
Curseforge link
https://www.curseforge.com/minecraft/mc-mods/ash-another-simple-hud
Other links
https://modrinth.com/mod/ash
https://github.com/umollu/ash
What it does
Adds a FPS count, coordinate and compass HUD. (These are configurable, and defaults can probably be set.)
Personally, I think just including the coordinate is best. It adds Bedrock parity and is very "vanilla-like".
Why should it be in the modpack
Adds coordinates to the HUD without having to press F3 and pick out the coordinates from a cluttered interface.
Why shouldn't it be in the modpack
Coordinate text is displayed without a background, meaning that in completely white settings it may be hard to read.
Categories
New feature, Works like Optifine/Bedrock Edition/Forge/etc
Additional details
No response

Already available in Sodium Extra, see the video settings.

Yes - just realized and was about to self-close


Need the ability to restrict total file size when uploading multiple attachments

If you select more than one file I would like another prop called maxTotalSize that will reject files if it you are uploading multiple and the size exceed the maxTotalSize

This is your responsibility to implement in the onDrop callback. I'll also remove size validation from the upcoming major release so please be aware then upgrading.

Thanks - that makes sense.   I ended up doing it on my own and also removing our use of maxSize


persist-cache fails to cache calls that return bytes, bytearray and memoryview

bytes, bytearray and memoryview are being treated as absolutely directly msgpackable when, in fact, the msgspec decoder is not given bytes, bytearray and memoryview type hints and so is incapable of deserialising them. The decoder is not given such type hints because we already type hint strs and doing so prevents the other types from being decoded to, as described in this issue on the msgspec GitHub project.

Fixed by f763ce7040c8048112dc93b59991bbcf943cc33a, available in v0.1.1.


Migrate existing unit tests to pytest and add basic unit tests for inventory plugin

What this PR does / why we need it:

Cleanup the existing unit tests and move them to pytest. By using pytest
it becomes easier to add new tests for existing functionality in the
collection.
Reorganize unit tests so the directory structure looks like the
structure used in most other collections.
Add a test file for the inventory plugin with some basic unit tests.
This file can be used to add more tests in the future.

Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #
Special notes for your reviewer:
Merge after #78
Release note:

None

Thanks @0xFelix! Nice job!
/lgtm

/lgtm

/approve


SampleData is filtered from service list

UPDATE: We should filter out the SampleData service from the DatabaseService list on the UI

@harshach @vivekratnavel would it make sense to just remove the SampleData from the DB services list?

As discussed, we'll filter this out from frontend side.

@darth-coder00 Let's not remove or filter sample data, but hide the test connection button for Sample Data.


Documentation on Arrays?

Arrays are not documented for 1.16 and the instructions from the 1.12 documentation (specifically adding a new element to an array) don't seem to work in 1.16. I think arrays are very important so I would really appreciate them being documented. Thanks in advance!

Can you check if the description in here is missing something for you?
https://github.com/CraftTweaker/CraftTweaker-Documentation/pull/485/files?short_path=9bb461a#diff-9bb461a400250ee7df9581c8b0a902e0d4f1497e82f48a532cec5dfb2eb85337

Sorry for bothering you, but I tried to follow the new documentation on arrays and lists and anything containing "= new" seems to be counted as invalid. Any ideas? Thanks.

What exactly did you try (i.e. what is your script and error meassages)?
The calls in the Creating a List or an Array are stubs, the names in capital letters need to be filled in with the proper types, e.g. string.

Context: I want to add the cooking recipes from Farmer's Delight to Create's mixer. The "ingredients" property of the recipes from getAllRecipes() is a List of the type IIngredient and the mixer needs an array of IIngredientWithAmount. My idea was to make a new List, fill it with the ingredients.asIIngredientWithAmount() and convert it to an array. Here's the code for that:
`
for recipe in recipeType:farmersdelight:cooking.getAllRecipes()
{
val ingr = new List();
for ingredient in recipe.ingredients
{
ingr.add(ingredient.asIIngredientWithAmount());
}
val ingredients = ingr as IIngredientWithAmount[];
<recipetype:create:mixing>.addRecipe(recipe.id, "heated", recipe.output, ingredients, [<fluid:minecraft:water>* 1000], 100);

}
`
The highlighter underlines List, saying it instead #expected [DOT], [IDENTIFIER], [DOT2] etc. The error message for that line is just "No compatible methods found".

Did you import IIngredientWithAmount and List?

Is this the correct way to import them?
import crafttweaker.api.item.IIngredientWithAmount;
import stdlib.List;

The highlighter underlines "List", saying it instead expected [DOT], [IDENTIFIER], [DOT2] etc. The error message for that line is just "No compatible methods found".

Just to confirm @EliteKlopapier are you actually running the game?
We don't have a highlighter that does syntax checking, and the only syntax checker plugin that exists only works for 1.12 syntax (afaik).
The following script works for me:
import crafttweaker.api.item.IIngredientWithAmount;
import stdlib.List;

for recipe in furnace.getAllRecipes()
{
	val ingr = new List<IIngredientWithAmount>();
	for ingredient in recipe.ingredients
	{
		ingr.add(ingredient.asIIngredientWithAmount());
	}
	val ingredients = ingr as IIngredientWithAmount[];

}

Just a note with your script though, you have:
<recipeType:farmersdelight:cooking>

which is invalid. It should be:
<recipetype:farmersdelight:cooking>

with a lowercase T in recipetype


Attempt to automate release

I started working on the process to automate package distribution releases (following this) but... I'm new to this so any feedback would be much appreciated.

I recommend copying what we do in xgcm:
https://github.com/xgcm/xgcm/blob/master/.github/workflows/pythonpublish.yaml

@rabernat I copied the xgcm yaml file. Does this now mean that if I merge this and release a new version, it will automatically be pushed to pypi?

Let's merge this and see if it works!


how to get the real theme currently?

in flet, I set page.theme_mode = 'system'.   But I need to get the real theme currently to switch the two img bellow in my code. How to do that?

Use page.platform_brightness

thank you


use Offline CRV settings for the extracted position

This PR removes the overrides done in Production/JobConfig/digitize/Extracted.fcl for the CRV settings in the extracted position, e.g. CRV lookup tables, light yields, etc. It replaces it by including the Offline settings for the extracted position. This is done in the same way as in Production/JobConfig/reco/Extracted.fcl

Hi @ehrlich-uva,
You have proposed changes to files in these packages:

JobConfig

which require these tests: build.
@Mu2e/fnalbuild-users, @Mu2e/write have access to CI actions on main.
:hourglass: The following tests have been triggered for 562b333012e78d8ad7a6bc611981bac8f6858d1f: build  (Build queue is empty)
About FNALbuild. Code review on Mu2e/Offline.

:sunny: The build tests passed at 562b333012e78d8ad7a6bc611981bac8f6858d1f.

Test
Result
Details

test with
:white_check_mark:
Command did not list any other PRs to include

merge
:white_check_mark:
Merged 562b333012e78d8ad7a6bc611981bac8f6858d1f at 28f21e30d34ba55f3a712f49763840f9b9fc3269

build (prof)
:white_check_mark:
Log file. Build time: 11 min 22 sec

ceSimReco
:white_check_mark:
Log file.

g4test_03MT
:white_check_mark:
Log file.

transportOnly
:white_check_mark:
Log file.

POT
:white_check_mark:
Log file.

g4study
:white_check_mark:
Log file.

cosmicSimReco
:white_check_mark:
Log file.

cosmicOffSpill
:white_check_mark:
Log file.

ceSteps
:white_check_mark:
Log file.

ceDigi
:white_check_mark:
Log file.

muDauSteps
:white_check_mark:
Log file.

ceMix
:white_check_mark:
Log file.

rootOverlaps
:white_check_mark:
Log file.

g4surfaceCheck
:white_check_mark:
Log file.

FIXME, TODO
:white_check_mark:
TODO (0) FIXME (0) in 0 files

clang-tidy
:white_check_mark:
0 errors 0 warnings

N.B. These results were obtained from a build of this Pull Request at 562b333012e78d8ad7a6bc611981bac8f6858d1f after being merged into the base branch at 28f21e30d34ba55f3a712f49763840f9b9fc3269.
For more information, please check the job page here.
Build artifacts are deleted after 5 days. If this is not desired, select Keep this build forever on the job page.


Failed to parse source map from warnings

Thanks for building and maintaining this library.
I'm getting source map warnings when running react-scripts start (CRA).
react version: 18.2.0
react-qr-scanner version: 1.1.4
Failed to parse source map from<EMAIL_ADDRESS>file: Error: ENOENT: no such file or directory, open<EMAIL_ADDRESS>
Failed to parse source map from<EMAIL_ADDRESS>file: Error: ENOENT: no such file or directory, open<EMAIL_ADDRESS>
Failed to parse source map from<EMAIL_ADDRESS>file: Error: ENOENT: no such file or directory, open<EMAIL_ADDRESS>
...

Are you able to see this folder structure in your node_modules?

If the warning persists, please update to 1.1.5 and let me know.

@yudielcurbelo Thanks for your quick reply.
I have updated to 1.1.5, but I am still experiencing this problem.
I have found that the warning mentions:
<EMAIL_ADDRESS>On my disk I can find:
<EMAIL_ADDRESS>and
<EMAIL_ADDRESS>

What version of node are you using, could you delete the node_modules folder and reinstall all dependencies?

I am running v19.8.1 on macOS, encountered the same problem using docker image node:18.12.1-alpine.
I tried deleting node_modules and reinstalling, without success.
I have created a repo to help you reproduce the issue:
https://github.com/floriscornel/example-qr
Running commands:
npm install and npm start, for me, results in:
...
WARNING in<EMAIL_ADDRESS>Module Warning (from ./node_modules/source-map-loader/dist/cjs.js):
Failed to parse source map from<EMAIL_ADDRESS>file: Error: ENOENT: no such file or directory, open<EMAIL_ADDRESS>
WARNING in<EMAIL_ADDRESS>Module Warning (from ./node_modules/source-map-loader/dist/cjs.js):
Failed to parse source map from<EMAIL_ADDRESS>file: Error: ENOENT: no such file or directory, open<EMAIL_ADDRESS>
webpack compiled with 14 warnings
Files successfully emitted, waiting for typecheck results...
Issues checking in progress...
No issues found.

This is something specific to CRA #https://github.com/mswjs/msw/issues/1030#issue-1081147782
I do not distribute the src file in the library, but doing so should fix the issue. I will give it a try.

@yudielcurbelo Thank you.
I have confirmed that the warnings are no longer present after updating to version 1.1.6.

I updated react-qr-scanner from 1.1.9 to 1.2.10 and the warnings reappeared. Going back to version 1.1.9 "solves" the problem.

There is a new beta 2.0.0-beta.8 with a lot of changes. If the issue is not fixed here, I can add the src folder to the build output.

I'm getting this error in the latest version 2.0.8. Is there any solution for that?


Add linter, fix some things

Oh, i would also fix linter's version in CI too.

Can we fix that?

Yep.

Oh, i would also fix linter's version in CI too.

I think most of our projects use the latest.

dev wakes up and now he has to fix additional issues

We've seen that in NeoGo, usually it's solved separately, but at least we automatically follow the latest and greatest in linting.


added log messages to tensorflow plugin

I've added log messages to help debugging the tensorflow plugin.
I've marked TensorflowOp with INTERNAL_ENTITY to hide it from the documentation.

+1


Use jupyterlab-myst

https://github.com/executablebooks/jupyterlab-myst
This allows to use MyST inside a Jupyter notebook.
This would allow to get rid of replace_admonition in https://github.com/INRIA/scikit-learn-mooc/blob/main/build_tools/convert-python-script-to-notebook.py to turn MyST admonitions into HTML

Somewhat related to this issue (though not sure jupyter-mist would solve it): the generated notebooks changed behavior of rendered admonitions.
FUN session 3:

FUN session 4:

I have regenerated the notebooks which should fix the issue.
New notebook: https://github.com/INRIA/scikit-learn-mooc/blob/main/notebooks/linear_regression_non_linear_link.ipynb
This was done in https://github.com/INRIA/scikit-learn-mooc/pull/743 jupytext does not have the logic to fix admonitions ... you need to run the full script

make notebooks should work when run from scratch. But if a given notebook was updated more recently by jupytext, then make might see that it's already up to date (based on the .ipynb last write access date) and then mistakenly things it can be skipped.


update test schema version, fix periodic jobs

Signed-off-by: anandrkskd<EMAIL_ADDRESS>What type of PR is this:
/kind tests
What does this PR do / why we need it:
This PR updates/fixes value of devfile schema version for test.
Updating test case in according to https://github.com/devfile/registry/blob/main/stacks/go/devfile.yaml
Which issue(s) this PR fixes:
Fixes #
PR acceptance criteria:

[ ] Unit test

[ ] Integration test

[ ] Documentation

How to test changes / Special notes to the reviewer:

/close
#5739 fixes the issue


add trades to get coral

 yarden.zamir on Discord says

useful for seapickles and for fertilizer

 Generic name on Discord says

i think somewhere in the fisher line make ssense

 yarden.zamir on Discord says

agreed yea. we can add it to the lootavles of the fishing barrels

 autistic.sack.of.friends on Discord says

should we let the player convert between the coral types with dyes? it's kinda an entirely cosmetic thing