Removing dependency on the webapi - Feature request

Hi, I was wondering whether you have ever thought about removing the dependency on the webapi and make this app "self-contained".
There is a project garmin-connect-client that is a C# web client to interact with garmin connect. It works, though I will need to submit a pull request as it has some errors (due to changes to the GarminAPI) but I tested it and it works.
For the generation of the FIT file I can add the necessary code to the services to create the appropriate Fit file with the appropriate data to be uploaded (e.g. via a pull request). The only issue is that I have no experience on Xamarin Forms and I would not able to really test if this really works.

Hi, that would be best without an external api.
Why I'm using external api right now? Because there was existing, solid, simple and maintained library that allow connect with Garmin cloud written in Go. It was used in bodycomposition. When I decided to create this app I couldn't find any of that kind of lib in .NET world that would work like that. So I just wrapped Go library in API and made mobile client to it.
Experience in Xamarin is not necessary for test it. Sending request to Garmin can be wrapped in separated library without refences to Xamarin it self. By the way I'm thinking about switching to .net MAUI to check it out. Because Xamarin is outdated and MAUI is some kind of rebranded Xamarin.
Thanks for sharing the info about that lib, When I have more time I will try to check it out and dig into it. You are free to check it in your own, any help is appreciated.

Thanks for the prompt reply. I am not sure why I have not thought of a separate library :) actually I already have this close to ready because I was going to implement my own WebAPI (I trust mine better :)) with the same interface as it is very straight forward. I think it quite simple to have a class Lib that exposes a static method that does all the work. The method could have the same API interface as the original GO version, so it should be plug-n-play (of course without the need JSON serialization).
I am also waiting for MAUI, especially its development to become fully supported under VSCode, without the need to install Visual Studio.

There is one thing that I can think of that may be platform specific and that is the use of local storage. Fit files needed to be written to storage before upload. But I suppose using the general core FileStream class would work

Hi I published the repo: https://github.com/Abasz/GarminWeightScaleUploader
I tested it via the unit test classes and it should work. Note that due to the way the Fit SDK is implemented I had to change some of the types on the Model classes (like doubles to float etc.).
Also if you would be able to add an Activity Class settings for the user settings that would be great. Its not strictly necessary but according to the SDK it is included in the UserSettings message.
Please let me know if you have any questions or if you need anything else.

Nice job, This week I will test the solution. And if I find something, I will let you know or open a pull request.
If everything will works fine, Could you please create a nuget package later?

yes absolutely that makes sense. I never done that before tough, so I might need some time on that

Hi, I checked your project and it worked for me in unit tests (it uploaded weight to my garmin account) but I got some issues when I tried to integrate it with xamarin app.

Do you have have source of Fit.dll library? It's built in .Net Framework 4.5 and probably only for Windows so it cannot be used in mobile. But I found nuget Dynastream Fit Portable. It's little old too (.core 1.1) and some features are missing (Ex. BMI). I couldn't use it in Xamarin because Xamarin support only .netstandard (2.0/2.1) libraries.

But .NET MAUI is already built on top of .NET 6 and it can consume libraries from .net core 1.1

So I created empty hello world app in .NET MAUI Android. Changed your code to use Dynastream nuget instead of Fit.dll (tested it by unit tests and it worked after some tweaks like removing BMI). The second library (GarminConnectClient) I get from your fork.

But when I tested the app (in Emulator and on my phone) I got problem with connection to garmin cloud. I got 403 and in Content: error code 1020 Access Denied from cloudflare.

So in summary it looks promising. Soon I will try refactor app from Xamarin to MAUI, but then I have no idea how deal with the cloudflare at the moment

Hi, I checked your project and it worked for me in unit tests (it uploaded weight to my garmin account) but I got some issues when I tried to integrate it with xamarin app.

Do you have have source of Fit.dll library? It's built in .Net Framework 4.5 and probably only for Windows so it cannot be used in mobile. But I found nuget Dynastream Fit Portable. It's little old too (.core 1.1) and some features are missing (Ex. BMI). I couldn't use it in Xamarin because Xamarin support only .netstandard (2.0/2.1) libraries.

This will not work with the Nuget Portable version. The reason for the need of using a specific Fit.dll is that the BMI field is an undocumented "garmin only" field. So I had to extend the FIT SDK with the FitGen method provided by the SDK. I noticed the incompatibility issue when I was trying to create a NuGet package. I  pushed some changes that I think resolves it. Also I uploaded a nuget package that has all the necessary DLL-s. Hope this will work this way.

But .NET MAUI is already built on top of .NET 6 and it can consume libraries from .net core 1.1
So I created empty hello world app in .NET MAUI Android. Changed your code to use Dynastream nuget instead of Fit.dll (tested it by unit tests and it worked after some tweaks like removing BMI). The second library (GarminConnectClient) I get from your fork.
But when I tested the app (in Emulator and on my phone) I got problem with connection to garmin cloud. I got 403 and in Content: error code 1020 Access Denied from cloudflare.

I tested this on windows and everything worked like a charm. Then I tried to move it under linux and create a webapi (porting your go version). I have the same issue... I am still trying to debug that... It must be the http client the framework uses behind the scene as every other thin is the same. Actually I implemented a similar client under nodejs and I crossed checked what I use there

So in summary it looks promising. Soon I will try refactor app from Xamarin to MAUI, but then I have no idea how deal with the cloudflare at the moment

Yes I am working on that too in the meantime. The issue is currently that I have zero idea what the cause of this difference could be. I mean I drilled down in the debug data quite far and the requests are identical... Nevertheless, I will keep looking. As a try, you could try to change the user agent to some android chrome specific (although this did not solve my issue under ubunut but who know).

I tested another library and it has the same issue... it works perfectly on windows, and it does not work on Linux...
I cannot wrap my head around this. I suspect that on the tcp request going out from linux something is included/or omited in the request that triggers cloudflare.

