Fixed a reading bug for binary STL file

Removed a premature return that prevented to read binary stl file that contained an empty header.

Coverage remained the same at 100.0% when pulling 55c6b227de5ac3af54e8d5741f7f7ca61f2c1439 on Gjacquenot:develop into a0ba9619b002878b06845b87001b2e2ab0714137 on WoLpH:develop.

Hi @WoLpH , I propose here a pull request to mainly fix the bug #22 . Now, stl binary file with empty header can be loaded.

The fixes are located in file stl.py
These fixes broke test test_incomplete_ascii_file in file stl_corruption.py
With the modifications performed, I had to add a pragma instruction in stl.py
I have added additional tests with a new stl binary file with an empty header

Excellent fixes, very clever as well :)
Thank you very much, merged and I'll push out a new release within a few days :)


Get the .NET Core version number at runtime

Is there a reliable way to get the .NET Core version number at runtime that works on Nano Server and Ubuntu Docker containers as well, please?
I've seen some hacks deriving it from folder structure that breaks when the app is deployed onto Nano Server and Ubuntu Docker container images.

Issue moved to dotnet/corefx #28132 via ZenHub


Add binary literals to parser

Added binary literals to grammar and code. Did it best to my knowledge however I probably got things wrong at places. Thank you in advance for reviewing :)
Will solve #185 .

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: picimaci sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.

Hi, thanks for the PR, I'm looking forward to reviewing it!  Looks like the unit tests failed in a way that's unrelated to your change, so I restarted them.  It's a busy time right now, so thanks for your patience w/review.

The ANTLR looks perfectly proficient, though I wonder about the definition of the BINARY token.  As defined, it overlaps with STRING and consequently it looks to me like it might either never be matched, or might break some valid string constants.  I'd like to see some unit tests in LoaderTest that exercise the whole loader:
// these would each be separate test cases
const string STRING_WITH_BINARY_LITERAL = "0xDEADBEEF" // should load

const binary VALID_BINARY = "0xDEADBEEF" // should load

const binary INVALID_BINARY = "blablabla" // should not load

I might be wrong here.  If what I suspect is true, the solution will be to drop the changes to the ANTLR grammar, and simply use a STRING token; we'd have to validate its format by hand, in the BinaryValidator.

Codecov Report

Merging #256 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff            @@
##             master    #256   +/-   ##
========================================
  Coverage      76.5%   76.5%
  Complexity      378     378
========================================
  Files            29      29
  Lines          1656    1656
  Branches        148     148
========================================
  Hits           1267    1267
  Misses          292     292
  Partials         97      97

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 78f0a79...8827df2. Read the comment docs.

Or by the next couple of days, sorry for the delay.

Hey, don't feel pressured - there's no rush.  Take your time!

Hey! Any feedback? :)

Sorry, got busy with travel over the past few weeks, and haven't had the time yet to look at the update.  I'll take a look now.

Hi there - this PR is nearly ready to land.  Do you still have interest in finishing it?

Hello again.  Any interest in finishing this?  I'll close it out if not.


Compile error with clang for target arm-linux-musleabi

Build fails with compile error error: unknown type name 'u_int16_t'; did you mean 'uint16_t'? at
https://github.com/project-chip/connectedhomeip/blob/d24eff1b14c212bdff9c98aa14255753082543ba/src/app/clusters/color-control-server/color-control-server.cpp#L534

I don't see this issue any more.


the training is stuck at.... any idea on this issue

^@2017-06-19 10:47:40: The model has 27 trainable variables:
                             Variable name                                         Shape           Size

sentence_encoder/input_projection/word_embeddings:0                             [8004, 300]            2401200
sentence_encoder/bidirectional_rnn/fw/OrthoGRUCell/gates/weights:0              [600, 600]              360000
sentence_encoder/bidirectional_rnn/fw/OrthoGRUCell/gates/biases:0               [600]                      600
sentence_encoder/bidirectional_rnn/fw/OrthoGRUCell/candidate/weights:0          [600, 300]              180000
sentence_encoder/bidirectional_rnn/fw/OrthoGRUCell/candidate/biases:0           [300]                      300
sentence_encoder/bidirectional_rnn/bw/OrthoGRUCell/gates/weights:0              [600, 600]              360000
sentence_encoder/bidirectional_rnn/bw/OrthoGRUCell/gates/biases:0               [600]                      600
sentence_encoder/bidirectional_rnn/bw/OrthoGRUCell/candidate/weights:0          [600, 300]              180000
sentence_encoder/bidirectional_rnn/bw/OrthoGRUCell/candidate/biases:0           [300]                      300
decoder/initial_state/encoders_projection/weights:0                             [600, 256]              153600
decoder/initial_state/encoders_projection/biases:0                              [256]                      256
decoder/word_embeddings:0                                                       [8004, 300]            2401200
decoder/state_to_word_W:0                                                       [256, 8004]            2049024
decoder/state_to_word_b:0                                                       [8004]                    8004
decoder/attention_sentence_encoder/AttnW:0                                      [1, 1, 600, 600]        360000
decoder/attention_sentence_encoder/AttnV:0                                      [600]                      600
decoder/attention_sentence_encoder/AttnV_b:0                                    []                           1
decoder/attention_decoder/LinearProjection/LinearProjection/weights:0           [900, 300]              270000
decoder/attention_decoder/LinearProjection/LinearProjection/biases:0            [300]                      300
decoder/attention_decoder/OrthoGRUCell/gates/weights:0                          [556, 512]              284672
decoder/attention_decoder/OrthoGRUCell/gates/biases:0                           [512]                      512
decoder/attention_decoder/OrthoGRUCell/candidate/weights:0                      [556, 256]              142336
decoder/attention_decoder/OrthoGRUCell/candidate/biases:0                       [256]                      256
decoder/attention_decoder/attention_sentence_encoder/Attention/weights:0        [256, 600]              153600
decoder/attention_decoder/attention_sentence_encoder/Attention/biases:0         [600]                      600
decoder/attention_decoder/AttnOutputProjection/AttnOutputProjection/weights:0   [856, 256]              219136
decoder/attention_decoder/AttnOutputProjection/AttnOutputProjection/biases:0    [256]                      256
2017-06-19 10:47:40: Total number of all parameters: 9527353
2017-06-19 10:47:43: Initializing TensorBoard summary writer.
2017-06-19 10:47:47: TensorBoard writer initialized.
2017-06-19 10:47:47: Starting training
2017-06-19 10:47:47: Epoch 1 starts
.........
2017-06-19 11:01:14: Epoch 1/11  Instances 197010  series_named_greedy/runtime_xent: 0.06825    series_named_greedy/BLEU-4: 0.7618    series_named_greedy/train_xent: 0.04826    series_named_greedy/TER: 1.133
the GPU is running, a lot of GPU memory & CPU memory also available..

My guess is the training reached the first validation and your validation data are just too big.

Another issue could be if you are using "report_gpu_memory_consumption=True" in the tf_manager. This option in previous versions of NM was making similar problems.

Actually, I got a 10 millions Question Answer Pairs dataset,
so, I followed the principal that split the the dataset as train/validate/test as ratio to 7/2/1
so, approximately 7 million line QA pairs as training set , 200 millions QA pairs as validation set

The standard ratio split 7/2/1 is obsolete (there was a nice article about that by Andrew Ng, but I cannot find it). In your split, that mean your precision over the validation set will be roughly with a precision of 0.000001%. That's probably not that necessary precision. When we are doing machine translation we use a validation set of 3000 sentence pairs.

The estimated time depends on the hardware you use. You can estimate the time for one batch: take the time between the training logs and divided it by logging_period from the configuration file. In this way, you can estimate the time you are going to need for 2M (I guess 200 was a typo) validation examples. It will be probably hours.

yes, you are right @jlibovicky
It keep moving after several hours

@tomkocmi  I will try your proposal, thanks!


Add GitHub Actions

Just to make sure we know when things break.

The test are a bit expensive:

@juliosantos unless this is too much for our budget. I could add some caches, but the default GHAs aren't playing along nicely with Yarn. I don't want to invest into that unless this gets in.
Let me know what you feel like doing.

Thanks for the initiative, but I don't think there's much of a point getting this in until (if ever) automatic deployment is part of this flow. Open to discussing though.


compatible with nonwheel users?

From the polkit rule it looks like this only allows wheel users to execute the update service.
If this upstream Fedora PR is merged allowing nonwheel users to update, this service would not work.
Is there a problem with allowing nonwheel users to execute this service?

simply following upstream, if/when rpm-ostree doesn't require wheel group to update we'll likely follow suit


block fetcher: FetchReceipts retries if result is nil

a nil receipt results in an UNKNOWN trx status which causes all kinds of issues, notably an error in the graph-node.
this fix adds a retry when fetching transactions receipts and returns an error if the retries run out.

The changes do not implemented the retry if result is nil.. :/

updated


Compute 2021 03 release

Copied from : https://github.com/Azure/azure-rest-api-specs/pull/14121
This PR is to release the new version of Compute, 2021-03-01.
This release consists of these PR, all of which have been reviewed before:
Deep Deletion: #13657
Scheduled Events: #13351
PatchSetting Assessment mode: #13468
Network Interface Config :#13449 (Required and received ARM signoff)
Patchsetting Description : #13509
RestorePoint: #13219 (Required and received ARM signoff)
UserData: #13220
#14191
#14197
MSFT employees can try out our new experience at OpenAPI Hub  - one location for using our validation tools and finding your workflow.

Changelog
Please ensure to add changelog with this PR by answering the following questions.

What's the purpose of the update?

[ ] new service onboarding
[x] new API version
[ ] update existing version for new feature
[ ] update existing version to fix swagger quality issue in s360
[ ] Other, please clarify

When you are targeting to deploy new service/feature to public regions? Please provide date, or month to public if date is not available yet.
When you expect to publish swagger? Please provide date, or month to public if date is not available yet.
If it's an update to existing version,  please select SDKs of specific language and CLIs that require refresh after swagger is published.

[x] SDK of .NET (need service team to ensure code readiness)
[x] SDK of Python
[x] SDK of Java
[ ] SDK of Js
[x] SDK of Go
[x] PowerShell
[x] CLI
[x] Terraform
[ ] No, no need to refresh for updates in this PR

Contribution checklist:

[x] I commit to follow the Breaking Change Policy of "no breaking changes"
[x] I have reviewed the documentation for the workflow.
[x] Validation tools were run on swagger spec(s) and errors have all been fixed in this PR. How to fix?

If any further question about AME onboarding or validation tools, please view the FAQ.
ARM API Review Checklist

[x] Ensure to check this box if one of the following scenarios meet updates in the PR, so that label “WaitForARMFeedback” will be added automatically to involve ARM API Review. Failure to comply may result in delays for manifest application. Note this does not apply to data plane APIs, all “removals” and “adding a new property” no more require ARM API review.

Adding new API(s)
Adding a new API version
[x] Ensure to copy the existing version into new directory structure for first commit (including refactoring) and then push new changes including version updates in separate commits. This is required to review the changes efficiently.
Adding a new service

[x] Please ensure you've reviewed following guidelines including ARM resource provider contract and REST guidelines. Estimated time (4 hours). This is required before you can request review from ARM API Review board.

[ ] If you are blocked on ARM review and want to get the PR merged with urgency, please get the ARM oncall for reviews (RP Manifest Approvers team under Azure Resource Manager service) from IcM and reach out to them.

Breaking Change Review Checklist
If there are following updates in the PR, ensure to request an approval from Breaking Change Review Board as defined in the Breaking Change Policy.

[ ] Removing API(s) in stable version
[ ] Removing properties in stable version
[ ] Removing API version(s) in stable version
[ ] Updating API in stable or public preview version with Breaking Change Validation errors
[ ] Updating API(s) in public preview over 1 year (refer to Retirement of Previews)

Action: to initiate an evaluation of the breaking change, create a new intake using the template for breaking changes. Addition details on the process and office hours are on the Breaking change Wiki.
Please follow the link to find more details on PR review process.

Please complete the Contribution Checklist.

@mentat9 , I have completed the contribution checklist.
The PR check errors are all expected as per the explanations in the comments here, https://github.com/Azure/azure-rest-api-specs/pull/14121 , and in the email thread Chirag added you to.
There is one breaking change, enum constraint weakening, as we are adding another value to the InstanceViewTypes enum. This was approved by the Breaking Change Review board as seen in , https://github.com/Azure/azure-rest-api-specs/pull/13220 , and was confirmed by the SDK teams that this won't be a problem.

The breaking changes in go SDK are expected.

This is ready to be merged.

/azp run


TSML-UI stopped working overnight

We've been using TSML-UI with no issues for a while at http://gayaainthedesert.org/meetinglist
Sometime overnight or early this morning the plug-in stopped working, and is showing the message: "An error was encountered loading the data."
We hadn't done any updates to the site other than some text edits on the home page.
Looking around, I saw a message that our theme was out of date, after updating, no change to the plug-in.
Thankfully the older interface is working at http://gayaainthedesert.org/meetings  so for now I've redirected to that page.
Any help would be greatly appreciated!

hi @toddjsaunders i'm seeing TSML UI having an error fetching your site's JSON. it says:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://secureservercdn.net/<IP_ADDRESS>/e47.9d9.myftpupload.com/wp-content/meetings.json. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.

this sounds like it's a wp configuration issue that possibly was brought forward by the recent TSML update?
could you check your WP Settings page and see what values it has for site address?
i think it sounds like you also have some type of caching plugin installed, right?

Hi Josh,
Both the WordPress Address and the Site Address in settings is:  http://gayaainthedesert.org
I'm unaware if any of our plugins do caching, we do have CDN enabled through GoDaddy.
Here's the list of our plugins:
Anti-Malware Security and Brute-Force Firewall
Code Snippets
Contact Form 7
Contact Form CFDB7
Controlled Admin Access
Custom Plugin for Code
EmbedPress
Fullwidth Page Templates
Go Daddy Quick Setup
Google Apps Login
iframe
Limit Login Attempts Reloaded
Simple Iframe
Superb Helper Pro
TablePress
UpdraftPlus - Backup/Restore
Widget Disable
Wordfence Security
WP Google Maps Get Pro Version
WP Htaccess Editor
WP Mail SMTP
WP Table Builder
WPForms Lite
Thanks!
Todd

hmm, thanks todd! so in the recent TSML update we are now getting your data url with content_url('meetings.json')
this is producing https://secureservercdn.net/<IP_ADDRESS>/e47.9d9.myftpupload.com/wp-content/meetings.json when we would prefer to get http://gayaainthedesert.org/wp-content/meetings.json -- i think this probably due to the GoDaddy caching rather than one of these plugins.
i think what we want to do here is to transfer this ticket over to TSML, but we also want to get you up and running.
on your meeting list page, can you take out the [tsml_ui] shortcode and instead add in this code? usually switching to the code editor helps with this.


Example: jwks_fetcher: Cannot find field

Trying to test using Authservice with google oidc and running into issues.  The example deployment of authservice in https://github.com/istio-ecosystem/authservice/tree/master/bookinfo-example/authservice was recently changed to use jwks_fetcher via https://github.com/istio-ecosystem/authservice/pull/191
When deploying:
❯ pwd
/Users/tom/go/src/github.com/runyontr/platform-one/big-bang/scratch/authservice/bookinfo-example/authservice

❯ helm install  --namespace authservice authservice .
NAME: authservice
LAST DEPLOYED: Mon Nov 29 10:47:15 2021
NAMESPACE: authservice
STATUS: deployed
REVISION: 1
TEST SUITE: None

❯ k get pods -n authservice
NAME                          READY   STATUS             RESTARTS   AGE
authservice-7797fd6bf-mbl7x   1/2     CrashLoopBackOff   4          2m56s

❯ kl -n authservice authservice-7797fd6bf-mbl7x
[2021-11-29 15:49:31.568] [console] [error] main: Unexpected error: (chains[0].filters[0].oidc) jwks_fetcher: Cannot find field.

❯ k get cm -n authservice authservice -o yaml | k neat
apiVersion: v1
data:
  config.json: |
    {
      "listen_address": "<IP_ADDRESS>",
      "listen_port": "10003",
      "log_level": "trace",
      "threads": 8,
      "chains": [
        {
          "name": "idp_filter_chain",
          "filters": [
          {
            "oidc":
              {
                "authorization_uri": "https://accounts.google.com/o/oauth2/v2/auth",
                "token_uri": "https://oauth2.googleapis.com/token ",
                "callback_uri": "https://localhost:8443/productpage/oauth/callback",
                "jwks_fetcher": {
                  "jwks_uri": "https://www.googleapis.com/oauth2/v3/certs",
                  "periodic_fetch_interval_sec": 10
                },
                "client_id": "redacted.apps.googleusercontent.com",
                "client_secret": "Qredacted",
                "scopes": [],
                "cookie_name_prefix": "productpage",
                "id_token": {
                  "preamble": "Bearer",
                  "header": "Authorization"
                },
                "logout": {
                  "path": "/authservice_logout",
                  "redirect_uri": "https://localhost:8443/some/logout/path"
                }
              }
            }
          ]
        }
      ]
    }
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: authservice
    meta.helm.sh/release-namespace: authservice
  labels:
    app.kubernetes.io/managed-by: Helm
  name: authservice
  namespace: authservice

If you are using the default helm values, the 0.4.1 image does not contain the feature. Can you try to use helm --set authservice.image=ghcr.io/istio-ecosystem/authservice/authservice:dev?
We are working on a new release, by then this can be updated. #197

Thank you @incfly , the unreleased version of authservice worked as you suggested.


Add favicon support, configuring and processing methods

This addition introduces favicon support, including the configuration and processing methods. A DTO for favicons was added along with config definition. Moreover, the relevant processing logic was also implemented in both GDImageProcessor and ImagickImageProcessor. Other affected components have been adjusted accordingly to accommodate these changes.
Target branch: 1.2.x
Resolves issue #66

[ ] It is a Bug fix
[x] It is a New feature
[ ] Breaks BC
[ ] Includes Deprecations

Final icons should contain a hash in their path.

Sweet!  This is a nice bonus.
So many awesome new features, do you plan on updating pwa-demo?  It'd be
great to see these in action.
On Thu, Apr 25, 2024, 2:12 PM Florent Morselli @.***>
wrote:

Final icons should contain a hash in their path.
—
Reply to this email directly, view it on GitHub
https://github.com/Spomky-Labs/pwa-bundle/pull/187#issuecomment-2077876827,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAEXIQIHSJQIJIP5RMVAUQTY7FBRZAVCNFSM6AAAAABGZLWO5WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANZXHA3TMOBSG4
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>


Sepcification for enabling custom resource classes in quotas.

I don't have a great understanding of the quota system, but this seems reasonable to me.


Pass full "Source" object to "setBrealpointsRequest"

In order to support breakpoints in inlined source maps, it is necessary that the "Source" object passed to the "setBrealpointsRequest" contains the same attributes that are returned from the "stackTraceRequest" (Setting breakpoints in inlined source maps is similar to setting breakpoints in internal modules). Currently only the "name" attribute is passed, but not the "sourceReference" attribute. Without the "sourceReference" attribute it is difficult for the backend to identify the correct inlined source.
I suggest that you pass the source object returned from stackTraceRequest unmodified to setBrealpointsRequest. Ideally even with attributes that are not specified in the debug protocol spec.

The issue here is that the setBreakpointsRequest and the stackTraceRequest are 'disconnected'. I am sometimes sending the setBreakpointsRequest even though there has not been any stack traces yet.
Though what I can do, and what I will implement is that before sending the setBreakpointsRequest, I go through all the stack traces (if there are any) and try to search for the mathcing raw source. I will match only based on name of the raw source - since that is the only thing i can do.
If I find I would send the complete data, otherwise I would contine sending what I send now. So this would work only if the user is in a stopped state and is adding a breakpoint - but if I understand correctly that is exactly the case that you want to cover here.

@isidorn thanks for this fix. The sourceReference is now returned correctly. However, the "path" attribute is bogus. If the following source object is returned in stackTraceRequest:
{     "name": "classes.ts",     "path": null,     "sourceReferences": 1013 }
this source object is passed to setBreakPointsRequest:
{     "name": "classes.ts",     "path": "/classes.ts",     "sourceReferences": 1013 }
The attribute "path" should be null.


Wrong numbers in Safari 14