@lswiderski @lswiderski it's kind of easy to spot the issue. We can make a http request to some http self hosted server with spoofed hosts record. Then we can dump the request with wireshark/tcpdump etc... After that we can compare the request from the windows and Linux.

Ok, so the good news is that after 4 hours of testing and researching (and praying that I dont get caught at the office with :):) ) I was able to find the issue and make this work on Linux. The bad news is that the project needs to be updated to a higher dotnet version.
For some reason Cloudflare was unhappy when the program makes a request from Linux with a HTTP version 1.1 or 1.0 (this never came up as an issue under Windows, I can only speculate about the reasons for this), so the DefaultRequestVersion had to be set to HttpVersion.Version20 and the DefaultVersionPolicy to  HttpVersionPolicy.RequestVersionOrLower. However this is only available (I think) on Dotnet Core 2.2 or later...
Also I checked in Chrome what Http version is used when accessing the web interface and there also h2 is used.
I also made some researches why the Go Lang implementation of the uploader works from linux, and it turns out that the net/http package uses h2 as default.
So I conclude that this is seemingly an actual fix for the Cloudflare issue.
As a next steps I will

push the changes to my fork of the GarminConnectClient (I will try to PL the changes to the original GarminConnectClient repo, but not sure if it ever gets merged)
update the Target Framework of the Weight Uploader to net6.0 and make necessary changes
create a new nuget package as a new release

New release as nuget is available and all changes are pushed to the repos.

Unfortunately When I added nuget I catch exception from internals with newtonsoft.Json couldn't be found. So again I tried with yours source codes and I couldn't deploy it with Fit.dll. After replacing it with Dynastream.Fit, I  got same result in http client. Http 403 and 1020 from cloudflare in emulator and in phone.

Hi, let's tackle Cloudflare first. I think this is should be still the incorrect protocol. It is possible that the native httpclient overrides this. Can you please add the following tag to the csproj file:

false

On the Newtonsoft just add direct reference in your project to the latest 13.0.1 version. Probably the packaging is incorrect. As I said I never did nuget before so I will try to resolve this.
On the fit.dll I will try to figure out the issue. Actually it's possible to add non documented Fit fields with reflection but its a bit messy:) as last resort I will make those changes.

Can you please add the following tag to the csproj file:
false

Which tag should I set to false?
About the library release It doesn't need to be nuget package, it can be dll but target to min .net standard 2 or .net 5/6

Sorry, when I edited my post I deleted it:
false

I have a good news. After disable native http handler it works in dummy .NET MAU  Android App
Also when I add manually newtonsoft.Json 13.0.1 it works with you nuget (so with fit.dll). However compiler gives me warning about mismatch the processor architecture, but no error in emulator or on my phone.
I already started with refactor App to MAUI in free time

I released the alpha version of MAUI version.
The UI is buggy and will change in future but the feature with direct call to Garmin Connect is working.
#

That is excellent news. I will try to test it.
Also I will need to do some refactoring on the garmin-connect fork wtr. to httpclient and the login mechanism. I will also tackle this FIT.dll error and the other errors.

I tested the app, it works for me. I made some changes to the GarminConnectClient to avoid certain bugs. I this is quite final for this purposes from my side.
this is the relase

Great! Can you release this in nuget.org? It will help in nuget management when all required libs are from one nuget repository

https://www.nuget.org/packages/GarminWeightScaleUploader.Library/0.2.1
I hope it works. Let me know if you have any issues.

Version 2.0.1 with direct call to Garmin API is released, so I'm closing this feature request. Thanks @Abasz for your work.


fix: Add SLPDB_URL env var to readme

Pull Request Test Coverage Report for Build 2109

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 70.527%

Totals

Change from base Build 2084:
0.0%

Covered Lines:
2047

Relevant Lines:
2705

💛  - Coveralls


[Bug]: The default "tar" command can not recognize a compressed file with a suffix ".txz"

Current Behavior (bug)
I got following error when I use "tar" command to unpack a compressed file named "file.txz" in devbox shell on Mac:
$ /nix/store/4ifdvs7fjczlvyssp1h91139n4yb57d3-gnutar-1.35/bin/tar xf /var/folders/bx/rkz1lhfd5pbdnk5gthwjjkdm0000gn/T/d20231129-24858-15lo80l/file.txz -C /var/folders/bx/rkz1lhfd5pbdnk5gthwjjkdm0000gn/T/d20231129-24858-15lo80l
   /nix/store/4ifdvs7fjczlvyssp1h91139n4yb57d3-gnutar-1.35/bin/tar: This does not look like a tar archive
   /nix/store/4ifdvs7fjczlvyssp1h91139n4yb57d3-gnutar-1.35/bin/tar: Skipping to next header
   /nix/store/4ifdvs7fjczlvyssp1h91139n4yb57d3-gnutar-1.35/bin/tar: Exiting with failure status due to previous errors

Expected Behavior (fix)
The 'tar' command functions properly in the devbox shell on Mac when unpacking a compressed file whose name ends with '.txz'.
Additional context
I checked the version of tar command in devbox shell and found that the devbox use gnutar as the default "tar" command. While outside the shell, I found the default version of "tar" command is bsdtar.
By the way, the orignional command used to unpack the file is generated by Cocoapods, so I'm not able to use other command or arguments to do the unpacking process
Here's the output of devbox version -v and
a copy of my devbox.json file.
Version:     0.8.2
Platform:    darwin_amd64
Commit:      33ea788cb4dbf6958208669c9e4df9c1e858ad2c
Commit Time: 2023-11-15T00:23:52Z
Go Version:  go1.21.3
Launcher:    0.2.0

{
  "packages"<EMAIL_ADDRESS>  "shell": {
    "init_hook": [
      "echo 'Welcome to devbox!' > /dev/null"
    ],
    "scripts": {
      "test": [
        "echo \"Error: no test specified\" && exit 1"
      ]
    }
  }
}