Hello!
We just found a bug that only seems to happen in Safari (I'm on Safari 14 and macOS Big Sur).
When the font size is changed using Cmd - or Cmd +, the number value gets displaced showing an offset, also the bar is not properly adjusted.
Here's a video I made showing this in action, check out the black circle that should go from 0 to 100, it goes to negative numbers when the font is decreased:
https://user-images.githubusercontent.com/2629/125773303-5a31330d-369b-4454-9810-6cd0b9f8169c.mp4
This is not happening in Chrome, Firefox or Opera. Only in Safari.

I have the same issue. The value decreases if page is zoomed out and it increases in zoomed in.

I'm having the same issue. This bug should be resolved quickly. We are thinking about changing to a different one because of this bug

@kimmobrunfeldt Let me know if you find this solution acceptable. If so I will be happy to make a PR for this :)

This seems like a browser bug so vendor detection is OK for me, I can merge a fix if there's a PR


Skip action should take current phase into account

Description
The logic to handle skip in rules processing does not check if the rule being skipped has the same phase as the one that had the skip action. However, Coraza's own seclang actions documentation says: "The skip action works only within the current processing phase." This needs to be corrected.
Expected result
The skip logic should check if the current rule's phase is the same as the phase of the rule that had the skip action.

Hi @M4tteoP , thanks for the response. With multiphase evaluation, is it not possible for rules from different phases to get executed together?

Sorry, I didn't think you were referring to the Multiphase feature.  I can confirm that Multiphase does indeed have certain limitations concerning flow actions like skip and skipAfter. Back in the day, I wrote down some raw notes about it: https://gist.github.com/M4tteoP/57001a5066f2f76c9f99c6dc3e9bf4af. Specifically, your concerns might be related to this line: MovingIntoAllowedPhase: A variable is anticipated to a phase in which an allow action is triggered. The variable is not evaluated in the inferred phase, NOR in its initial phase (not being anymore its minimal phase). So, the problem should be not much about rules being skipped at an earlier phase (because that rule would still be triggered at the next one), but rather about the individual variables that with Multiphase are meant to be executed just at the earliest possible phase.
Being an experimental feature, there is definitely still work to do both in terms of writing proper documentation around it and diving deeper into its coexistence with flow actions. Any feedback and idea to further improve the Multiphase feature are very welcomed!


More specific DOM types (especially for checkJs)

TypeScript Version:  2.3.3
Code
In a JavaScript file (not TypeScript), with checkJs option enabled.
let elementRoot = document.getElementById('test');

if (elementRoot) {

  /** @type {HTMLElement} */
  let elementFirstChild = elementRoot.children[0];

}

Actual behavior:
It raises the error [js] Type 'Element' is not assignable to type 'HTMLElement'. If switching back to type Element, Intellisense will be wrong and other errors will be raised when I'll use elementFirstChild like a HTML element, for example by setting styles : elementFirstChild.style.color = 'red';.
Expected behavior:
elementFirstChild should be of type HTMLElement instead of Element, because if elementRoot is an HTMLElement, its children will be too.
In TS files, we solve this situation with type casting : elementRoot.children[0] as HTMLElement.
But in JS files with the checkJs option, type casting is not possible as it's not valid JS (even if TS allows it while checking). So we're stuck, and the only (bad) solution is a // @ts-ignore.
It would be better for TS files too. And there may be similar issues with other DOM properties.
I know that some DOM types are already inferred dynamically (like with createElement), is there a specific reason it's not the case here ? If none, I can try to take care of the PR.

Same problem with event.target.

Adding type assertion support is tracked by https://github.com/Microsoft/TypeScript/issues/15618#issuecomment-300632637

Will the issue you mention resolve this case ? Because the relation between the two cases (this one and the one from the other issue) is not obvious to me.

#15618 tracks adding type assertion syntax. so you would write your example as
let elementRoot = /** @type {HTMLDIVElement} */ document.getElementById('test');

Automatically closing this issue for housekeeping purposes. The issue labels indicate that it is unactionable at the moment or has already been addressed.

#15618 is marked as closed as the corresponding PR is merged. But I tried with typescript@next (2.5 at the moment) and it does not work.


Can't seem to initialize data

  data () {
    return {
      me: {
        name: null
      }
    }
  },

  apollo: {
    me: gql`{
        me {
          name
        }
      }`
  }

name remains null after the query. I can access the data but only with $data.$apolloData.data.me.name  which seems like the wrong way.
If I remove the me {} property from data() then I get the following error:
TypeError: Cannot read property 'hasOwnProperty' of undefined
    at _loop (vue-apollo.esm.js?ebd5:3924)
    at VueComponent.launch (vue-apollo.esm.js?ebd5:3938)
    at callHook (vue.runtime.esm.js?ff9b:2917)
    at VueComponent.Vue._init (vue.runtime.esm.js?ff9b:4626)
    at new VueComponent (vue.runtime.esm.js?ff9b:4794)
    at createComponentInstanceForVnode (vue.runtime.esm.js?ff9b:4306)
    at init (vue.runtime.esm.js?ff9b:4127)
    at createComponent (vue.runtime.esm.js?ff9b:5604)
    at createElm (vue.runtime.esm.js?ff9b:5551)
    at VueComponent.patch [as __patch__] (vue.runtime.esm.js?ff9b:6087)

I just started this project with vue-cli 3 and added apollo with vue-cli.
I've disabled subscriptions.

This seems to be a regression of the latest version. Will fix it tomorrow. In the meantime, you can remove your data () { ... } option.

@maziarz
It seems like a simple work around, until the issue is fixed, is to employ the result callback and set your data manually.
export default {
  data () {
    return {
      me: {
        name: null
      }
    }
  },

  apollo: {
    me: {
      query: gql`{
        me {
          name
        }
      }`,
      result({ data, loading, networkStatus }) {
        this.me = data.me
      },

      error(err) {
        // handle your error
      }
    }
  }
}

At least, that's what I did, and it seems to be working so far.
Hope it helps,
~ Ayiga

Thanks @Ayiga, that did the trick :-)

Same issue here, @Akryum can you fix that?

I don't think it's the correct way to use result to pass data in the vm but it's a good way before the fix. Maybe is better to downgrade to beta 5.

Maybe is better to downgrade to beta 5.
This. 🐈

Using for the first time (through @nuxtjs/apollo) been trying to figure it out all day until i came across this.
Downgrading has fixed the issue for now.

@binzcodes same here, as soon as there is a release, the nuxt module should be updated

beta 10 is released already 🐈

@Akryum excellent! Thanks 🥇

great thanks @Akryum 👍


Set indentation in Xcode project

I have 2 space indentation set up in global Xcode preferences.

So when I was editing a file in this project Xcode was indenting everything with 2 spaces. So I had to fix indentation manually to match your coding style.
Fortunately Xcode has an option to set up indentation in project file :)

@yas375 Thanks!


"Create an account or sign in" modal is not centered

From the application submission confirmation page, when you click "Back to homepage" as a guest, on tablet, the "Create an account or sign in" modal is not centered [vertically]:
Browser:  Firefox (not reproducible on Chrome)
Device size:  tablet (810 x 1080)
Slack Message
Reported by Melanie

@melanie-exygy Do you have more specific instructions to repro? I've tried on Chrome and Safari with different window sizes and I can't repro

@melanie-exygy Do you have more specific instructions to repro? I've tried on Chrome and Safari with different window sizes and I can't repro

@ssandbekkhaug, I can only reproduce in Firefox on tablet.  I added that to the issue description.  Also, I'm testing in the Firefox dev tools.  I don't have a tablet, so can't test there unfortunately.

I tried in Firefox and still can't repro. Can we do a quick pairing session and figure out how to repro together?

@ssandbekkhaug I think I've figured out that the problem was that Firefox dev tools doesn't show the entire page in the viewport.  When I scroll down, it looks like the modal is correctly centered.  Closing this bug.


USE Version 7.0.17 instate of 7.0.25, there are all Games in!

Sorry i just created this Account to tell everybody about this, its probably the wrong Categorie but i just wanna help out!

This is unrelated to the version, the server that holds the game info is online again.


Video Chat

Is there a module to allow video chat? I have alexa and a alexa spot and was wondering how I can tie them into the magic mirror. I got it finally running but how do I change the layout and add modules?

http://modules.magicmirror.builders

Please refer to http://forum.magicmirror.builders for support and troubleshooting.
I'm closing this issue for now. If you feel this issue should remain open, please let me know.

I found out how to get tot he terminal screen but about 10 seconds later the magic mirror starts back up

thats what the pm2 software does.. it keeps the mirror running... alt-spacebar, n will minimize the mirror app (just like windows).. so you can do pm2 stop 0
u need to read the documentation, and go to the forum as Mich has mentioned.

Im new at this
Sent from Mail for Windows 10
From: sam detweiler
Sent: Friday, July 26, 2019 4:16 AM
To: MichMich/MagicMirror
Cc:<PHONE_NUMBER>; Author
Subject: Re: [MichMich/MagicMirror] Video Chat (#1736)
thats what the pm2 software does.. it keeps the mirror running... alt-spacebar, n will minimize the mirror app (just like windows).. so you can do pm2 stop 0
u need to read the documentation, and go to the forum as Mich has mentioned.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

we can tell...
go here  https://forum.magicmirror.builders/category/10/troubleshooting
ask questions.. Mykle1 has some great guides for beginners..


Kitspace component information fetching fails

I've not been able to determine exactly what makes the following component entry fail:

It worked reasonably until I added the mouser reference and change the fuse reference.
But removing the mouser reference did no help and changing the fuse reference to one without spaces did not help either.
I upgraded to Kicost 1.1.4
Test case & log:
TEST.zip

Appear that we are experiencing some issue on Kitspace services. I am summon @kasbah to be aware.
At the long plan, would be nice have help of other developers to expand the APIs on KiCost, adding the limited and maybe payed ones.

@hildogjr Regarding the contribution of other developers.
Here is some feedback regarding my experience - hopefully it can help to find ways to enable contributions.

I worked on the code on my end in the past and by the time it was ready to share, the KiCost code structure itself changed -> efforts lost.  I've done something like that a second time, and another incompatibility occured.
I fixed IMHO an issue in november 2019 and made a pull réquest.  It is still pending (BTW, if it is not going to be integrated in any way, I guess I should close it).
I worked on the proposal of a logo as was requested, but that is also pending.
I made suggestions with regards to the spreadsheet organisation and formulas, providing at least one spreadsheet demonstrating the proposal..  I am not sure what happened with that.

In my experience that is what happens in most cases where I submit suggestions for changes, while on the contrary I accept changes opensource that I created and implicitally manage.
This is why in most cases I participate to open source by filing reports - hopefully with sufficient details and test case so that they are easily repeatable.
With regards to my own opensource software, I notice that other developers exclusively develop parts that they need, while evolving the software generally is in my case "a passion" of the opensource owner based on his own needs for functions, exploring and meeting non-technical user requests.
So I am ok with helping.  How is another question, and "what" should be mostly related to my needs.  IMHO it should also be possible to get paid by some distributors to integrate their API because if they are not part of the ecosystem, they have less customers.  We are not only helping ourselves, we are also helping them.

Haven't read this whole thread but regarding Kitspace Partinfo API:

It hit a limit again, we currently only have 5000 requests a month shared between KiCost, Horizon EDA and Kitspace use. I have added a 1000 this month for non-Kitspace use.
Ocotpart are beta testing a "free for open source" GraphQL API, this may be the best way forward for KiCost. I haven't had the time to figure out the best way to integrate with it myself, but I could put you in touch with someone from Octopart to ask for direct access.

@kasbah, did we reach the limits again?

@kasbah, did we reach the limits again?

Another problem with the server actually. (Might be running out of RAM.)

Another problem with the server actually. (Might be running out of RAM.)

Thank you.

Thank you.

@kasbah, the error returned. Are we (KiCost users) making to much attempts? Do you have this statistic?

It's up again, sorry about that. I need to find some time to find out what's going on exactly. I don't have any statistics unfortunately.

Thanks again @kasbah... we still test and fixing, no problem ;-)
Just to check, I am getting the follow log asking for specific LCSC stock numbers using the "match query" of your API (line 78 of api_partinfo_kitspace.py file).
Query used:
{'query': 'query ($input: [MpnOrSku]!){ match(parts: $input) {mpn{manufacturer,part},datasheet,description,specs{key,value},offers(from:["Digikey","LCSC","Mouser"]){product_url,sku{vendor,part},description,moq,in_stock_quantity,prices{EUR,USD,GBP}}} }','variables': '{"input":[{"sku":{"vendor":"LCSC","part":"C107644"}},{"mpn":{"manufacturer":"","part":"TL074IDT"}},{"sku":{"vendor":"LCSC","part":"C38423"}},{"mpn":{"manufacturer":"","part":"REF3030AIDBZT"}},{"sku":{"vendor":"LCSC","part":"C15850"}},{"mpn":{"manufacturer":"","part":"C0805C106K8PACTU"}},{"sku":{"vendor":"LCSC","part":"C15850"}},{"mpn":{"manufacturer":"","part":"C0805C106Z8VACTU"}},{"sku":{"vendor":"LCSC","part":"C504992"}},{"mpn":{"manufacturer":"","part":"0022232061"}},{"mpn":{"manufacturer":"","part":"0022012067"}},{"mpn":{"manufacturer":"","part":"08-50-0114"}},{"sku":{"vendor":"Digikey","part":"398-1010-ND"}},{"mpn":{"manufacturer":"","part":"LA55-P"}},{"sku":{"vendor":"Digikey","part":"398-1019-ND"}},{"mpn":{"manufacturer":"","part":"lv25-P"}},{"sku":{"vendor":"LCSC","part":"C218472"}},{"mpn":{"manufacturer":"","part":"RMCF0805FT27K0"}},{"sku":{"vendor":"LCSC","part":"C67869"}},{"mpn":{"manufacturer":"","part":"RMCF0805FT2K20"}}]}'}

Error:
No information found for parts 'R205,R605,R805,R1005,R1205,R1405,R1605,R1805' query `{'sku': {'vendor': 'LCSC', 'part': 'C218472'}}`

I am making some mistake with the "LCSC" vendor name? (Should it be lower case?)


export/import: Add assertion to check migration compitability when importing realm.

Overview
This PR adds an assertion to check the compatibility between the migration status of the exported realm and the importing server.

Info logs for mismatches in installed apps

Each server might have a different set of apps installed (e.g., Zulip Cloud has zilencer/corporate, but self-hosted might not). We only checks for mismatches in apps installed on both servers and log warn on any detected mismatch in installed apps
...
2024-09-25 09:49:01.461 WARN [] Local server has 'sessions' app installed, but exported realm does not.
2024-09-25 09:49:01.461 WARN [] Exported realm has 'some_missing_app' app installed, but this server does not.
...

Error log for Zulip version mismatch

This will raise SystemExit
Processing dump: /tmp/zulip-export-47l0ua5r ...
2024-09-25 09:52:20.837 INFO [] Importing realm dump /tmp/zulip-export-47l0ua5r
2024-09-25 09:52:20.837 INFO [] Checking migration status of exported realm

Error: Zulip version mismatch.
Export=9.0-dev+git
Local=10.0-dev+git

Error log for migrations mismatches

This will raise SystemExit
Processing dump: /tmp/zulip-export-47l0ua5r ...
2024-09-25 09:49:00.751 INFO [] Importing realm dump /tmp/zulip-export-47l0ua5r
2024-09-25 09:49:00.752 INFO [] Checking migration status of exported realm

Error: Migration mismatch between the exported realm and the local server; showing diff.
--- exported realm
+++ local server
'zerver' app:
 [X] 0583_namedusergroup_creator_namedusergroup_date_created
-[ ] 0584_namedusergroup_creator_date_created_backfill
+[X] 0584_namedusergroup_creator_date_created_backfill
+[X] 0585_userprofile_allow_private_data_export_and_more
+[X] 0586_customprofilefield_editable_by_user
+[X] 0587_savedsnippet

Fixes: #28443
Additional Informations
In 03b85b138faf1033d6985fa06357e03ad7e1805f:
Since get_migration_status is now called during export, it will have to be patched before calling do_export_realm when running tests.

git grep do_export_realm -- zerver/tests/