I think there was a similar post in the Discord. If you need bsdtar, the correct package to install is [libarchive](https://www.nixhub.io/packages/libarchive). This is unfortunately not very clear from the package description or title, so we should add some more information in Nixhub to clarify this

The libarchive package only provides the bsdtar command, but does not provide the tar command. I want to replace the tar command provided by gnutar with bsdtar.


Flaky test: test_create_network_smoke_test

Seeing this test fail regularly with the following:
result_as_json = {'error': 'An object with the same path=[/infra/tier-1s/cgw/segments/web-tier] is marked for deletion. Either use another path or wait for the purge cycle (max 5 minutes) for permanent
 removal of the object.'}

the extension module should probably just correctly handle that case.

Just realized this was on creation not deletion.
The test should probably generate a random string to create the network name. We can't import it, cause it's not part of the Salt install, but we can probably just put https://github.com/saltstack/salt/blob/2a030cd3f89966181f12d94bb863f89812e09813/tests/support/helpers.py#L1406-L1433 in as a test fixture(?)


Error: cannot read property 'jobs' of undefined.

Cannot read property 'jobs' of undefined.
Here is my index.android.js
import { AppRegistry } from 'react-native';
import App from './App';
import Store from './redux/store';
import * as actions from './actions/addressbook'
import BackgroundJob from 'react-native-background-job';

AppRegistry.registerComponent('contactsync', () => App);

// puller =  () => {
//     console.log("RUNNO IN BACKGROUND");
//   Store.dispatch(actions.requestedNewNumber());
// }

const backgroundJob = {
 jobKey: "myJob",
 job: () => console.log("Running in background")
};

BackgroundJob.register(backgroundJob);

var backgroundSchedule = {
 jobKey: "myJob",
 timeout: 2000
}

BackgroundJob.schedule(backgroundSchedule);

My dependencies:
{
  "react-native": "^0.45.1",
    "react-native-background-job": "^1.2.4"
}

Try scheduling the job inside your React component instead of at the global
scope
ons 19 juli 2017 kl 16:04 skrev Kliton<EMAIL_ADDRESS>
Cannot read property 'jobs' of undefined.
Here is my index.android.js
import { AppRegistry } from 'react-native';import App from './App';import Store from './redux/store';import * as actions from './actions/addressbook'import BackgroundJob from 'react-native-background-job';
AppRegistry.registerComponent('contactsync', () => App);
// puller =  () => {//     console.log("RUNNO IN BACKGROUND");//   Store.dispatch(actions.requestedNewNumber());// }
const backgroundJob = {
jobKey: "myJob",
job: () => console.log("Running in background")
};
BackgroundJob.register(backgroundJob);
var backgroundSchedule = {
jobKey: "myJob",
timeout: 2000
}
BackgroundJob.schedule(backgroundSchedule);
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/vikeri/react-native-background-job/issues/42, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAzrYJPb8YJ30DrKJujBuWfwXZ2jEo8eks5sPot-gaJpZM4OdaCH
.

Still not working...

Hmm, what version are you using?

Can you post your entire example that is not working?

Seems the jobs are not registering, even if the registering jobs is placed on index.android.js outside components. Attempt to schedule job results to undefined job is not registered. I am using android studio virtual device.
React Native v 0.44.1
react-native-background-job v1.2.4
import React, { Component } from 'react';
import { AppRegistry, Text } from 'react-native';
import BackgroundJob from 'react-native-background-job';

BackgroundJob.register(
  {
    jobKey: 'one',
    job: () => console.log('-----------------Timer Running-----------------'),
  },
);

BackgroundJob.register(
  {
    jobKey: 'two',
    job: () => console.log('-----------------Tracking location-----------------'),
  },
);

class ComponentActivityButton extends Component {
  constructor(props) {
    super(props);
// This logs on terminal "============Jobs", [ ] << empty array
		BackgroundJob.getAll({
			callback: jobs => console.log("============Jobs:", jobs),
		});
  }

  render() {
    return (
      <Text>Yoo</Text>
    );
  }
}

AppRegistry.registerComponent(
  'ComponentActivityButton',
  () => ComponentActivityButton,
);

export default ComponentActivityButton;


Support SpringCloud 2023.0.0

SpringCloud2023 has officially been GA, should we consider upgrading?

yep, welcome contribute.

Follow this issue https://github.com/alibaba/spring-cloud-alibaba/issues/3574


Add support to enable, disable and list groups in test command

Purpose

Adds support to enable, disable and list groups in test command
Fixes #18772

Check List

[x] Read the Contributing Guide
[ ] Updated Change Log
[ ] Checked Tooling Support (#)
[x] Added necessary tests

[x] Unit Tests
[ ] Spec Conformance Tests
[x] Integration Tests
[ ] Ballerina By Example Tests

[ ] Increased Test Coverage
[ ] Added necessary documentation

[ ] API documentation
[ ] Module documentation in Module.md files
[ ] Ballerina By Examples

Codecov Report

Merging #20883 into ballerina-1.1.x will not change coverage.
The diff coverage is n/a.

@@               Coverage Diff                @@
##           ballerina-1.1.x   #20883   +/-   ##
================================================
  Coverage            15.21%   15.21%
================================================
  Files                   50       50
  Lines                 1341     1341
  Branches               208      208
================================================
  Hits                   204      204
  Misses                1121     1121
  Partials                16       16

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 a24da47...fd4080e. Read the comment docs.

The help text (ballerina-test.help) needs to be updated right?
Yes, updated in 843a452


Possibility to add launch via executable alongside Steam launch?

Useful for retail non-Steam copies, would be nice to have :)

and for pirate copies as well


Include Helm chart name in push error

Include Helm chart name in push error for easier debugging.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/cherrypick release-0.20

/lgtm

/approve


✨ [Feature request]: Dynamic Twitter thumbnail

Is your feature request related to a problem? Please describe.
No this feature is not related to any problem it is  for  getting  twitter thumbs dynamically
Suggested by @koustov
Describe the solution you'd like.
We can get recently  mentioned tweets through twitter API and can update it dynamically.
Describe alternatives you've considered.
Alternatives can be to get  recent  mentions  from the twitter handle as we do  now.
Screenshot / Screenshare
No response
Additional context
I would like to work on this.
Code of Conduct

[X] I agree to follow this project's Code of Conduct

@yung-coder How are we planning to solve this?

@yung-coder How are we planning to solve this?

@atapas
We can get recently mentioned tweets from reactplay Twitter's handel by using Twitter api and extract twitter id form that and then we can show them on frontend.
Refer this:-
https://oauth-playground.glitch.me/?id=usersIdMentions&params=('query!()~body!''~path!('*~**id!'2244994945')*_

Hi, Can I work on this feature?

hey @atapas  should i  start on this one ...?


Error after install

Hi,
Installed theme in Local , followed instructions from site (and closed issue) but still getting error.
Vendor directory is not created. Views directory is created.
Server started just fine.
Please check SS for details
https://prnt.sc/-94W7mnliBnp
Maybe I`m missing something

Hi @igorsamardzija . Did you run composer install?

Hi @nikola-wd,
Yes I followed provided instructions.

@igorsamardzija Can you please screenshot your theme directory (vendor should be there).
And also, please run composer install again from the theme root, and screenshot the message that you get. P.S. (Minimum PHP version required as of the latest release is 8.0, maybe you are running on an older PHP version?)
If you have Discord, please join via the link here so I can try to assist faster: https://webredone.com/theme-redone/support/

Hi @igorsamardzija .
Please do this from inside the terminal (the root of the theme):
composer install (After that's done, take a screenshot of the terminal output)
Also, please confirm that you used PHP version 8 or newer for Local, and not some of the previous versions.


failed to load on newest Obsidian version

How did you solve this?

idk i forgot, but it just worked somehow?


Update main.yml

Pull Request Test Coverage Report for Build 305101435

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 36.808%

Totals

Change from base Build 305083492:
0.0%

Covered Lines:
5907

Relevant Lines:
16048

💛  - Coveralls


opt(apps/gcp/prow/release): try to fastup tide update speed

Signed-off-by: wuhuizuo<EMAIL_ADDRESS>

/approve


Internal Error with /viaversion pps

What version of ViaVersion are you using? Type /ver viaversion
Last version 0.7.9
What version of Spigot are you using? Type /ver
This server is running CraftBukkit version git-Spigot-fdc1440-53fac9f (MC: 1.8.8) (Implementing API version 1.8.8-R0.1-SNAPSHOT)
What plugins are you using? Type /plugins

Are you using any additional software like BungeeCord? If so, what software and version? (Please list your plugins as well)
Yes
Bungee Plugins : BungeePerms, Just2Ban, BConfReloader, BungeeStaffChat, CommandControl and ServerListPlus
How does this error happen? login? Using an item?
The command "/viaversion pps" work the first time but after someone minutes, she produce an error in log (Internal error occurred)
Is there an error in the console? Use pastebin.com. Is there a kick message?
Yes : http://pastebin.com/cFdxLLDp

Will be fixed in next version.

Next is this error :(


Support loading geotiff image from blob

My app supports users dragging a geo-referenced image onto the map, which will then display it at the right location.
This cannot currently be ported to the new openlayers GeoTIFF source, because that can only load an image from a url, while an image that is dragged into the browser becomes available as a Blob.
Normally, one would call URL.createObjectURL(blob) and pass the resulting URL, but that does not work for the GeoTIFF source (at least not in the browsers I've tried, such as Firefox 100), because the geotiff.js function fromUrl needs to be able to read ranges from the file, and the browser does not support the range api for that data url.
It would therefore be nice if GeoTIFF exposed access to the fromBlob function in geotiff.js.
Here is a simple suggestion how this could be implemented:
diff --git a/src/ol/source/GeoTIFF.js b/src/ol/source/GeoTIFF.js
index 2188a297b..545182ed3 100644
--- a/src/ol/source/GeoTIFF.js
+++ b/src/ol/source/GeoTIFF.js
@@ -4,7 +4,7 @@
 import DataTile from './DataTile.js';
 import State from './State.js';
 import TileGrid from '../tilegrid/TileGrid.js';
-import {Pool, fromUrl as tiffFromUrl, fromUrls as tiffFromUrls} from 'geotiff';
+import {Pool, fromUrl as tiffFromUrl, fromUrls as tiffFromUrls, fromBlob as tiffFromBlob} from 'geotiff';
 import {
   Projection,
   get as getCachedProjection,
@@ -19,6 +19,7 @@ import {fromCode as unitsFromCode} from '../proj/Units.js';
  * @typedef {Object} SourceInfo
  * @property {string} url URL for the source GeoTIFF.
  * @property {Array<string>} [overviews] List of any overview URLs.
+ * @property {Blob} blob Source GeoTIFF is provided as a blob.  Overrides url and overviews.
  * @property {number} [min=0] The minimum source data value.  Rendered values are scaled from 0 to 1 based on
  * the configured min and max.  If not provided and raster statistics are available, those will be used instead.
  * If neither are available, the minimum for the data type will be used.  To disable this behavior, set
@@ -189,7 +190,9 @@ function getImagesForTIFF(tiff) {
  */
 function getImagesForSource(source, options) {
   let request;
-  if (source.overviews) {
+  if (source.blob) {
+    request = tiffFromBlob(source.blob);
+  } else if (source.overviews) {
     request = tiffFromUrls(source.url, source.overviews, options);
   } else {
     request = tiffFromUrl(source.url, options);

With this small patch I have successfully displayed images dragged into the browser using openlayers.

This was implemented by #13191 but is not merged as no one had found a case where createObjectUrl did not work.

Looks like we have a case now where createObjectUrl does not work.

Ah, now I understand why my scripts don't work in Firefox, but work in Chrome. So it seems that we finally found a good argument to merge #13189. I deleted my fork in the meantime, but happy to revive it if you want me to do that.

@m-mohr Yes, please revive it. I have already added a review comment to #13191.

This can be closed, right? @ahocevar

Yes, thanks, @m-mohr


VS Code icon not visible in taksbar

Type: Feature Request
VS Code icon not visible in taksbar
VS Code version: Code 1.86.2 (903b1e9d8990623e3d7da1df3d33db3e42d80eda, 2024-02-13T19:40:56.878Z)
OS version: Windows_NT x64 10.0.22621
Modes:

Can you post a screenshot of what you're seeing?

This issue has been closed automatically because it needs more information and has not had recent activity. See also our issue reporting guidelines.
Happy Coding!


Include information regarding outbound traffic while the instance is configured with private access

Correct me if I'm wrong, but I couldn't find any documentation confirming whether or not the Flexible server uses the vnet for outbound traffic or not while configured with vnet integration.
Some context for explanation: I wanted to set up data-in replication from an AWS RDS instance to an Azure MySQL instance over a site-to-site VPN. With the Single server instance, traffic from the instance (even with a private endpoint configured) uses its public IP for outbound traffic and therefore could not traverse the VPN. Upon testing with the Flexible instance, it works in a private access configuration and the instance uses an IP on the delegated subnet for outbound traffic.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 13be490f-8874-c49d-1db3-33b592cb069b
Version Independent ID: 4fae1481-3a75-d929-3a3f-2098ff07cd28
Content: Private Network Access overview - Azure Database for MySQL Flexible Server
Content Source: articles/mysql/flexible-server/concepts-networking-vnet.md
Service: mysql
GitHub Login: @madhusoodanan
Microsoft Alias: dimadhus

Hi, @kaheamartin Thanks for reaching out, We will Investigate and update you shortly.

Hi @kaheamartin Public and Private connectivity is not supported in flex serve yet,

Hi @kaheamartin We will proceed to close this issue now.
If there are further questions regarding this, please comment and we will gladly continue the discussion.

Hello, I don't think you understood what I was trying to convey. Public to Private connectivity is not what I was talking about. What I'm talking about is traffic from a Flexible server instance configured with Private Access at the time of provisioning is set up to integrate into a VNET. What differs from Singler servers here, is that Flexible servers outbound traffic actually goes through the VNET, which means that replication over a site to site VPN is possible on Flexible servers, but not Single servers.
Hopefully this makes sense.


How to retrieve users with claims

Is there an example anywhere that shows how to retrieve a list of all user accounts along with their claims? Using the IUserAccountQuery interface returns a limited number of properties of the account and does not include claims.

The idea is that the IUserAccountQuery is for high level queries so then an individual account can be loaded.
Recently I added IQueryable Users property on the UserAccountService -- I don't know if that's in the latest on NuGet or not...

Thanks for the quick response. There's no Users property on the UserAccountService in my solution which is using the NuGet package so I guess it's not been updated. I'll get the source and use that instead.
Cheers!


How to change JFXCombo Box text color to white

Please help me. I know this is a dumb question but please help

Try one of these css styles. Hope it helps.
-jfx-focus-color: white;
-jfx-unfocus-color: white;
.combo-box > .list-cell {
-fx-background: black;
-fx-background-color: black;
-fx-text-fill: white;
}

Non of these work

If you mean the editor of the combobox, you might need to find a proper css property to set the editor's text color considering the default editor is a textfield.

i mean this

try this maybe?
.combo-box > .combo-box-button-container {
-fx-background: black;
-fx-background-color: black;
-fx-text-fill: white;
}

Nope still didnt work.. Hmm

boop boop ^.^
.jfx-combo-box {
	-fx-background-color:  PINK;
}

.jfx-combo-box .label {
	-fx-background-color:  WHITE;
	-fx-text-fill: RED;
}

@Sashie thanks mate! You did it thanks alot cuz im doing this for my degree project and im having my dead line near by thanks alot.

by rights that's up to the ones who run this repo but i see no harm in it,,

Oh, then I'm opening this window and from here I will open another stage and in it, I have a tree view. Could I know how can I get those values back to text fields in the below shown. like lets say the one shown below is 1st window then I click on the button near the cuscode and opens another 2nd window which contains tree view which from there i need selected row values passed to my 1st below shown stage.

https://cloud.githubusercontent.com/assets/20990764/25537065/aaff7412-2c5a-11e7-8904-de7620e93f27.png

pregunto lo mismo


nvm install node results in env: node: No such file or directory

Operating system and version:
macOS Monterey 12.3.1 (21E258)
nvm debug output:

nvm --version: v0.36.0
$TERM_PROGRAM: Apple_Terminal
$SHELL: /bin/zsh
$SHLVL: 1
whoami: 'nguyen'
${HOME}: /Users/nguyen
${NVM_DIR}: '${HOME}/.nvm'
${PATH}: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
$PREFIX: ''
${NPM_CONFIG_PREFIX}: ''
$NVM_NODEJS_ORG_MIRROR: ''
$NVM_IOJS_ORG_MIRROR: ''
shell version: 'zsh 5.8 (x86_64-apple-darwin21.0)'
uname -a: 'Darwin 21.4.0 Darwin Kernel Version 21.4.0: Fri Mar 18 00:45:05 PDT 2022; root:xnu-8020.101.4~15/RELEASE_X86_64 x86_64'
checksum binary: 'shasum'
OS version: macOS 12.3.1 21E258
curl: /usr/bin/curl, curl 7.79.1 (x86_64-apple-darwin21.0) libcurl/7.79.1 (SecureTransport) LibreSSL/3.3.5 zlib/1.2.11 nghttp2/1.45.1
wget: not found
sed: /usr/bin/sed
cut: /usr/bin/cut
basename: /usr/bin/basename
rm: /bin/rm
mkdir: /bin/mkdir
xargs: /usr/bin/xargs
git: /usr/bin/git, git version 2.32.0 (Apple Git-132)
grep: /usr/bin/grep, grep (BSD grep, GNU compatible) 2.6.0-FreeBSD
awk: /usr/bin/awk, awk version 20200816
nvm current: none
which node: node not found
which iojs: iojs not found
which npm: npm not found
npm config get prefix: nvm:214: command not found: npm
npm root -g: nvm:214: command not found: npm

nvm ls output:

            N/A
iojs -> N/A (default)
node -> stable (-> N/A) (default)
unstable -> N/A (default)
lts/* -> lts/gallium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.19.2 (-> N/A)
lts/gallium -> v16.15.0 (-> N/A)

How did you install nvm?
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.36.0/install.sh | bash
What steps did you perform?
nvm install node
What happened?
Downloading and installing node v18.1.0...
Downloading https://nodejs.org/dist/v18.1.0/node-v18.1.0-darwin-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
env: node: No such file or directory
Binary download failed, trying source.
Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!
Downloading https://nodejs.org/dist/v18.1.0/node-v18.1.0.tar.xz...
######################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
env: node: No such file or directory
nvm: install v18.1.0 failed!
What did you expect to happen?
node to be installed successfully
Is there anything in any of your profile files that modifies the PATH?

no

You’re installing an outdated version of nvm. What happens if you install the latest, from the readme?

You’re installing an outdated version of nvm. What happens if you install the latest, from the readme?

same thing happens
i ran
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
to get the lastest from the readme
then i ran
nvm install node
the same error occurs
Downloading and installing node v18.1.0...
Downloading https://nodejs.org/dist/v18.1.0/node-v18.1.0-darwin-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
env: node: No such file or directory
Binary download failed, trying source.
Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!
Downloading https://nodejs.org/dist/v18.1.0/node-v18.1.0.tar.xz...
######################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
env: node: No such file or directory
nvm: install v18.1.0 failed!
@ljharb could something be wrong with my pathing because i see its trying to run env node which looks for node on my machine right?

Are you using an M1 Mac? Have you installed Xcode command line developer tools? Does which node output anything before trying to install nvm?

Are you using an M1 Mac? Have you installed Xcode command line developer tools? Does which node output anything before trying to install nvm?

I am not using an M1 mac. I have already installed xcode command line developer tools. which node does outputs node not found

Are you using an M1 Mac? Have you installed Xcode command line developer tools? Does which node output anything before trying to install nvm?

Is there any difference in M1 mac ?

Yes, node < 16 doesn’t work on M1 outside of a Rosetta terminal.

@Jnguy142 i'd rather keep it open until we've found you a proper fix. Could you answer https://github.com/nvm-sh/nvm/issues/2809#issuecomment-1137944457 ?

As long as on your new machine you don't have to use that workaround, I'll close this then :-)


[HxPager] Overflowing on mobile devices

As the TableContainerCssClass only wraps the table itself, there is potential issue with HxPager overflowing on mobile devices if the number of pages is high even though the table-responsive class is used.

Decision: to display arrows + three page-numbers + arrows on XS devices.

@jirikanda please apply following changes:
Page 1-3 no change
Page 4-5 add classes "d-none d-md-block"
Page 6-10 add classes "d-none d-lg-block"

Future plans: The breakpoint should be configurable as we do not know the layout of the page.
We might support several breakpoints where the number of displayed pages will be decreasing.


Add Statment To filter

Hi thank you for your great project
I want to add dynamic statement to Filter you have ReadFromxml but please provide a method to add IFilterStatement to filter class
thank you so much

Hi @pouyaSamie,
Sorry for the late reply. Many thanks for using the project. It's great to know your enjoying it.
I'll think about this and keep you posted.
Thanks for your suggestion.
Cheers.


Bump to UBI 8.4

Other upstream repositories might also need a similar update

lgtm. Just curious if there's been an ask to bump the ubi tag? And does it introduce any dependency updates as well?

lgtm. Just curious if there's been an ask to bump the ubi tag? And does it introduce any dependency updates as well?

@nightfurys IronBank is mandating UBI 8.4 now so it seems reasonable to bump our version rather than hand-crafting a release w/different upstreams for them.


How to set custom uid and guid ?

I am reading at https://github.com/docker-library/ghost/blob/3332df18c9d6a11ba0d227b667ba27733a44fafe/3/alpine/Dockerfile and can't find a way to add a custom UID and GID for the container.
Apparently this feature was added before https://github.com/docker-library/ghost/pull/53
How can I set the custom uid and guid in the official docker ghost image ?

The PR you linked was closed, not merged. But with the merge of https://github.com/docker-library/ghost/pull/54 You'd use the  --user option

This is implemented in the same way we've supported arbitrary values for docker run --user in many other images.

https://github.com/docker-library/ghost/issues/19#issuecomment-332353148

Hi @wglambert and thank you for your quick reply.
Perhaps you can enlight me, my goal is pretty simple : I want to create an environment of development for ghost with a forked casper theme for docker .
I have followed this recent tutorial : https://www.grottedubarbu.fr/ghost-docker-theme-dev/ (french) to setup a development environment. (I couldn't find a recent resource for ghost 3.0 other than this one)
Within the container, the UID used if I dont set the --user option is 1000, while my own UID is 10000, for editing those files in IntelliJ, I must set the UID within the container to 10000
My docker-compose.yml look like this:
version: '3'
services:
  blog-kop-ax:
    container_name: dev-blog-kop-ax
    image: ghost:3.35.5-alpine
    ports:
      - "2368:2368"
    restart: unless-stopped
    user: "10000:10000"
    volumes:
      - ./content:/var/lib/ghost/content
      - ./themes/blog-kopax:/var/lib/ghost/content/themes/blog-kopax
    environment:
      - NODE_ENV=development
    networks:
      - lan

  node-tools-init:
    image: node:12-buster-slim
    container_name: ghost-tools-init
    restart: on-failure
    user: "10000:10000"
    volumes:
      - ./themes/blog-kopax:/home/node/app/blog-kopax
    working_dir: /home/node/app/blog-kopax
    command: 'yarn install'
    networks:
      - lan

  node-tools:
    image: node:12-buster-slim
    container_name: ghost-tools
    restart: unless-stopped
    user: "10000:10000"
    volumes:
      - ./themes/blog-kopax:/home/node/app/blog-kopax
    working_dir: /home/node/app/blog-kopax
    command: 'yarn dev'
    network_mode: none

networks:
  lan:

The themes/blog-kopax directory is a symlink of a cloned repository of TryGhost/Casper themes
As you expect, with --user 10000,  I can see themes/blog-kopax directory using the right folder permissions (10000), but the content folder is always created for root user (while I expected it to be created for 10000).
Also, I expected the content mounted volumes to be created on first run. since my container fail at start, I can see that content/themes/blog-kopax is also created and empty, but also duplicate of theme/blog-kopax (the correct theme directory).
This is the log:
Attaching to dev-blog-kop-ax, ghost-tools, ghost-tools-init
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
ghost-tools-init   | yarn install v1.22.5
ghost-tools-init   | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools-init   | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools-init   | [1/5] Validating package.json...
ghost-tools-init   | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools-init   | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools-init   | [2/5] Resolving packages...
ghost-tools-init   | success Already up-to-date.
ghost-tools-init   | Done in 0.28s.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:05] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:05] Starting 'default'...
ghost-tools        | [16:18:05] Starting 'css'...
ghost-tools        | [16:18:05] 'css' errored after 588 ms
ghost-tools        | [16:18:05] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:05] 'default' errored after 589 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:07] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:07] Starting 'default'...
ghost-tools        | [16:18:07] Starting 'css'...
ghost-tools        | [16:18:07] 'css' errored after 580 ms
ghost-tools        | [16:18:07] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:07] 'default' errored after 581 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:09] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:09] Starting 'default'...
ghost-tools        | [16:18:09] Starting 'css'...
ghost-tools        | [16:18:09] 'css' errored after 742 ms
ghost-tools        | [16:18:09] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:09] 'default' errored after 743 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:11] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:11] Starting 'default'...
ghost-tools        | [16:18:11] Starting 'css'...
ghost-tools        | [16:18:11] 'css' errored after 570 ms
ghost-tools        | [16:18:11] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:11] 'default' errored after 571 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:13] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:13] Starting 'default'...
ghost-tools        | [16:18:13] Starting 'css'...
ghost-tools        | [16:18:14] 'css' errored after 566 ms
ghost-tools        | [16:18:14] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:14] 'default' errored after 568 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:17] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:17] Starting 'default'...
ghost-tools        | [16:18:17] Starting 'css'...
ghost-tools        | [16:18:17] 'css' errored after 617 ms
ghost-tools        | [16:18:17] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:17] 'default' errored after 619 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:21] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:21] Starting 'default'...
ghost-tools        | [16:18:21] Starting 'css'...
ghost-tools        | [16:18:22] 'css' errored after 567 ms
ghost-tools        | [16:18:22] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:22] 'default' errored after 568 ms
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:29] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:29] Starting 'default'...
ghost-tools        | [16:18:29] Starting 'css'...
ghost-tools        | [16:18:30] 'css' errored after 564 ms
ghost-tools        | [16:18:30] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:30] 'default' errored after 566 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:18:44] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:18:44] Starting 'default'...
ghost-tools        | [16:18:44] Starting 'css'...
ghost-tools        | [16:18:45] 'css' errored after 552 ms
ghost-tools        | [16:18:45] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:18:45] 'default' errored after 553 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [16:19:11] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [16:19:11] Starting 'default'...
ghost-tools        | [16:19:11] Starting 'css'...
ghost-tools        | [16:19:12] 'css' errored after 562 ms
ghost-tools        | [16:19:12] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [16:19:12] 'default' errored after 564 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

This is my working dir :
dka@dka:[~/workspace/git.kopaxgroup.com/kopax/blog (letort)]: ls -altr
total 160
drwxr-xr-x    3 dka  dka   4096 Oct 16 19:12 ..
-rw-r--r--    1 dka  dka     19 Oct 16 19:13 .npmrc
-rw-r--r--    1 dka  dka    456 Oct 16 19:13 .npmignore
-rw-r--r--    1 dka  dka     86 Oct 16 19:13 .ncurc.js
drwxr-xr-x    4 dka  dka   4096 Oct 16 19:13 .gitlab
-rw-r--r--    1 dka  dka     11 Oct 16 19:13 .eslintignore
-rw-r--r--    1 dka  dka    147 Oct 16 19:13 .editorconfig
-rw-r--r--    1 dka  dka     96 Oct 16 19:13 styleguide.config.js
-rw-r--r--    1 dka  dka    388 Oct 16 19:22 sonar-project.properties
-rw-r--r--    1 dka  dka   1436 Oct 16 19:22 .travis.yml
-rw-r--r--    1 dka  dka   1309 Oct 16 19:22 CONTRIBUTING.md
-rw-r--r--    1 dka  dka      0 Oct 16 19:22 CHANGELOG.md
-rw-r--r--    1 dka  dka     65 Oct 16 19:22 LICENSE.md
drwxr-xr-x    3 dka  dka   4096 Oct 16 19:22 internals
-rw-r--r--    1 dka  dka   3191 Oct 16 19:29 CODE_OF_CONDUCT.md
-rw-r--r--    1 dka  dka   1150 Oct 16 19:32 README.md
drwxr-xr-x    3 dka  dka   4096 Oct 18 09:20 docs
drwxr-xr-x    2 dka  dka   4096 Oct 18 09:21 styleguide
-rw-r--r--    1 dka  dka   1608 Oct 18 09:22 .gitlab-ci.yml
-rw-r--r--    1 dka  dka   4268 Oct 18 10:57 package.json
drwxr-xr-x 1417 dka  dka  49152 Oct 18 10:58 node_modules
-rw-r--r--    1 dka  dka   2619 Oct 24 03:40 deploy_prod.json
drwxr-xr-x    8 dka  dka   4096 Oct 26 11:08 .git
-rw-r--r--    1 dka  dka    255 Oct 26 12:09 .gitignore
-rw-r--r--    1 dka  dka      0 Oct 26 12:54 stale_outputs_checked
drwxr-xr-x    2 dka  dka   4096 Oct 26 17:10 themes
-rw-r--r--    1 dka  dka    989 Oct 26 17:13 docker-compose.yml
drwxr-xr-x   11 dka  dka   4096 Oct 26 17:18 .
drwxr-xr-x    3 root root  4096 Oct 26 17:18 content
drwxr-xr-x    2 dka  dka   4096 Oct 26 17:18 .idea

This is my setup:

There's obviously something wrong with the permissions despite --user being set.
How would you recommend to setup a development environment for docker and using a forked Casper theme?

Hmm, looks like running as an arbitrary user no longer works
Using the test example from https://github.com/docker-library/ghost/pull/54#issuecomment-266583563 :
$ docker run -it --rm --user "$RANDOM:$RANDOM" --name ghost ghost
tar: apps: Cannot mkdir: Permission denied
tar: Exiting with failure status due to previous errors

$ docker run -it --rm --user "$RANDOM:$RANDOM" --name ghost ghost:alpine
tar: can't make dir apps: Permission denied
tar: can't make dir data: Permission denied
tar: can't make dir images: Permission denied
tar: can't make dir logs: Permission denied
tar: can't make dir settings: Permission denied
tar: can't make dir themes: Permission denied
tar: can't create directory 'themes': Permission denied
tar: can't create symlink 'themes/casper' to '/var/lib/ghost/current/content/themes/casper'

$ docker run -it --rm --user "$RANDOM:$RANDOM" --name ghost ghost:2
tar: apps: Cannot mkdir: Permission denied
tar: Exiting with failure status due to previous errors

Great catch -- not sure how #54 ever worked (although it was probably some bug in my Gentoo system at the time).
Fix is up at #237 :+1:

Great, how can I pull this fix from docker hub ?
How about this error tar: can't create symlink 'themes/casper' to '/var/lib/ghost/current/content/themes/casper' ?  I named my theme differently, should I rename casper ?

It's not on Docker Hub yet, but you can build it locally to test with something like docker build --pull https://github.com/docker-library/ghost.git#refs/pull/237/merge:3/alpine (add --tag if you want to tag the image to make it easier to use/test in your docker-compose.yml).

Thanks for your quick reply, I have tried with --tag but it seems that this options is not available for docker build .
I have just tried with:
$ docker build --pull https://github.com/docker-library/ghost.git#refs/pull/237/merge:3/alpine
Successfully built 3dfdd3da7248
$ docker tag 3dfdd3da7248 -t custom-ghost
"docker tag" requires exactly 2 arguments.

I'll keep looking for the right CMD.
Anyone, how about my question regarding the casper theme error ? Why does the mounted renamed theme still require a casper to be set?

Hi all, I have tried with the latest image and I still have some permissions issues:
Attaching to dev-blog-kop-ax, ghost-tools, ghost-tools-init
ghost-tools-init   | yarn install v1.22.5
ghost-tools-init   | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools-init   | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools-init   | [1/5] Validating package.json...
ghost-tools-init   | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools-init   | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools-init   | [2/5] Resolving packages...
ghost-tools-init   | success Already up-to-date.
ghost-tools-init   | Done in 0.33s.
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
dev-blog-kop-ax    | tar: can't make dir apps: Permission denied
dev-blog-kop-ax    | tar: can't make dir data: Permission denied
dev-blog-kop-ax    | tar: can't make dir images: Permission denied
dev-blog-kop-ax    | tar: can't make dir logs: Permission denied
dev-blog-kop-ax    | tar: can't make dir settings: Permission denied
dev-blog-kop-ax    | tar: can't create symlink 'casper' to '/var/lib/ghost/current/content/themes/casper'
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [14:23:36] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [14:23:36] Starting 'default'...
ghost-tools        | [14:23:36] Starting 'css'...
ghost-tools        | [14:23:36] 'css' errored after 658 ms
ghost-tools        | [14:23:36] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [14:23:36] 'default' errored after 660 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [14:23:38] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [14:23:38] Starting 'default'...
ghost-tools        | [14:23:38] Starting 'css'...
ghost-tools        | [14:23:39] 'css' errored after 1.08 s
ghost-tools        | [14:23:39] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [14:23:39] 'default' errored after 1.08 s
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [14:23:41] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [14:23:41] Starting 'default'...
ghost-tools        | [14:23:41] Starting 'css'...
ghost-tools        | [14:23:42] 'css' errored after 876 ms
ghost-tools        | [14:23:42] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [14:23:42] 'default' errored after 879 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [14:23:44] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [14:23:44] Starting 'default'...
ghost-tools        | [14:23:44] Starting 'css'...
ghost-tools        | [14:23:45] 'css' errored after 1.04 s
ghost-tools        | [14:23:45] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [14:23:45] 'default' errored after 1.05 s
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ghost-tools        | yarn run v1.22.5
ghost-tools        | warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.
ghost-tools        | warning Skipping preferred cache folder "/.cache/yarn" because it is not writable.
ghost-tools        | warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-10000".
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost" appears to be invalid.
ghost-tools        | warning<EMAIL_ADDRESS>The engine "ghost-api" appears to be invalid.
ghost-tools        | $ gulp
ghost-tools        | warning Cannot find a suitable global folder. Tried these: "/usr/local, /.yarn"
ghost-tools        | [14:23:47] Using gulpfile /home/node/app/blog-kopax/gulpfile.js
ghost-tools        | [14:23:47] Starting 'default'...
ghost-tools        | [14:23:47] Starting 'css'...
ghost-tools        | [14:23:48] 'css' errored after 956 ms
ghost-tools        | [14:23:48] Error: EACCES: permission denied, open '/home/node/app/blog-kopax/assets/built/global.css'
ghost-tools        | [14:23:48] 'default' errored after 958 ms
ghost-tools        | error Command failed with exit code 1.
ghost-tools        | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.