All do_export_realm that needs to be patched is already patched.
zerver/tests/test_events.py:            "zerver.lib.export.do_export_realm",
zerver/tests/test_events.py:            mock.patch("zerver.lib.export.do_export_realm", side_effect=Exception("Som
e failure")),
zerver/tests/test_import_export.py:    do_export_realm,
zerver/tests/test_import_export.py:            do_export_realm(
zerver/tests/test_realm_export.py:        with patch("zerver.lib.export.do_export_realm", return_value=tarball_pat
h) as mock_export:
zerver/tests/test_realm_export.py:            "zerver.lib.export.do_export_realm", side_effect=fake_export_realm
zerver/tests/test_realm_export.py:                "zerver.lib.export.do_export_realm", side_effect=Exception("fail
ure")
zerver/tests/test_realm_export.py:            patch("zerver.lib.export.do_export_realm") as mock_export,

In 753b18340ef18cec0669d7bd44481c1447341218 & 05cc4c67b02aefa220833a95803fa99d07541278:
Since do_import_realm also calls get_migration_status, it needs to be patched during tests. The import_realm helper function has been added for this purpose.

git grep do_import_realm -- zerver/tests

Before
(zulip-py3-venv) vagrant@d680cd97b1d3:/srv/zulip$ git grep do_import_realm -- zerver/tests/
zerver/tests/test_import_export.py:from zerver.lib.import_realm import do_import_realm, get_incoming_message_ids
zerver/tests/test_import_export.py:            do_import_realm(get_output_dir(), "test-zulip")
zerver/tests/test_import_export.py:            do_import_realm(get_output_dir(), "test-zulip")
zerver/tests/test_import_export.py:            do_import_realm(output_dir, "test-zulip")
zerver/tests/test_import_export.py:            do_import_realm(output_dir, "test-zulip2")
zerver/tests/test_import_export.py:            do_import_realm(get_output_dir(), "test-zulip")
zerver/tests/test_import_export.py:                new_realm = do_import_realm(get_output_dir(), "test-zulip")
zerver/tests/test_import_export.py:            do_import_realm(get_output_dir(), "test-zulip")
zerver/tests/test_import_export.py:            do_import_realm(get_output_dir(), "test-zulip")
zerver/tests/test_import_export.py:            do_import_realm(get_output_dir(), "test-zulip")
zerver/tests/test_import_export.py:                do_import_realm(get_output_dir(), "test-zulip")
zerver/tests/test_import_export.py:                do_import_realm(get_output_dir(), "test-zulip2")
zerver/tests/test_import_export.py:            imported_realm = do_import_realm(get_output_dir(), "test-zulip-1")
zerver/tests/test_import_export.py:            imported_realm = do_import_realm(get_output_dir(), "test-zulip-2")
zerver/tests/test_import_export.py:            imported_realm = do_import_realm(get_output_dir(), "test-zulip-1")
zerver/tests/test_mattermost_importer.py:from zerver.lib.import_realm import do_import_realm
zerver/tests/test_mattermost_importer.py:            do_import_realm(
zerver/tests/test_mattermost_importer.py:            do_import_realm(
zerver/tests/test_mattermost_importer.py:            do_import_realm(
zerver/tests/test_rocketchat_importer.py:from zerver.lib.import_realm import do_import_realm
zerver/tests/test_rocketchat_importer.py:            do_import_realm(
zerver/tests/test_slack_importer.py:from zerver.lib.import_realm import do_import_realm
zerver/tests/test_slack_importer.py:            do_import_realm(output_dir, test_realm_subdomain)
zerver/tests/test_zulip_update_announcements.py:from zerver.lib.import_realm import do_import_realm
zerver/tests/test_zulip_update_announcements.py:                do_import_realm(

After
zerver/tests/test_import_export.py:from zerver.lib.import
_realm import do_import_realm, get_incoming_message_ids
zerver/tests/test_import_export.py:            do_i
mport_realm(import_dir=import_dir, subdomain=subdomain)

The ExportFile test class in tests/test_import_export.py is renamed to ImportExportFile because I added import_realm to that class. This is done so that all the tests for third-party migration tools can easily inherit ImportExportFile to use the patched do_import_realm.

git grep ExportFile

This is before being renamed to ImportExportFile
zerver/tests/test_import_export.py:class ExportFile(ZulipTestCase):
zerver/tests/test_import_export.py:class RealmImportExportTest(ExportFile):
zerver/tests/test_import_export.py:class SingleUserExportTest(ExportFile):

After being renamed, it is reused in other migration tests.
zerver/tests/test_import_export.py:class ImportExportFile(ZulipTestCase):
zerver/tests/test_import_export.py:class RealmImportExportTest(ImportExportFile):
zerver/tests/test_import_export.py:class SingleUserExportTest(ImportExportFile):
zerver/tests/test_mattermost_importer.py:from zerver.tests.test_import_export import ImportExportFile
zerver/tests/test_mattermost_importer.py:class MatterMostImporter(ImportExportFile):
zerver/tests/test_rocketchat_importer.py:from zerver.tests.test_import_export import ImportExportFile
zerver/tests/test_rocketchat_importer.py:class RocketChatImporter(ImportExportFile):
zerver/tests/test_slack_importer.py:from zerver.tests.test_import_export import ImportExportFile
zerver/tests/test_slack_importer.py:class SlackImporter(ImportExportFile):
zerver/tests/test_zulip_update_announcements.py:from zerver.tests.test_import_export import ImportExportFile
zerver/tests/test_zulip_update_announcements.py:class ZulipUpdateAnnouncementsTest(ImportExportFile):

Self-review checklist

[x] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[ ] Explains differences from previous plans (e.g., issue description).
[x] Highlights technical choices and bugs encountered.
[x] Calls out remaining decisions and concerns.
[x] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[x] Each commit is a coherent idea.
[x] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[x] Visual appearance of the changes.
[ ] Responsiveness and internationalization.
[ ] Strings and tooltips.
[ ] End-to-end functionality of buttons, interactions and flows.
[x] Corner cases, error conditions, and easily imagined bugs.

Update, pushed changes to address reviews. The main code changes are done, but self-review, polishing, and communicating those changes are still in order.
I'll post another comment when this PR is ready for review again.

I wonder if using something like SystemExit instead of AssertionError to stop the import process would be better. Because we're only interested in the error message with the diff and not the the usual ttraceback.
Here's how it looks using SystemExit:

(zulip-py3-venv) vagrant@d680cd97b1d3:/srv/zulip$ python manage.py import "adds" /tmp/zulip-export-47l0ua5r
Processing dump: /tmp/zulip-export-47l0ua5r ...
2024-09-25 08:43:46.998 INFO [] Importing realm dump /tmp/zulip-export-47l0ua5r
2024-09-25 08:43:46.998 INFO [] Checking migration status of exported realm
2024-09-25 08:43:47.678 WARN [] Local server has 'sessions' app installed, but exported realm does not.
2024-09-25 08:43:47.679 WARN [] Exported realm has 'some_missing_app' app installed, but this server does not.
Migration mismatch between the exported realm and the local server; showing diff.
--- exported realm
+++ local server
'zerver' app:
 [X] 0583_namedusergroup_creator_namedusergroup_date_created
-[ ] 0584_namedusergroup_creator_date_created_backfill
+[X] 0584_namedusergroup_creator_date_created_backfill
+[X] 0585_userprofile_allow_private_data_export_and_more
+[X] 0586_customprofilefield_editable_by_user
+[X] 0587_savedsnippet

Thanks for the review, Tim.
I've addressed your comments, this is ready to be reviewed again. I've made a lot of changes to the overall code, so let me know if any part need additional context such as git diff.

Resolved merge conflict. I only had to replace the old do_convert_data with the new do_convert_zipfile

Resolved merge conflict. Sorted the imports block in lib/export.py

@mateuszmandera perhaps you could do a round of review on this one?

I'm starting to review this and #32039 introduced some conflicts, so just pushed with those resolved right now. I also added a commit  ``, as explained above. Also rebased on top of #32145 since I need that commit for tests to pass for me (and I suspect it's needed to avoid flakes in the CI).
I should be able to finish review tomorrow.

Is get_migration_status() the right way to get the info about migrations? It ends up giving this output that's made for printing to the console and human reading, which makes you have to do all that parsing of it. Additionally, as you noted in the commit message, it has some bad interaction with tests.

I ended up using applied_migrations() to get the list of migrations, which is likely used by the showmigrations command too. This removed the need for parsing and it doesn't break the tests.
The main changes for this is in the first commit, in get_migrations_by_app().

git diff of the first commit

diff --git a/zerver/lib/export.py b/zerver/lib/export.py
index 028397b3c8..107ce0f5a4 100644
--- a/zerver/lib/export.py
+++ b/zerver/lib/export.py
@@ -34,7 +34,6 @@ from scripts.lib.zulip_tools import overwrite_symlink
 from version import ZULIP_VERSION
 from zerver.lib.avatar_hash import user_avatar_base_path_from_ids
 from zerver.lib.pysa import mark_sanitized
-from zerver.lib.test_fixtures import get_migration_status
 from zerver.lib.timestamp import datetime_to_timestamp
 from zerver.lib.upload.s3 import get_bucket
 from zerver.models import (
@@ -2608,23 +2607,14 @@ def get_realm_exports_serialized(realm: Realm) -> list[dict[str, Any]]:

 def get_migrations_by_app() -> AppMigrations:
-    migration_status = get_migration_status()
-    migrations_by_app: AppMigrations = {}
-    current_app = None
-
-    for line in migration_status.splitlines():
-        line = line.strip()
-        no_migrations = "(no migrations)"
-
-        if line and not line.startswith("[") and no_migrations not in line:
-            current_app = line
-            migrations_by_app.setdefault(current_app, [])
-        elif current_app and line.startswith("["):
-            migration = line
-            migrations_by_app[current_app].append(migration)
-        elif current_app and no_migrations in line:
-            migrations_by_app[current_app].append(no_migrations)
+    from django.db import DEFAULT_DB_ALIAS, connections
+    from django.db.migrations.recorder import MigrationRecorder

+    recorder = MigrationRecorder(connections[DEFAULT_DB_ALIAS])
+    applied = recorder.applied_migrations()
+    migrations_by_app: AppMigrations = {}
+    for app_name, migration_name in applied:
+        migrations_by_app.setdefault(app_name, []).append(migration_name)
     return migrations_by_app

I guess this ties strongly to (1). The tests end up relying very heavily on mocking and fixtures, rather than dynamically generating its data in a way that's realistic for the current state of main. So those fixtures will very quickly get kinda stale and we won't want to put in the effort of updating them regularly I imagine. Maybe that's not really a problem though, and the tests will keep happily working even if they're simulating a very outdated migrations state.

I don't think we need to update the fixtures often, but we'd have to still be sure that export generates a migration_status.json like how import expectes it to be. So I updated verify_migration_status_json to ensure just that. So aslong as this doesn't fail, we can be sure that the assertions in import is probably still going to behave as we expect even if the fixtures doesn't represent uptodate migrations.

git diff between the old `verify_migration_status` and the new

     def verify_migration_status_json(self) -> None:
+        # This function asserts that the generated migration_status.json
+        # is structurally familiar for it to be used for assertion at
+        # import_realm.py. Hence, it doesn't really matter if the individual
+        # apps' migrations in migration_status.json fixture are outdated.
         exported: MigrationStatusJson = read_json("migration_status.json")
         fixture: MigrationStatusJson = orjson.loads(
             self.fixture_data("migration_status.json", "import_fixtures")
         )
-        self.assertDictEqual(exported, fixture)
+        for app, migrations in fixture["migrations_by_app"].items():
+            self.assertTrue(
+                set(migrations).issubset(set(exported["migrations_by_app"].get(app, []))),
+            )

Other than the changes I pointed out above, here are the summary of changes in each commits:

Switched the fixtures files for migration status from text format to JSON format because I don't use get_migration_status anymore. These fixture files live in impor_fixtures/applied_migrations_fixtures/*.json. These fixtures are different from import_fixtures/migration_status.json, they are used to patch the value of "migrations_by_app" in migration_status files.

These happens in the second commit:

Reverted back the implementation of self.import_realm which was added because do_import_realm needs to be patched because it uses get_migration_status.

Added a new test, test_check_migration_for_zulip_cloud_realm.

git diff for those changes:

diff --git a/zerver/tests/test_import_export.py b/zerver/tests/test_import_export.py
index b213cc7296..903c6016b7 100644
--- a/zerver/tests/test_import_export.py
+++ b/zerver/tests/test_import_export.py
@@ -16,6 +16,7 @@ from django.utils.timezone import now as timezone_now
 from typing_extensions import override

 from analytics.models import UserCount
+from version import ZULIP_VERSION
 from zerver.actions.alert_words import do_add_alert_words
 from zerver.actions.create_user import do_create_user
 from zerver.actions.custom_profile_fields import (
@@ -43,6 +44,7 @@ from zerver.lib.avatar_hash import user_avatar_path
 from zerver.lib.bot_config import set_bot_config
 from zerver.lib.bot_lib import StateHandler
 from zerver.lib.export import (
+    AppMigrations,
     MigrationStatusJson,
     Record,
     do_export_realm,
@@ -155,9 +157,9 @@ def get_direct_message_group_hashes(r: Realm) -> str:
     return direct_message_group_hash

-class ImportExportFile(ZulipTestCase):
-    """This class is a container for shared helper functions used
-    for both the realm-level and user-level import/export tests."""
+class ExportFile(ZulipTestCase):
+    """This class is a container for shared helper functions
+    used for both the realm-level and user-level export tests."""

-    def import_realm(
-        self,
-        import_dir: str,
-        subdomain: str,
-        migration_status_fixture: str = "with_complete_migrations.txt",
-    ) -> None:
-        with patch("zerver.lib.export.get_migration_status") as m:
-            m.return_value = self.fixture_data(
-                migration_status_fixture, "import_fixtures/get_migration_status_fixtures"
+        for app, migrations in fixture["migrations_by_app"].items():
+            self.assertTrue(
+                set(migrations).issubset(set(exported["migrations_by_app"].get(app, []))),
             )
-            do_import_realm(import_dir=import_dir, subdomain=subdomain)

+
+class RealmImportExportTest(ExportFile):
     def create_user_and_login(self, email: str, realm: Realm) -> None:
         self.register(email, "test", subdomain=realm.subdomain)

-
-class RealmImportExportTest(ImportExportFile):
     def export_realm(
         self,
         realm: Realm,
         export_type: int,
         exportable_user_ids: set[int] | None = None,
-        migration_file_fixture: str = "with_complete_migrations.txt",
     ) -> None:
         output_dir = make_export_output_dir()
-        with (
-            patch("zerver.lib.export.create_soft_link"),
-            self.assertLogs(level="INFO"),
-            patch("zerver.lib.export.get_migration_status") as m,
-        ):
-            m.return_value = self.fixture_data(
-                migration_file_fixture, "import_fixtures/get_migration_status_fixtures"
-            )
+        with patch("zerver.lib.export.create_soft_link"), self.assertLogs(level="INFO"):
             do_export_realm(
                 realm=realm,
                 output_dir=output_dir,
@@ -405,19 +400,13 @@ class RealmImportExportTest(ImportExportFile):
         original_realm: Realm,
         export_type: int = RealmExport.EXPORT_FULL_WITHOUT_CONSENT,
         exportable_user_ids: set[int] | None = None,
-        migration_file_fixture: str = "with_complete_migrations.txt",
     ) -> None:
         RealmAuditLog.objects.create(
             realm=original_realm,
             event_type=AuditLogEventType.REALM_EXPORTED,
             event_time=timezone_now(),
         )
-        self.export_realm(
-            original_realm,
-            export_type,
-            exportable_user_ids,
-            migration_file_fixture,
-        )
+        self.export_realm(original_realm, export_type, exportable_user_ids)

     def test_export_files_from_local(self) -> None:
         user = self.example_user("hamlet")
@@ -1082,7 +1071,7 @@ class RealmImportExportTest(ImportExportFile):
             # process in this test.
             self.captureOnCommitCallbacks(execute=True),
         ):
-            self.import_realm(get_output_dir(), "test-zulip")
+            do_import_realm(get_output_dir(), "test-zulip")

         # Make sure our export/import didn't somehow leak info into the
         # original realm.
@@ -1306,7 +1295,7 @@ class RealmImportExportTest(ImportExportFile):

         self.export_realm_and_create_auditlog(realm)
         with self.settings(BILLING_ENABLED=False), self.assertLogs(level="INFO"):
-            self.import_realm(get_output_dir(), "test-zulip")
+            do_import_realm(get_output_dir(), "test-zulip")
         imported_realm = Realm.objects.get(string_id="test-zulip")

         imported_message = Message.objects.filter(realm=imported_realm).latest("id")
@@ -1682,7 +1671,7 @@ class RealmImportExportTest(ImportExportFile):
             f.write(orjson.dumps(data))

         with self.assertRaises(ValidationError), self.assertLogs(level="INFO"):
-            self.import_realm(output_dir, "test-zulip")
+            do_import_realm(output_dir, "test-zulip")

         # Now test a weird case where delivery_email is valid, but .email is not.
         # Such data should never reasonably get generated, but we should still
@@ -1698,7 +1687,7 @@ class RealmImportExportTest(ImportExportFile):
             f.write(orjson.dumps(data))

         with self.assertRaises(ValidationError), self.assertLogs(level="INFO"):
-            self.import_realm(output_dir, "test-zulip2")
+            do_import_realm(output_dir, "test-zulip2")

     def test_import_realm_with_no_realm_user_default_table(self) -> None:
         original_realm = Realm.objects.get(string_id="zulip")
@@ -1707,7 +1696,7 @@ class RealmImportExportTest(ImportExportFile):
         self.export_realm_and_create_auditlog(original_realm)

         with self.settings(BILLING_ENABLED=False), self.assertLogs(level="INFO"):
-            self.import_realm(get_output_dir(), "test-zulip")
+            do_import_realm(get_output_dir(), "test-zulip")

         self.assertTrue(Realm.objects.filter(string_id="test-zulip").exists())
         imported_realm = Realm.objects.get(string_id="test-zulip")
@@ -1746,8 +1735,7 @@ class RealmImportExportTest(ImportExportFile):
             m.side_effect = mock_send_to_push_bouncer_response

             with self.captureOnCommitCallbacks(execute=True):
-                self.import_realm(get_output_dir(), "test-zulip")
-                new_realm = Realm.objects.get(string_id="test-zulip")
+                new_realm = do_import_realm(get_output_dir(), "test-zulip")

         self.assertTrue(Realm.objects.filter(string_id="test-zulip").exists())
         calls_args_for_assert = m.call_args_list[1][0]
@@ -1771,7 +1759,7 @@ class RealmImportExportTest(ImportExportFile):
             self.assertLogs(level="WARNING") as mock_log,
             patch("zerver.lib.import_realm.upload_emoji_image", side_effect=BadImageError("test")),
         ):
-            self.import_realm(get_output_dir(), "test-zulip")
+            do_import_realm(get_output_dir(), "test-zulip")
         self.assert_length(mock_log.output, 1)
         self.assertIn("Could not thumbnail emoji image", mock_log.output[0])

@@ -1785,7 +1773,7 @@ class RealmImportExportTest(ImportExportFile):
         self.export_realm_and_create_auditlog(realm)

         with self.settings(BILLING_ENABLED=False), self.assertLogs(level="INFO"):
-            self.import_realm(get_output_dir(), "test-zulip")
+            do_import_realm(get_output_dir(), "test-zulip")
         imported_realm = Realm.objects.get(string_id="test-zulip")

         # Test attachments
@@ -1852,7 +1840,7 @@ class RealmImportExportTest(ImportExportFile):
         self.export_realm_and_create_auditlog(realm)

         with self.settings(BILLING_ENABLED=False), self.assertLogs(level="INFO"):
-            self.import_realm(get_output_dir(), "test-zulip")
+            do_import_realm(get_output_dir(), "test-zulip")

         imported_realm = Realm.objects.get(string_id="test-zulip")
         test_image_data = read_test_image_file("img.png")
@@ -1950,7 +1938,7 @@ class RealmImportExportTest(ImportExportFile):
             self.export_realm_and_create_auditlog(realm)

             with self.settings(BILLING_ENABLED=False), self.assertLogs(level="INFO"):
-                self.import_realm(get_output_dir(), "test-zulip")
+                do_import_realm(get_output_dir(), "test-zulip")

             imported_realm = Realm.objects.get(string_id="test-zulip")
             self.assertEqual(
@@ -1961,7 +1949,7 @@ class RealmImportExportTest(ImportExportFile):
             self.export_realm_and_create_auditlog(realm)

             with self.settings(BILLING_ENABLED=True), self.assertLogs(level="WARN") as mock_warn:
-                self.import_realm(get_output_dir(), "test-zulip2")
+                do_import_realm(get_output_dir(), "test-zulip2")

             imported_realm = Realm.objects.get(string_id="test-zulip2")

@@ -1986,9 +1974,7 @@ class RealmImportExportTest(ImportExportFile):
         self.export_realm_and_create_auditlog(realm)

         with self.settings(BILLING_ENABLED=True), self.assertLogs(level="INFO"):
-            self.import_realm(get_output_dir(), "test-zulip-1")
-            imported_realm = Realm.objects.get(string_id="test-zulip-1")
-
+            imported_realm = do_import_realm(get_output_dir(), "test-zulip-1")
             self.assertEqual(imported_realm.plan_type, Realm.PLAN_TYPE_LIMITED)
             self.assertEqual(imported_realm.max_invites, 100)
             self.assertEqual(imported_realm.upload_quota_gb, 5)
@@ -2005,9 +1991,7 @@ class RealmImportExportTest(ImportExportFile):
         self.export_realm_and_create_auditlog(realm)

         with self.settings(BILLING_ENABLED=False), self.assertLogs(level="INFO"):
-            self.import_realm(get_output_dir(), "test-zulip-2")
-            imported_realm = Realm.objects.get(string_id="test-zulip-2")
-
+            imported_realm = do_import_realm(get_output_dir(), "test-zulip-2")
             self.assertEqual(imported_realm.plan_type, Realm.PLAN_TYPE_SELF_HOSTED)
             self.assertEqual(imported_realm.max_invites, 100)
             self.assertEqual(imported_realm.upload_quota_gb, None)
@@ -2039,8 +2023,7 @@ class RealmImportExportTest(ImportExportFile):
             f.write(orjson.dumps(data))

         with self.assertLogs(level="INFO"):
-            self.import_realm(get_output_dir(), "test-zulip-1")
-            imported_realm = Realm.objects.get(string_id="test-zulip-1")
+            imported_realm = do_import_realm(get_output_dir(), "test-zulip-1")
         user_membership_logs = RealmAuditLog.objects.filter(
             realm=imported_realm,
             event_type=AuditLogEventType.USER_GROUP_DIRECT_USER_MEMBERSHIP_ADDED,
@@ -2059,59 +2042,72 @@ class RealmImportExportTest(ImportExportFile):

     def test_import_realm_with_unapplied_migrations(self) -> None:
         realm = get_realm("zulip")
-        self.export_realm(
-            realm,
-            export_type=RealmExport.EXPORT_FULL_WITH_CONSENT,
-            migration_file_fixture="with_unapplied_migrations.txt",
-        )
-
         with (
             self.assertRaises(SystemExit) as e,
             self.assertLogs(level="INFO"),
+            patch("zerver.lib.export.get_migrations_by_app") as mock_export,
+            patch("zerver.lib.import_realm.get_migrations_by_app") as mock_import,
         ):
-            self.import_realm(get_output_dir(), "test-zulip")
+            mock_export.return_value = self.get_applied_migrations_fixture(
+                "with_unapplied_migrations.json"
+            )
+            mock_import.return_value = self.get_applied_migrations_fixture(
+                "with_complete_migrations.json"
+            )
+            self.export_realm(
+                realm,
+                export_type=RealmExport.EXPORT_FULL_WITH_CONSENT,
+            )
+            do_import_realm(get_output_dir(), "test-zulip")
+
         expected_error_message = self.fixture_data(
             "unapplied_migrations_error.txt", "import_fixtures/check_migrations_errors"
         ).strip()
         error_message = str(e.exception).strip()
         self.assertEqual(expected_error_message, error_message)

-    def test_import_realm_with_missing_migrations(self) -> None:
+    def test_import_realm_with_extra_migrations(self) -> None:
         realm = get_realm("zulip")
-        self.export_realm(
-            realm,
-            export_type=RealmExport.EXPORT_FULL_WITH_CONSENT,
-            migration_file_fixture="with_missing_migrations.txt",
-        )
-
         with (
             self.assertRaises(SystemExit) as e,
             self.assertLogs(level="INFO"),
+            patch("zerver.lib.export.get_migrations_by_app") as mock_export,
+            patch("zerver.lib.import_realm.get_migrations_by_app") as mock_import,
         ):
-            self.import_realm(
-                get_output_dir(),
-                "test-zulip",
+            mock_export.return_value = self.get_applied_migrations_fixture(
+                "with_complete_migrations.json"
+            )
+            mock_import.return_value = self.get_applied_migrations_fixture(
+                "with_unapplied_migrations.json"
             )
+            self.export_realm(
+                realm,
+                export_type=RealmExport.EXPORT_FULL_WITH_CONSENT,
+            )
+            do_import_realm(get_output_dir(), "test-zulip")
         expected_error_message = self.fixture_data(
-            "missing_migrations_error.txt", "import_fixtures/check_migrations_errors"
+            "extra_migrations_error.txt", "import_fixtures/check_migrations_errors"
         ).strip()
         error_message = str(e.exception).strip()
-
         self.assertEqual(expected_error_message, error_message)

     def test_import_realm_with_extra_exported_apps(self) -> None:
         realm = get_realm("zulip")
-        self.export_realm_and_create_auditlog(realm)
-
         with (
             self.settings(BILLING_ENABLED=False),
             self.assertLogs(level="WARNING") as mock_log,
+            patch("zerver.lib.export.get_migrations_by_app") as mock_export,
+            patch("zerver.lib.import_realm.get_migrations_by_app") as mock_import,
         ):
-            self.import_realm(
-                get_output_dir(),
-                "test-zulip",
-                migration_status_fixture="with_missing_apps.txt",
+            mock_export.return_value = self.get_applied_migrations_fixture(
+                "with_complete_migrations.json"
+            )
+            mock_import.return_value = self.get_applied_migrations_fixture("with_missing_apps.json")
+            self.export_realm_and_create_auditlog(
+                realm,
+                export_type=RealmExport.EXPORT_FULL_WITH_CONSENT,
             )
+            do_import_realm(get_output_dir(), "test-zulip")
         missing_apps_log = [
             "WARNING:root:Exported realm has 'phonenumber' app installed, but this server does not.",
             "WARNING:root:Exported realm has 'sessions' app installed, but this server does not.",
@@ -2124,16 +2120,21 @@ class RealmImportExportTest(ImportExportFile):

     def test_import_realm_with_missing_apps(self) -> None:
         realm = get_realm("zulip")
-        self.export_realm_and_create_auditlog(realm, migration_file_fixture="with_missing_apps.txt")
-
         with (
             self.settings(BILLING_ENABLED=False),
             self.assertLogs(level="WARNING") as mock_log,
+            patch("zerver.lib.export.get_migrations_by_app") as mock_export,
+            patch("zerver.lib.import_realm.get_migrations_by_app") as mock_import,
         ):
-            self.import_realm(
-                get_output_dir(),
-                "test-zulip",
+            mock_export.return_value = self.get_applied_migrations_fixture("with_missing_apps.json")
+            mock_import.return_value = self.get_applied_migrations_fixture(
+                "with_complete_migrations.json"
+            )
+            self.export_realm_and_create_auditlog(
+                realm,
+                export_type=RealmExport.EXPORT_FULL_WITH_CONSENT,
             )
+            do_import_realm(get_output_dir(), "test-zulip")
         missing_apps_log = [
             "WARNING:root:Local server has 'phonenumber' app installed, but exported realm does not.",
             "WARNING:root:Local server has 'sessions' app installed, but exported realm does not.",
@@ -2143,17 +2144,48 @@ class RealmImportExportTest(ImportExportFile):
         imported_realm = Realm.objects.get(string_id="test-zulip")
         self.assertNotEqual(imported_realm.id, realm.id)

+    def test_check_migration_for_zulip_cloud_realm(self) -> None:
+        # This test ensures that `check_migrations_status` correctly handles
+        # checking the migrations of a Zulip Cloud-like realm (with zilencer/
+        # corporate apps installed) when importing into a self-hosted realm
+        # (where these apps are not installed).
+        realm = get_realm("zulip")
+        with (
+            self.settings(BILLING_ENABLED=False),
+            self.assertLogs(level="INFO"),
+            patch("zerver.lib.export.get_migrations_by_app") as mock_export,
+            patch("zerver.lib.import_realm.get_migrations_by_app") as mock_import,
+        ):
+            mock_export.return_value = self.get_applied_migrations_fixture(
+                "with_complete_migrations.json"
+            )
+            self_hosted_migrations = self.get_applied_migrations_fixture(
+                "with_complete_migrations.json"
+            )
+            for key in ["zilencer", "corporate"]:
+                self_hosted_migrations.pop(key, None)
+            mock_import.return_value = self_hosted_migrations
+            self.export_realm_and_create_auditlog(
+                realm,
+                export_type=RealmExport.EXPORT_FULL_WITH_CONSENT,
+            )
+            do_import_realm(get_output_dir(), "test-zulip")
+
+        self.assertTrue(Realm.objects.filter(string_id="test-zulip").exists())
+        imported_realm = Realm.objects.get(string_id="test-zulip")
+        self.assertNotEqual(imported_realm.id, realm.id)
+
     def test_import_realm_without_migration_status_file(self) -> None:
         realm = get_realm("zulip")
         with patch("zerver.lib.export.export_migration_status"):
             self.export_realm_and_create_auditlog(realm)

         with self.assertRaises(SystemExit) as e, self.assertLogs(level="INFO"):
-            self.import_realm(
+            do_import_realm(
                 get_output_dir(),
                 "test-zulip",
             )
-        expected_error_message = "\nError: Missing migration_status.json file!"
+        expected_error_message = "\nError: Missing migration_status.json file! Make sure you're using the same Zulip version as the exported
 realm."
         self.assertEqual(expected_error_message, str(e.exception))

     def test_import_realm_with_different_stated_zulip_version(self) -> None:
@@ -2165,17 +2197,17 @@ class RealmImportExportTest(ImportExportFile):
             self.assertRaises(SystemExit) as e,
             self.assertLogs(level="INFO"),
         ):
-            self.import_realm(
+            do_import_realm(
                 get_output_dir(),
                 "test-zulip",
             )
         expected_error_message = (
-            "\nError: Zulip version mismatch.\n" "Export=10.0-dev+git\n" "Local=8.0"
+            "\nError: Zulip version mismatch.\n" f"Export={ZULIP_VERSION}\n" "Local=8.0"
         )
         self.assertEqual(expected_error_message, str(e.exception))

-class SingleUserExportTest(ImportExportFile):
+class SingleUserExportTest(ExportFile):
     def do_files_test(self, is_s3: bool) -> None:
         output_dir = make_export_output_dir()

Addressed a code comment review
Added a condition to skip logging about Zulip cloud exclusive apps to address this review.
Updated the error message for when there are no migration_status.json file found in the tarball.

git diff of those changes

diff --git a/zerver/lib/import_realm.py b/zerver/lib/import_realm.py
index 614efbf507..0ea5d553b0 100644
--- a/zerver/lib/import_realm.py
+++ b/zerver/lib/import_realm.py
@@ -1137,7 +1137,9 @@ def do_import_realm(import_dir: Path, subdomain: str, processes: int = 1) -> Rea

     migration_status_filename = os.path.join(import_dir, "migration_status.json")
     if not os.path.exists(migration_status_filename):
-        raise SystemExit("\nError: Missing migration_status.json file!")
+        raise SystemExit(
+            "\nError: Missing migration_status.json file! Make sure you're using the same Zulip version as the exported realm."
+        )
     logging.info("Checking migration status of exported realm")
     with open(migration_status_filename) as f:
         migration_status: MigrationStatusJson = orjson.loads(f.read())
@@ -2101,6 +2103,11 @@ def add_users_to_system_user_groups(
     )

+def is_from_zulip_cloud(app: str, local_app: Any | None, exported_app: Any | None) -> bool:
+    zulip_cloud_exclusive_apps = ["zilencer", "corporate"]
+    return app in zulip_cloud_exclusive_apps and (local_app is None or exported_app is None)
+
+
 def check_migration_status(exported_migration_status: MigrationStatusJson) -> None:
     mismatched_migrations_log: dict[str, str] = {}
     local_migration_status = MigrationStatusJson(
@@ -2116,19 +2123,24 @@ def check_migration_status(exported_migration_status: MigrationStatusJson) -> No
     exported_migrations_by_app = exported_migration_status["migrations_by_app"]
     local_migrations_by_app = local_migration_status["migrations_by_app"]
     all_apps = set(exported_migrations_by_app.keys()).union(set(local_migrations_by_app.keys()))
+
     for app in all_apps:
-        # Each server might have a different set of apps installed (e.g., Zulip Cloud has
-        # zilencer/corporate, but self-hosted might not). We only checks for migrations
-        # mismatches in apps installed on both servers.
         exported_app_migrations = exported_migrations_by_app.get(app)
         local_app_migrations = local_migrations_by_app.get(app)

-        if not local_app_migrations:
-            logging.warning("Exported realm has '%s' app installed, but this server does not.", app)
-        elif not exported_app_migrations:
+        if is_from_zulip_cloud(app, local_app_migrations, exported_app_migrations):
+            # In the case of a migration from Zulip Cloud, where one
+            # realm has zilencer/corporate apps installed but the
+            # other (self-hosted) server does not, we do not inform
+            # the user of mismatches in these installed apps.
+            continue
+
+        if not exported_app_migrations:
             logging.warning(
                 "Local server has '%s' app installed, but exported realm does not.", app
             )
+        elif not local_app_migrations:
+            logging.warning("Exported realm has '%s' app installed, but this server does not.", app)
         elif local_app_migrations != exported_app_migrations:
             diff = list(
                 unified_diff(exported_app_migrations, local_app_migrations, lineterm="", n=1)
@@ -2136,7 +2148,7 @@ def check_migration_status(exported_migration_status: MigrationStatusJson) -> No
             mismatched_migrations_log[f"\n'{app}' app:\n"] = "\n".join(diff[3:])

     if mismatched_migrations_log:
-        # The order of the list outputted by the diff is nondeterministic, so the
+        # The order of the list output by the diff is nondeterministic, so the
         # error logs needs to be sorted first.
         sorted_error_log: list[str] = [

@mateuszmandera Thanks for reviewing this! I think I've addressed or atleast answered your questions here. Other than those, I guess the only oustanding issue that hasn't been addressed is this:

The use of SystemExit for error messages, as this is waiting for Tim's input. comment

Update, swapped SystemExit to Exception and updated the PR description.

I fixed up the applied_migrations link in the earlier comment to https://github.com/django/django/blob/901ec7a217d174b25ac008c9c385928a36f870d1/django/db/migrations/recorder.py#L84-L97 since the original link was  to the wrong file I think and didn't work and posted a quick last comment in https://github.com/zulip/zulip/pull/31681#discussion_r1830078408 above. After that tweak, should be ready for Tim to review.

Updated the PR to address this comment,

git diff

diff --git a/zerver/lib/import_realm.py b/zerver/lib/import_realm.py
index 4915dba49f..6ec40763bb 100644
--- a/zerver/lib/import_realm.py
+++ b/zerver/lib/import_realm.py
@@ -2103,9 +2103,7 @@ def add_users_to_system_user_groups(
     )

-def is_from_zulip_cloud(app: str, local_app: Any | None, exported_app: Any | None) -> bool:
-    zulip_cloud_exclusive_apps = ["zilencer", "corporate"]
-    return app in zulip_cloud_exclusive_apps and (local_app is None or exported_app is None)
+ZULIP_CLOUD_ONLY_APP_NAMES = ["zilencer", "corporate"]

 def check_migration_status(exported_migration_status: MigrationStatusJson) -> None:
@@ -2128,7 +2126,9 @@ def check_migration_status(exported_migration_status: MigrationStatusJson) -> No
         exported_app_migrations = exported_migrations_by_app.get(app)
         local_app_migrations = local_migrations_by_app.get(app)

-        if is_from_zulip_cloud(app, local_app_migrations, exported_app_migrations):
+        if app in ZULIP_CLOUD_ONLY_APP_NAMES and (
+            local_app_migrations is None or exported_app_migrations is None
+        ):
             # In the case of a migration from Zulip Cloud, where one
             # realm has zilencer/corporate apps installed but the
             # other (self-hosted) server does not, we do not inform

awesome, thank you! @timabbott I think this looks pretty good, should be good for further review.

I pushed some updates to address the above and generally clean up the wording and explanation to be more intuitive to end users who might see this exception.
I think this may not be ideal -- the multi-line traceback is not exactly a standard pattern, and likely that should be switched to raise CommandError to offer nicer output. But I think it beats no error message for sure.

@PieterCK Hmm, due to the hard-coding of expected version in zerver/tests/fixtures/import_fixtures/check_migrations_errors/extra_migrations_error.txt and zerver/tests/fixtures/import_fixtures/check_migrations_errors/unapplied_migrations_error.txt the tests fail when the local machine doesn't agree that local version is 10.0-dev+git.
======================================================================
FAIL: test_import_realm_with_extra_migrations (zerver.tests.test_import_export.RealmImportExportTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vagrant/zulip/zerver/tests/test_import_export.py", line 2092, in test_import_realm_with_extra_migrations
    self.assertEqual(expected_error_message, error_message)
  File "/home/vagrant/zulip/zerver/lib/test_classes.py", line 290, in assertEqual
    raise AssertionError(
AssertionError: Actual and expected outputs do not match; showing diff.
  Export was generated on a different Zulip version.
- Export=10.0-dev+git
- Server=10.0-dev+git
+ Export=9.0-dev-5278-g1e500b0080
+ Server=9.0-dev-5278-g1e500b0080

  Database formats differ between the exported realm and this server.
  Printing migrations that differ between the versions:
  --- exported realm
  +++ this server
  'auth' app:
   0002_alter_permission_name_max_length
  -0003_alter_user_email_max_length
  -0004_alter_user_username_opts

  'zerver' app:
   0029_realm_subdomain
  -0030_realm_org_type
  -0031_remove_system_avatar_source

Opened #32307 to fix.

I decided this is too annoying to backport for how much value it'd add in 9.x.


[MP Blog] Microprofile, a knight or just another pawn (Part 2)

[Review required]
This issue refers to the work that needs to be done for an article to be published on the MP blog
This is a sequel of the blog mentioned in issue #475 and explains the usage of all the features used in the final project along with a sample on-production system built with MicroProfile, this is also linked with #454 as a subtask
Part 2

@mblevins65,
This is the 2nd part of blog 1.
They are 1 large blog divided into 2. I provided feedback on Part 1 b/c there is no link to this blog or mention of the division.  Thank you for your help.

@manish2aug @aeiras Manish, I will take a look at this next week, if I am able, I will take a look at it over the next few days.

@manish2aug @aeiras part 2 is complete.

Thanks, @mblevins65!
All suggestions are resolved, I would add the content to the blog section as a draft and would communicate in the google group to request a review from web content and SEO point of view

Thank you Peggy, @mblevins65!
@manish2aug before you go into Wordpress, the draft requires extra care.
Please see comments. Almost there! :)

@aeiras, thanks for pointing out those points. I rectified those and other similar ones, will go through it again more carefully

@manish2aug @aeiras
I saw that you changed some things, so I went back through part 2, I'm glad I did.  I found some more things to correct.  Check it over again, you will see what suggestions I made.

Thanks, @mblevins65!
In the last edit, only a few feature names (section headings) were changed from a short one to a descriptive name and a hyperlink was added to the previous blog post. Thanks for the help, I have merged the recent suggestions as well and commented on 1-2 points, please check if that is ok

Manish,
I don't know why, but the document is not allowing me to get to the far
right side of the suggestion comments to not only read the full comment but
to also get to accept checkmark or the decline X.  So I can't get to it to
cancel the suggestion.  Do you know what is happening?  I've tried several
different things but no luck.  Can you go ahead and cancel my suggestions
or see if you can figure out why I can't see the full column?
Peggy
On Tue, May 4, 2021 at 8:25 AM Manish kumar @.***>
wrote:

Thanks, @mblevins65 https://github.com/mblevins65!
In the last edit, only a few feature names (section headings) were changed
from a short one to a descriptive name and a hyperlink was added to the
previous blog post. Thanks for the help, I have merged the recent
suggestions as well and commented on 1-2 points, please check if that is ok
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eclipse/microprofile-marketing/issues/482#issuecomment-831938702,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC2PZK2OD5Y4E2UC3GDWVRTTL7YSXANCNFSM422GJOFA
.

Manish,
I have to run to pick up my groceries, I'll be back shortly to see if you
figured the problem out.
Peggy
On Tue, May 4, 2021 at 8:25 AM Manish kumar @.***>
wrote:

Thanks, @mblevins65 https://github.com/mblevins65!
In the last edit, only a few feature names (section headings) were changed
from a short one to a descriptive name and a hyperlink was added to the
previous blog post. Thanks for the help, I have merged the recent
suggestions as well and commented on 1-2 points, please check if that is ok
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eclipse/microprofile-marketing/issues/482#issuecomment-831938702,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC2PZK2OD5Y4E2UC3GDWVRTTL7YSXANCNFSM422GJOFA
.

Sorry, I was away let me quickly see what is happening

On my side this is okay, I tried to log in with a different account and it looks fine on my side. Please check if changing zoom to a lower percentage or using "Fit" makes any difference. Unfortunately can't think of anything else with my limited knowledge of google docs :)

I don't know google docs that well either, I'm an MS Office person.  I took
a screenshot so you could see what I am talking about.
[image: image.png]
On Tue, May 4, 2021 at 11:47 AM Manish kumar @.***>
wrote:

On my side this is okay, I tried to log in with a different account and it
looks fine on my side. Please check if changing zoom to a lower percentage
or using "Fit" makes any difference. Unfortunately can't think of anything
else with my limited knowledge of google docs :)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eclipse/microprofile-marketing/issues/482#issuecomment-832087598,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC2PZK7Z3YGYKB52GAHXO2DTMAQKHANCNFSM422GJOFA
.

I figured it out!!!!  It isn't the document, you have to hide the menus in
git if you can't see the far right.  It's a drop-down menu in the upper
right-hand corner of the git sheet.  It's right next to the editing choices.
On Tue, May 4, 2021 at 11:47 AM Manish kumar @.***>
wrote:

On my side this is okay, I tried to log in with a different account and it
looks fine on my side. Please check if changing zoom to a lower percentage
or using "Fit" makes any difference. Unfortunately can't think of anything
else with my limited knowledge of google docs :)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eclipse/microprofile-marketing/issues/482#issuecomment-832087598,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC2PZK7Z3YGYKB52GAHXO2DTMAQKHANCNFSM422GJOFA
.

--
Peggy Blevins
Copy-editor, Proof-reader
Office: 1-651-493-2521
Cell:  1-651-239-5184
@.***

Well, I fixed the problem, and now I'm smarter because of it.  I had to
learn git-hub in a hell of a hurry and really only learned how to respond
to someone else's work.  I never did read the rest of the tutorial.
Okay, I think we have covered everything we needed to, or at least as far
as I'm concerned.  😉
Good luck Manish!  Talk to you soon...........
On Tue, May 4, 2021 at 11:47 AM Manish kumar @.***>
wrote:

On my side this is okay, I tried to log in with a different account and it
looks fine on my side. Please check if changing zoom to a lower percentage
or using "Fit" makes any difference. Unfortunately can't think of anything
else with my limited knowledge of google docs :)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eclipse/microprofile-marketing/issues/482#issuecomment-832087598,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC2PZK7Z3YGYKB52GAHXO2DTMAQKHANCNFSM422GJOFA
.

--
Peggy Blevins
Copy-editor, Proof-reader
Office: 1-651-493-2521
Cell:  1-651-239-5184
@.***

The blog is created, saved as a draft, and submitted for review after adding SEO goodies, will send a communication soon

Manish, do you need me to take a look at this again?
On Fri, May 14, 2021, 8:55 AM Manish kumar @.***> wrote:

The blog is created, saved as a draft, and submitted for review after
adding SEO goodies, will send a communication soon
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eclipse/microprofile-marketing/issues/482#issuecomment-841259399,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC2PZK27KCUZFQ646CE2YH3TNUTUBANCNFSM422GJOFA
.

Hi Peggy, thanks! Actually, content is not changed but just added the same content as a blog post, the review is a formal process, so from a content point of view, no review needed.

wonderful progress, you two. Thank you for collaborating!
@manish2aug please pull us in when the final WordPress review is ready for publishing eyes.

Hi @aeiras, I am done with Yoast suggestions, it is ready for review

Your blog is now published Fantastic work collaborating with @mblevins65!
Manish, once you tweet, please share it via this ticket so MP can re-tweet you. That closes this ticket. Cheers to you, MicroProfiler. The closing of your blog is fantastic as well, kind and exact! :)


Update docfx.json

Ran json through several linter/validater tools and the code is valid. Might be the a "carriage return" at the end was one suggestion from Stack Overflow. Delete line 54

Docs Build status updates of commit c9ff383:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

docs/docfx.json
:x:Error

Details

docs/docfx.json

Line 55, Column 0: [Error-json-syntax-error] Unexpected end of content while loading JObject.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel